瀏覽代碼

Merge branch 'feature-201819-wangcz' into dev

Administrator 7 年之前
父節點
當前提交
923b010b31
共有 44 個文件被更改,包括 1333 次插入344 次删除
  1. 6 12
      src/main/java/com/uas/platform/b2c/common/account/controller/SecurityController.java
  2. 1 2
      src/main/java/com/uas/platform/b2c/common/account/model/UsageLog.java
  3. 19 15
      src/main/java/com/uas/platform/b2c/common/psmessage/util/JsonObjectUtil.java
  4. 5 0
      src/main/java/com/uas/platform/b2c/common/search/constant/SearchUrl.java
  5. 13 4
      src/main/java/com/uas/platform/b2c/common/search/rpc/service/Impl/SearchServiceImpl.java
  6. 5 0
      src/main/java/com/uas/platform/b2c/core/constant/IntegerConstant.java
  7. 6 2
      src/main/java/com/uas/platform/b2c/external/erp/prod/service/impl/ProdServiceImpl.java
  8. 1 1
      src/main/java/com/uas/platform/b2c/fa/settlement/model/RequestPayment.java
  9. 0 1
      src/main/java/com/uas/platform/b2c/prod/commodity/api/GoodsController.java
  10. 38 0
      src/main/java/com/uas/platform/b2c/prod/commodity/api/ProductController.java
  11. 13 4
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/ReleaseProductByBatchDao.java
  12. 16 0
      src/main/java/com/uas/platform/b2c/prod/commodity/model/GoodsHistory.java
  13. 23 0
      src/main/java/com/uas/platform/b2c/prod/commodity/model/Product.java
  14. 145 3
      src/main/java/com/uas/platform/b2c/prod/commodity/model/ReleaseProductByBatch.java
  15. 10 2
      src/main/java/com/uas/platform/b2c/prod/commodity/service/GoodsService.java
  16. 43 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductPrivateService.java
  17. 16 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java
  18. 0 10
      src/main/java/com/uas/platform/b2c/prod/commodity/service/ReleaseProductByBatchService.java
  19. 41 12
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java
  20. 122 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductPrivateServiceImpl.java
  21. 45 10
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductServiceImpl.java
  22. 259 186
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ReleaseProductByBatchServiceImpl.java
  23. 2 1
      src/main/java/com/uas/platform/b2c/prod/product/brand/modal/BrandMap.java
  24. 1 1
      src/main/java/com/uas/platform/b2c/prod/product/common/service/impl/CreateNumberServiceImpl.java
  25. 37 0
      src/main/java/com/uas/platform/b2c/trade/order/controller/AdminToDoController.java
  26. 13 0
      src/main/java/com/uas/platform/b2c/trade/order/dao/AdminToDoDao.java
  27. 8 0
      src/main/java/com/uas/platform/b2c/trade/order/dao/MessageNotifyPersonalManagementDao.java
  28. 146 0
      src/main/java/com/uas/platform/b2c/trade/order/model/AdminToDo.java
  29. 18 0
      src/main/java/com/uas/platform/b2c/trade/order/service/AdminToDoService.java
  30. 7 0
      src/main/java/com/uas/platform/b2c/trade/order/service/MessageNotifyPersonalManagementService.java
  31. 97 0
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/AdminToDoServiceImpl.java
  32. 16 0
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/MessageNotifyPersonalManagementServiceImpl.java
  33. 1 1
      src/main/resources/dev/jdbc.properties
  34. 二進制
      src/main/resources/jxls-tpl/trade/releaseByBatch-person.xls
  35. 二進制
      src/main/resources/jxls-tpl/trade/releaseByBatchError-person.xls
  36. 1 1
      src/main/resources/test/jdbc.properties
  37. 19 1
      src/main/webapp/resources/css/user/base.css
  38. 20 1
      src/main/webapp/resources/css/vendor/base.css
  39. 2 6
      src/main/webapp/resources/css/vendor/sell.css
  40. 80 61
      src/main/webapp/resources/js/common/controllers/commonCtrls.js
  41. 8 0
      src/main/webapp/resources/view/sso/header.html
  42. 8 0
      src/main/webapp/resources/view/usercenter/header.html
  43. 14 6
      src/main/webapp/resources/view/vendor/forstore/vendor_upload.html
  44. 8 1
      src/main/webapp/resources/view/vendor/header.html

+ 6 - 12
src/main/java/com/uas/platform/b2c/common/account/controller/SecurityController.java

@@ -393,25 +393,19 @@ public class SecurityController {
 					// 从账户中心获取当前企业信息尽心保存
 					UserSpaceView userSpaceView = AccountUtils.findBySpaceUU(userAccount.getSpaceUU());
 					if (userSpaceView != null) {
-						if (!StringUtils.isEmpty(userSpaceView.getAccessSecret())) {
-							enterprise.setAccessSecret(userSpaceView.getAccessSecret());
-						}
+						enterprise = new Enterprise();
+						enterprise.setAccessSecret(userSpaceView.getAccessSecret());
 						enterprise.setEnAddress(userSpaceView.getRegAddress());
 						enterprise.setEnCorporation(userSpaceView.getCorporation());
 						enterprise.setEnBussinessCode(userSpaceView.getBusinessCode());
-						String enTel = enterprise.getEnTel();
-						if (enTel == null) {
-							enterprise.setEnTel(userSpaceView.getTelephone());
-							if (userSpaceView.getTelephone() == null) {
-								enterprise.setEnTel(userSpaceView.getAdmin().getMobile());
-							}
+						enterprise.setEnTel(userSpaceView.getTelephone());
+						if (userSpaceView.getTelephone() == null && userSpaceView.getAdmin() != null) {
+							enterprise.setEnTel(userSpaceView.getAdmin().getMobile());
 						}
 						enterprise.setEnName(userSpaceView.getSpaceName());
 						enterprise.setEnLogoUrl(userSpaceView.getBusinessCodeImage());
 						enterprise.setUu(Long.valueOf(userSpaceView.getSpaceUU()));
-						if (userSpaceView.getAdminUU() != null) {
-							enterprise.setEnAdminuu(userSpaceView.getAdminUU());
-						}
+						enterprise.setEnAdminuu(userSpaceView.getAdminUU());
 						enterprise.setEnValidCode(userSpaceView.getValidCode());
 						enterprise = enterpriseDao.save(enterprise);
 					}

+ 1 - 2
src/main/java/com/uas/platform/b2c/common/account/model/UsageLog.java

@@ -7,7 +7,6 @@ import org.codehaus.jackson.annotate.JsonIgnore;
 import org.springframework.util.StringUtils;
 
 import javax.persistence.*;
-import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.Date;
 
@@ -62,7 +61,7 @@ public class UsageLog extends BufferedLogable implements Serializable {
 	/**
 	 * 具体操作信息
 	 */
-	@Column(name = "log_message",length = 2000)
+	@Column(name = "log_message", columnDefinition = "TEXT")
 	private String message;
 
 	/**

+ 19 - 15
src/main/java/com/uas/platform/b2c/common/psmessage/util/JsonObjectUtil.java

@@ -9,6 +9,7 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
 import org.springframework.util.StringUtils;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
@@ -23,21 +24,24 @@ public class JsonObjectUtil {
      * jsonobject 转换成page
      * @return
      */
-    public static Page<Object> convertToPage(JSONObject jsonObject, Class cls) {
-//        String content  = String.valueOf(jsonObject.get("content"));
-//        if (!StringUtils.isEmpty(content)) {
-//            try {
-//                List<? extends Class> array = FastjsonUtils.fromJsonArray(content, cls.getClass());
-//                Object number = jsonObject.get("number");
-//                PageImpl<T> page = new PageImpl<T>(array);
-//            } catch (Exception e) {
-//                e.printStackTrace();
-//                return new PageImpl<?>(Collections.<T>emptyList(), new PageInfo(new PageParams(1, 10, null, null)), 0);
-//            }
-//        }
-//        return new PageImpl<T>(Collections.<T>emptyList(), new PageInfo(new PageParams(1, 10, null, null)), 0);
-        //TODO
-        return null;
+    public static <T> Page<T> convertToPage(JSONObject jsonObject, Class<T> cls) {
+        String content  = String.valueOf(jsonObject.get("content"));
+        if (!StringUtils.isEmpty(content)) {
+            try {
+                List<? extends Class> list = FastjsonUtils.fromJsonArray(content, cls.getClass());
+                List<T> listT = new ArrayList<>();
+                for (Class aClass : list) {
+                    T t = cls.cast(aClass);
+                    listT.add(t);
+                }
+                Object number = jsonObject.get("number");
+                PageImpl<T> page = new PageImpl<T>(listT);
+            } catch (Exception e) {
+                e.printStackTrace();
+                return new PageImpl<T>(Collections.<T>emptyList(), new PageInfo(new PageParams(1, 10, null, null)), 0);
+            }
+        }
+        return new PageImpl<T>(Collections.<T>emptyList(), new PageInfo(new PageParams(1, 10, null, null)), 0);
     }
 
 

+ 5 - 0
src/main/java/com/uas/platform/b2c/common/search/constant/SearchUrl.java

@@ -17,6 +17,11 @@ public class SearchUrl {
      */
     public static final String PRODUCT_ID_URL = "/search/productIds?enUU={enUU}&keyword={keyword}&page={page}&size={size}&type={type}";
 
+    /**
+     * 获取企业物料
+     */
+    public static final String PRODUCT_ID_NENUU_URL = "/search/productIds?keyword={keyword}&page={page}&size={size}";
+
     /**
      * 标准型号联想(物料)
      */

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

@@ -77,10 +77,19 @@ public class SearchServiceImpl implements SearchService{
     @Override
     public SPage<Long> getProducts(Long enUU, String keyword, Integer page, Integer size, String type) throws SearchException {
         Map<String, Object> map = initSearchMap(keyword, page, size);
-        map.put("enUU", enUU);
-        // standard 标准  nStandard 非标 其他为所有
-        map.put("type", type);
-        String str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.PRODUCT_ID_URL, String.class, map);
+        if (enUU != null) {
+            map.put("enUU", enUU);
+        }
+        if (!StringUtils.isEmpty(type)) {
+            // standard 标准  nStandard 非标 其他为所有
+            map.put("type", type);
+        }
+        String str = "";
+        if (enUU == null) {
+            str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.PRODUCT_ID_NENUU_URL, String.class, map);
+        } else {
+            str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.PRODUCT_ID_URL, String.class, map);
+        }
         if(StringUtils.isEmpty(str)) {
             return null;
         } else {

+ 5 - 0
src/main/java/com/uas/platform/b2c/core/constant/IntegerConstant.java

@@ -27,4 +27,9 @@ public class IntegerConstant {
 
 
     public static final Integer PAGE_COUNT = 500;
+
+    /**
+     * 年月日 合计的长度 20180725
+     */
+    public static final Integer TIME_LENGTH = 8;
 }

+ 6 - 2
src/main/java/com/uas/platform/b2c/external/erp/prod/service/impl/ProdServiceImpl.java

@@ -15,6 +15,7 @@ import com.uas.platform.b2c.prod.commodity.dao.ProductPrivateDao;
 import com.uas.platform.b2c.prod.commodity.dao.V_ProductPrivateDao;
 import com.uas.platform.b2c.prod.commodity.model.Product;
 import com.uas.platform.b2c.prod.commodity.model.ProductPrivate;
+import com.uas.platform.b2c.prod.commodity.service.ProductPrivateService;
 import com.uas.platform.b2c.prod.commodity.service.ProductService;
 import com.uas.platform.b2c.prod.commodity.service.ReleaseProductByBatchService;
 import com.uas.platform.b2c.prod.store.dao.StoreInDao;
@@ -69,6 +70,9 @@ public class ProdServiceImpl implements ProdService {
     @Autowired
     private CommonDao commonDao;
 
+    @Autowired
+    private ProductPrivateService productPrivateService;
+
     @Autowired
     private ReleaseProductByBatchService releaseProductByBatchService;
 
@@ -113,7 +117,7 @@ public class ProdServiceImpl implements ProdService {
                     products.add(product);
                 }
             }
-            ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(prod.getPr_id());
+            ProductPrivate productPrivate = productPrivateService.findByPrId(prod.getPr_id());
             if (null == productPrivate) {
                 productPrivate = new ProductPrivate();
                 productPrivate.setPrId(prod.getPr_id());
@@ -185,7 +189,7 @@ public class ProdServiceImpl implements ProdService {
         List<Product> productList = productDao.getProductByEnUUAndProdNum(SystemSession.getUser().getEnterprise().getUu(),pr_code);
         if (!CollectionUtils.isEmpty(productList)) {
             for (Product product : productList) {
-                ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+                ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
                 if (null == productPrivate) {
                     productPrivate = new ProductPrivate();
                     productPrivate.setPrId(product.getId());

+ 1 - 1
src/main/java/com/uas/platform/b2c/fa/settlement/model/RequestPayment.java

@@ -99,7 +99,7 @@ public class RequestPayment extends Document {
 	/**
 	 * 付款申请单状态历史(514->515)
 	 */
-	@Column(name = "rep_status_history")
+	@Column(name = "rep_status_history", columnDefinition = "TEXT")
 	private String statusHistory;
 
 	/**************************************************************************

+ 0 - 1
src/main/java/com/uas/platform/b2c/prod/commodity/api/GoodsController.java

@@ -38,5 +38,4 @@ public class GoodsController {
     public Page<Goods> findProducts(PageParams pageParams, @RequestParam(value = "branduuid", required = true) String branduuid, @RequestParam(value = "kindid", required = false) String kindid, @RequestParam(value = "keyword", required = false) String keyword) {
         return goodsService.findGoods(pageParams, branduuid, kindid, keyword);
     }
-
 }

+ 38 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/api/ProductController.java

@@ -0,0 +1,38 @@
+package com.uas.platform.b2c.prod.commodity.api;
+
+import com.uas.platform.b2c.prod.commodity.model.V_ProductPrivate;
+import com.uas.platform.b2c.prod.commodity.service.ProductService;
+import com.uas.platform.core.model.PageParams;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 通过搜索获取物料接口
+ *
+ * @author yuj 2018-07-25 16:52
+ */
+@RestController("APIProductController")
+@RequestMapping("/api/product/search")
+public class ProductController {
+
+    private final ProductService productService;
+
+    @Autowired
+    public ProductController(ProductService productService) {
+        this.productService = productService;
+    }
+
+    /**
+     * 分页获取器件信息
+     * @param params 分页信息
+     * @param keyword 搜索关键字
+     * @return
+     */
+    @RequestMapping(value = "/page", method = RequestMethod.GET)
+    public Page<V_ProductPrivate> getPageProducts(PageParams params, String keyword) {
+        return productService.getPageProducts(params, keyword);
+    }
+}

+ 13 - 4
src/main/java/com/uas/platform/b2c/prod/commodity/dao/ReleaseProductByBatchDao.java

@@ -79,9 +79,18 @@ public interface ReleaseProductByBatchDao
      * @param publisherUu the publisher uu 发布人
      * @param batchid     the batchid 批次号
      */
-    @Procedure(procedureName = "PRODUCT_RELEASE_VALID_V3")
-	public void callValidProcedure(Long publisherUu, String batchid);
+    @Procedure(procedureName = "PRODUCT_RELEASE_VALID_V4", outputParameterName = "rCount")
+	String callValidProcedure(Long publisherUu, String batchid);
 
+    /**
+     * 发布产品
+     * @param enuu 企业的enuu
+     * @param enName 企业的名称
+     * @param batch 批次号
+     * @return 输出的参数
+     */
+    @Procedure(procedureName = "RELEASE_TO_GOODS_V4", outputParameterName = "v_num")
+    Integer publishReleaseProductToGoods(Long enuu, String enName, String batch);
 
 	/**
 	 * 批量上架验证数据信息是否重复
@@ -89,7 +98,7 @@ public interface ReleaseProductByBatchDao
 	 * @param isPersonal 是否是个人
 	 * @param enuu 公司enuu
 	 */
-	@Procedure(procedureName = "PRODUCT_RELEASE_EXIST_VALID_V1")
+	@Procedure(procedureName = "PRODUCT_RELEASE_EXIST_VALID_V3")
 	void callReleaseExistValidProcedure(String batch, Boolean isPersonal, Long enuu);
 
 	/**
@@ -98,7 +107,7 @@ public interface ReleaseProductByBatchDao
 	 * @param batchid
 	 */
 	@Procedure(procedureName = "PRODUCT_RELEASE_VALID_V2_PCB")
-	public void callValidProcedurePcb(Long publisherUu, String batchid);
+	String callValidProcedurePcb(Long publisherUu, String batchid);
 
     /**
      * 创建时间 :2017年1月6日 下午8:25:57

+ 16 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/model/GoodsHistory.java

@@ -440,6 +440,12 @@ public class GoodsHistory {
 	@Column(name = "go_goid")
 	private Long goid;
 
+	/**
+	 * 批量上传的标志
+	 */
+	@Column(name = "go_batchid")
+	private String batchid;
+
 	@Transient
 	private String enterpriseName;
 
@@ -1075,6 +1081,7 @@ public class GoodsHistory {
 		this.prodNum = goods.getProdNum();
 		this.spec = goods.getSpec();
 		this.goid  = goods.getId();
+		this.batchid = goods.getBatchid();
     }
 
 	public Short getSelfDeliveryDemMinTime() {
@@ -1217,4 +1224,13 @@ public class GoodsHistory {
 		this.goid = goid;
 		return this;
 	}
+
+	public String getBatchid() {
+		return batchid;
+	}
+
+	public GoodsHistory setBatchid(String batchid) {
+		this.batchid = batchid;
+		return this;
+	}
 }

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

@@ -1,6 +1,7 @@
 package com.uas.platform.b2c.prod.commodity.model;
 
 import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.core.persistence.EnterpriseUU;
 import com.uas.platform.core.persistence.Logger;
 import com.uas.platform.core.persistence.UserUU;
@@ -997,4 +998,26 @@ public class Product {
 		this.erpDown = erpDown;
 		return this;
 	}
+
+	public void setReleaseByBatch(ReleaseProductByBatch releaseProductByBatch) {
+		this.minPackQty = releaseProductByBatch.getMinPackage();
+		this.cmpImg = releaseProductByBatch.getImg();
+		this.enUU = SystemSession.getUser().getEnterprise().getUu();
+		this.brand = releaseProductByBatch.getBrandNameEn();
+		this.cmpCode = releaseProductByBatch.getCode();
+		this.cmpUuId = releaseProductByBatch.getComponentUuId();
+		this.kind = releaseProductByBatch.getKindName();
+		this.kindid = releaseProductByBatch.getKindUuid();
+		this.pcmpcode = releaseProductByBatch.getB2cCode();
+		this.pbrand = releaseProductByBatch.getB2cBrandcn();
+		this.pbranden = releaseProductByBatch.getB2cBranden();
+		this.pbrandid = releaseProductByBatch.getBrandId();
+		this.pbranduuid = releaseProductByBatch.getBranduuid();
+		this.standard = (releaseProductByBatch.getComponentUuId() == null ? 0 : 1);
+		this.createTime = new Date(System.currentTimeMillis());
+		this.spec = releaseProductByBatch.getSpec();
+		this.prodName = releaseProductByBatch.getKindName();
+		// 产品导入默认可销售
+		this.isSale = ((short) 1);
+	}
 }

+ 145 - 3
src/main/java/com/uas/platform/b2c/prod/commodity/model/ReleaseProductByBatch.java

@@ -498,7 +498,7 @@ public class ReleaseProductByBatch implements Serializable {
 	 * 错误的信息
 	 */
 	@Column(name = "rel_errmsg", length = 4000)
-	private String errmsg;
+	private String errmsg = "";
 
 	/**
 	 * 本批次的最低人民币价格
@@ -548,6 +548,12 @@ public class ReleaseProductByBatch implements Serializable {
 	@Column(name = "rel_productid")
 	private Long productid;
 
+	/**
+	 * 物料id信息
+	 */
+	@Column(name = "rel_pronum", length = 100)
+	private String productNum;
+
 	/**
 	 * 规格书信息
 	 */
@@ -719,9 +725,10 @@ public class ReleaseProductByBatch implements Serializable {
 		} else {
 			if (!isAPerson) {
 				addErrmsg(ErrorInfoConstant.PACKAGE_EMPTY_INFO.getInfo());
-			} else {
-				addErrmsg(ErrorInfoConstant.PERSON_PACKAGE_EMPTY_INFO.getInfo());
 			}
+//			else {
+//				addErrmsg(ErrorInfoConstant.PERSON_PACKAGE_EMPTY_INFO.getInfo());
+//			}
 		}
 		String packagingData = StringUtilB2C.replaceLineBreak(StringUtilB2C.getStr(value));
 		if (isAPerson) {
@@ -1838,4 +1845,139 @@ public class ReleaseProductByBatch implements Serializable {
 		this.productid = productid;
 		return this;
 	}
+
+	public String getProductNum() {
+		return productNum;
+	}
+
+	public ReleaseProductByBatch setProductNum(String productNum) {
+		this.productNum = productNum;
+		return this;
+	}
+
+	@Override
+	public String toString() {
+		return "ReleaseProductByBatch{" +
+				"id=" + id +
+				", relbatchid='" + relbatchid + '\'' +
+				", batchCode='" + batchCode + '\'' +
+				", status=" + status +
+				", statusStr='" + statusStr + '\'' +
+				", saleMethod='" + saleMethod + '\'' +
+				", brandNameCn='" + brandNameCn + '\'' +
+				", brandNameEn='" + brandNameEn + '\'' +
+				", b2cBrandcn='" + b2cBrandcn + '\'' +
+				", b2cBranden='" + b2cBranden + '\'' +
+				", brandId=" + brandId +
+				", branduuid='" + branduuid + '\'' +
+				", code='" + code + '\'' +
+				", b2cCode='" + b2cCode + '\'' +
+				", componentUuId='" + componentUuId + '\'' +
+				", unit='" + unit + '\'' +
+				", original=" + original +
+				", reserve=" + reserve +
+				", reserveStr='" + reserveStr + '\'' +
+				", minBuyQty=" + minBuyQty +
+				", minBuyQtyStr='" + minBuyQtyStr + '\'' +
+				", qtyPrice='" + qtyPrice + '\'' +
+				", prices=" + prices +
+				", productDate='" + productDate + '\'' +
+				", createDate=" + createDate +
+				", minPackage=" + minPackage +
+				", minPackageStr='" + minPackageStr + '\'' +
+				", breakUp=" + breakUp +
+				", breakUpStr='" + breakUpStr + '\'' +
+				", packaging='" + packaging + '\'' +
+				", encapsulation='" + encapsulation + '\'' +
+				", tagstr='" + tagstr + '\'' +
+				", tag='" + tag + '\'' +
+				", selfMaxDelivery=" + selfMaxDelivery +
+				", selfMinDelivery=" + selfMinDelivery +
+				", selfMaxDeliveryStr='" + selfMaxDeliveryStr + '\'' +
+				", selfMinDeliveryStr='" + selfMinDeliveryStr + '\'' +
+				", size='" + size + '\'' +
+				", color='" + color + '\'' +
+				", thickCopper='" + thickCopper + '\'' +
+				", thick='" + thick + '\'' +
+				", remark='" + remark + '\'' +
+				", publisherName='" + publisherName + '\'' +
+				", publisherUu=" + publisherUu +
+				", publisherTel='" + publisherTel + '\'' +
+				", currency='" + currency + '\'' +
+				", sampleqty=" + sampleqty +
+				", rmbTaxRate=" + rmbTaxRate +
+				", usdTaxRate=" + usdTaxRate +
+				", returnInWeek=" + returnInWeek +
+				", releaseCode=" + releaseCode +
+				", releaseStatus='" + releaseStatus + '\'' +
+				", shipArea='" + shipArea + '\'' +
+				", rmbMinPackPrice=" + rmbMinPackPrice +
+				", usdMinPackPrice=" + usdMinPackPrice +
+				", minPackPriceStr='" + minPackPriceStr + '\'' +
+				", img='" + img + '\'' +
+				", kindName='" + kindName + '\'' +
+				", kindUuid=" + kindUuid +
+				", qty1Str='" + qty1Str + '\'' +
+				", qty2Str='" + qty2Str + '\'' +
+				", qty3Str='" + qty3Str + '\'' +
+				", price1='" + price1 + '\'' +
+				", price2='" + price2 + '\'' +
+				", price3='" + price3 + '\'' +
+				", errmsg='" + errmsg + '\'' +
+				", minPriceRMB=" + minPriceRMB +
+				", maxPriceRMB=" + maxPriceRMB +
+				", minPriceUSD=" + minPriceUSD +
+				", maxPriceUSD=" + maxPriceUSD +
+				", storeid='" + storeid + '\'' +
+				", storeName='" + storeName + '\'' +
+				", spec='" + spec + '\'' +
+				", productid=" + productid +
+				", attach='" + attach + '\'' +
+				", goodsCount=" + goodsCount +
+				'}';
+	}
+
+	/**
+	 *
+	 * @param batch 上架批次
+	 * @return 相同则true,否则false
+	 */
+	public Boolean compareSameProductTagInfo(ReleaseProductByBatch batch) {
+		if (batch != null) {
+			return StringUtilB2C.equals(batch.getB2cBranden(), this.b2cBranden) && StringUtilB2C.equals(batch.getB2cCode(), this.b2cCode) && StringUtilB2C.equals(batch.getTag(), this.tag);
+		} else {
+			return Boolean.FALSE;
+		}
+	}
+
+	/**
+	 * 六要素比较
+	 */
+
+	public Boolean compareSameProductSixEle(ReleaseProductByBatch batch) {
+		if (batch != null) {
+			Boolean result = false;
+			if (StringUtils.isEmpty(batch.getMinBuyQtyStr()) || StringUtils.isEmpty(this.getMinBuyQtyStr()) || (!StringUtilB2C.equals(batch.getMinBuyQtyStr(), this.getMinBuyQtyStr()))) {
+				return false;
+			}
+			if (StringUtils.isEmpty(batch.getProductDate()) || StringUtils.isEmpty(this.getProductDate()) || (!StringUtilB2C.equals(batch.getProductDate(), this.getProductDate()))) {
+				return false;
+			}
+			if (StringUtils.isEmpty(batch.getPackaging()) || StringUtils.isEmpty(this.getPackaging()) || (!StringUtilB2C.equals(batch.getPackaging(), this.getPackaging()))) {
+				return false;
+			}
+			if (StringUtils.isEmpty(batch.getMinPackageStr()) || StringUtils.isEmpty(this.getMinPackageStr()) || (!StringUtilB2C.equals(batch.getMinPackageStr(), this.getMinPackageStr()))) {
+				return false;
+			}
+			if (StringUtils.isEmpty(batch.getSelfMaxDeliveryStr()) || StringUtils.isEmpty(this.getSelfMaxDeliveryStr()) || (!StringUtilB2C.equals(batch.getSelfMaxDeliveryStr(), this.getSelfMaxDeliveryStr()))) {
+				return false;
+			}
+			if (StringUtils.isEmpty(batch.getSelfMinDeliveryStr()) || StringUtils.isEmpty(this.getSelfMinDeliveryStr()) || (!StringUtilB2C.equals(batch.getSelfMinDeliveryStr(), this.getSelfMinDeliveryStr()))) {
+				return false;
+			}
+			return true;
+		} else {
+			return Boolean.FALSE;
+		}
+	}
 }

+ 10 - 2
src/main/java/com/uas/platform/b2c/prod/commodity/service/GoodsService.java

@@ -744,10 +744,10 @@ public interface GoodsService {
     /**
      * 更新货物的有效期
      *
-     * @param privateList the operate type 操作的记录
+     * @param products the operate type 操作的记录
      * @param goodses       the param
      */
-    void updateSpecByProducts(List<V_ProductPrivate> privateList, List<Goods> goodses);
+    void updateSpecByProducts(List<Product> products, List<Goods> goodses);
 
     /**
      * 获取pcb推荐物料
@@ -769,4 +769,12 @@ public interface GoodsService {
      * @return Component 根据标准器件更新物料
      */
     void updateGoodsByComponent(Component component);
+
+
+    /**
+     *  根据物料主键统计该物料包含多少个批次
+     * @param prIds 物料的主键信息
+     * @return ap<Long, Integer>
+     */
+    Map<Long, Integer> batchGetCountByProductId(List<Long>  prIds);
 }

+ 43 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductPrivateService.java

@@ -0,0 +1,43 @@
+package com.uas.platform.b2c.prod.commodity.service;
+
+import com.uas.platform.b2c.prod.commodity.model.ProductPrivate;
+
+import java.util.List;
+
+/**
+ * 物料商城私有字段的服务诚
+ *
+ * @author yuj 2018-07-25 10:24
+ */
+public interface ProductPrivateService {
+
+    /**
+     * 单个获取私有物料字段
+     * @param prId 物料主键
+     * @return ProductPrivate
+     */
+    ProductPrivate findByPrId(Long prId);
+
+
+    /**
+     * 批量获取私有的物料字段
+     * @param prIds 需要获取的主键信息
+     * @return List<ProductPrivate>
+     */
+    List<ProductPrivate> findByPrIds(List<Long> prIds);
+
+
+    /**
+     * 批量保存
+     * @param productPrivates 需要保存的信息
+     * @return  List<ProductPrivate>
+     */
+    List<ProductPrivate> saveProductPrivate(List<ProductPrivate> productPrivates);
+
+    /**
+     * 根据给定的物料主键,创建私有信息
+     * @param prIds 物料主键
+     * @return
+     */
+    List<ProductPrivate> newProductPrivateIfNotExist(List<Long> prIds);
+}

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

@@ -6,6 +6,7 @@ import com.uas.platform.b2c.prod.product.component.modal.Component;
 import com.uas.platform.b2c.trade.order.model.Purchase;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
 import org.springframework.data.domain.Page;
 
 import java.util.List;
@@ -231,6 +232,13 @@ public interface ProductService {
      */
     ProductDetail findByProductId(Long id);
 
+    /**
+     * 批量获物料信息
+     * @param ids
+     * @return
+     */
+    List<Product> findByProductId(List<Long> ids);
+
     /**
      * 验证物料申请是否为标准物料
      * @return
@@ -306,4 +314,12 @@ public interface ProductService {
      * @return ResultMap
      */
     ResultMap updateProductByComponent(Component component);
+
+    /**
+     * 分页获取器件信息
+     * @param params 分页信息
+     * @param keyword 搜索关键字
+     * @return
+     */
+    Page<V_ProductPrivate> getPageProducts(PageParams params, String keyword);
 }

+ 0 - 10
src/main/java/com/uas/platform/b2c/prod/commodity/service/ReleaseProductByBatchService.java

@@ -1,6 +1,5 @@
 package com.uas.platform.b2c.prod.commodity.service;
 
-import com.uas.platform.b2c.prod.commodity.model.ProductPrivate;
 import com.uas.platform.b2c.prod.commodity.model.ReleaseProductByBatch;
 import com.uas.platform.core.model.PageInfo;
 import org.apache.poi.ss.usermodel.Workbook;
@@ -104,13 +103,4 @@ public interface ReleaseProductByBatchService {
      * @return list
      */
     public List<ReleaseProductByBatch> findFailureReleaseProductByBatch(String batch);
-
-
-    /**
-     * 查找私有字段根据pr_id
-     * @param prId
-     * @return
-     */
-    public ProductPrivate findByPrId(Long prId);
-
 }

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

@@ -89,6 +89,7 @@ import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.RowCallbackHandler;
 import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -103,6 +104,8 @@ import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigInteger;
+import java.sql.ResultSet;
+import java.sql.SQLException;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -149,7 +152,7 @@ public class GoodsServiceImpl implements GoodsService {
     private CreateNumberService createNumberService;
 
     @Autowired
-    private ReleaseProductByBatchService releaseProductByBatchService;
+    private ProductPrivateService productPrivateService;
 
     @Autowired
     private ComponentDao componentDao;
@@ -1725,7 +1728,7 @@ public class GoodsServiceImpl implements GoodsService {
         GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, OperateType.ADD_GOODS.getPhrase(), false);
         Goods persistGoods = goodsDao.save(goods);
         if(product != null) {
-            ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+            ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
             if (productPrivate == null) {
                 productPrivate = new ProductPrivate();
                 productPrivate.setPrId(product.getId());
@@ -3257,7 +3260,7 @@ public class GoodsServiceImpl implements GoodsService {
             if (goods.getProductid() != null) {
                 Product product = productDao.findOne(goods.getProductid());
                 if (product != null) {
-                    ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+                    ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
                     if (productPrivate == null) {
                         productPrivate = new ProductPrivate();
                         productPrivate.setPrId(product.getId());
@@ -3554,7 +3557,7 @@ public class GoodsServiceImpl implements GoodsService {
         if (goods.getProductid() != null) {
             Product product = productDao.findOne(goods.getProductid());
             if (product != null) {
-                ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+                ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
                 if (productPrivate == null) {
                     productPrivate = new ProductPrivate();
                     productPrivate.setPrId(product.getId());
@@ -3645,7 +3648,7 @@ public class GoodsServiceImpl implements GoodsService {
             if (goods.getProductid() != null) {
                 Product product = productDao.findOne(goods.getProductid());
                 if (product != null) {
-                    ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+                    ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
                     if (productPrivate == null) {
                         productPrivate = new ProductPrivate();
                         productPrivate.setPrId(product.getId());
@@ -3757,7 +3760,7 @@ public class GoodsServiceImpl implements GoodsService {
                 }
                 goodsDao.save(tagEmptyGoods);
                 goodsDao.save(goods);
-                ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+                ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
                 if (productPrivate == null) {
                     productPrivate = new ProductPrivate();
                     productPrivate.setPrId(product.getId());
@@ -4136,18 +4139,18 @@ public class GoodsServiceImpl implements GoodsService {
     /**
      * 更新货物的有效期
      *
-     * @param privateList the operate type 操作的记录
+     * @param products the operate type 操作的记录
      * @param goodses     the param
      */
     @Override
-    public void updateSpecByProducts(List<V_ProductPrivate> privateList, List<Goods> goodses) {
+    public void updateSpecByProducts(List<Product> products, List<Goods> goodses) {
         List<Goods> goods = new ArrayList<>();
         List<GoodsHistory> goodsHistories = new ArrayList<>();
-        if (CollectionUtils.isNotEmpty(privateList) && CollectionUtils.isNotEmpty(goodses)) {
-            for (V_ProductPrivate v_productPrivate : privateList) {
+        if (CollectionUtils.isNotEmpty(products) && CollectionUtils.isNotEmpty(goodses)) {
+            for (Product product : products) {
                 for (Goods goodse : goodses) {
-                    if (goodse.getProductid() != null && (goodse.getProductid().longValue() ==  v_productPrivate.getId().longValue()) && (!StringUtils.isEmpty(v_productPrivate.getSpec())) && (!v_productPrivate.getSpec().equals(goodse.getSpec()))) {
-                        goodse.setSpec(v_productPrivate.getSpec());
+                    if (goodse.getProductid() != null && (goodse.getProductid().longValue() ==  product.getId().longValue()) && (!StringUtils.isEmpty(product.getSpec())) && (!product.getSpec().equals(goodse.getSpec()))) {
+                        goodse.setSpec(product.getSpec());
                         goods.add(goodse);
                         GoodsHistory history = goodsHistoryService.converTGoodsHist(goodse, OperateType.Update.getPhrase(), false);
                         goodsHistories.add(history);
@@ -4276,4 +4279,30 @@ public class GoodsServiceImpl implements GoodsService {
             }
         }
     }
+
+
+    /**
+     *  根据物料主键统计该物料包含多少个批次
+     * @param prIds 物料的主键信息
+     * @return ap<Long, Integer>
+     */
+    public Map<Long, Integer> batchGetCountByProductId(List<Long>  prIds) {
+        if (CollectionUtils.isEmpty(prIds)) {
+            return new HashedMap();
+        } else {
+            String sql = "select go_productid, count(go_id) num from trade$goods where go_productid in (:prids) group by go_productid";
+            Map<String,Object> parameters = new HashMap<String,Object>();
+            parameters.put("prids", prIds);
+            final Map<Long, Integer> resultMap = new HashedMap();
+            namedParameterJdbcTemplate.query(sql, parameters, new RowCallbackHandler() {
+                @Override
+                public void processRow(ResultSet rs) throws SQLException {
+                    long productid = rs.getLong("go_productid");
+                    int num = rs.getInt("num");
+                    resultMap.put(productid, num);
+                }
+            });
+            return resultMap;
+        }
+    }
 }

+ 122 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductPrivateServiceImpl.java

@@ -0,0 +1,122 @@
+package com.uas.platform.b2c.prod.commodity.service.impl;
+
+import com.uas.platform.b2c.core.constant.IntegerConstant;
+import com.uas.platform.b2c.prod.commodity.dao.ProductPrivateDao;
+import com.uas.platform.b2c.prod.commodity.model.ProductPrivate;
+import com.uas.platform.b2c.prod.commodity.service.GoodsService;
+import com.uas.platform.b2c.prod.commodity.service.ProductPrivateService;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 商城私有字段的服务层
+ *
+ * @author yuj 2018-07-25 10:24
+ */
+@Service
+public class ProductPrivateServiceImpl implements ProductPrivateService {
+
+    private final ProductPrivateDao productPrivateDao;
+
+    private final GoodsService goodsService;
+
+    @Autowired
+    public ProductPrivateServiceImpl(ProductPrivateDao productPrivateDao, GoodsService goodsService) {
+        this.productPrivateDao = productPrivateDao;
+        this.goodsService = goodsService;
+    }
+
+
+    @Override
+    public ProductPrivate findByPrId(Long prId) {
+        List<ProductPrivate> productPrivates = productPrivateDao.findByPrId(prId);
+        if (!CollectionUtils.isEmpty(productPrivates)) {
+            ProductPrivate productPrivate = productPrivates.get(0);
+            return productPrivate;
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * 批量获取私有的物料字段
+     *
+     * @param prIds 需要获取的主键信息
+     * @return List<ProductPrivate>
+     */
+    @Override
+    public List<ProductPrivate> findByPrIds(List<Long> prIds) {
+        if (CollectionUtils.isEmpty(prIds)) {
+            return Collections.emptyList();
+        } else {
+            List<ProductPrivate> privates = productPrivateDao.findByPrIds(prIds);
+            return privates;
+        }
+    }
+
+    /**
+     * 批量保存
+     *
+     * @param productPrivates 需要保存的信息
+     * @return List<ProductPrivate>
+     */
+    @Override
+    public List<ProductPrivate> saveProductPrivate(List<ProductPrivate> productPrivates) {
+        if (CollectionUtils.isNotEmpty(productPrivates)) {
+            productPrivateDao.save(productPrivates);
+        }
+        return Collections.emptyList();
+    }
+
+    /**
+     * 根据给定的物料主键,创建私有信息
+     *
+     * @param prIds 物料主键
+     * @return
+     */
+    @Override
+    public List<ProductPrivate> newProductPrivateIfNotExist(List<Long> prIds) {
+        List<ProductPrivate> productPrivates = new ArrayList<ProductPrivate>();
+        List<ProductPrivate> privateList = findByPrIds(prIds);
+        Boolean isExist = false;
+        ProductPrivate productPrivate = null;
+        int batchCount = 0;
+        Map<Long, Integer> goodsCountByProductId = goodsService.batchGetCountByProductId(prIds);
+        for (Long productId : prIds) {
+            isExist = false;
+            batchCount = 0;
+            if ((goodsCountByProductId != null) && (goodsCountByProductId.size() != 0)) {
+                batchCount = goodsCountByProductId.get(productId);
+            }
+            for (ProductPrivate productPri : privateList) {
+                if (productPri.getPrId().longValue() == productId.longValue()) {
+                    isExist = true;
+                    if ((productPri.getB2cEnabled() == null) || (productPri.getB2cEnabled().intValue() != IntegerConstant.YES_SHORT.intValue()) || (productPri.getBatchCount() == null) || (productPri.getBatchCount().intValue() != batchCount)) {
+                        productPri.setB2cEnabled(IntegerConstant.YES_SHORT);
+                        productPri.setBatchCount(batchCount);
+                        productPrivates.add(productPri);
+                    }
+                }
+            }
+            if (!isExist) {
+                productPrivate = new ProductPrivate();
+                productPrivate.setPrId(productId);
+                productPrivate.setBatchCount(batchCount);
+                productPrivate.setB2cEnabled(IntegerConstant.YES_SHORT);
+                productPrivates.add(productPrivate);
+            }
+        }
+        if (CollectionUtils.isNotEmpty(productPrivates)) {
+            List<ProductPrivate> productPrivates1 = saveProductPrivate(productPrivates);
+            return productPrivates1;
+        } else {
+            return Collections.emptyList();
+        }
+    }
+}

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

@@ -55,6 +55,7 @@ import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.model.Type;
 import com.uas.platform.core.persistence.criteria.LogicalExpression;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
@@ -133,9 +134,6 @@ public class ProductServiceImpl implements ProductService {
     @Autowired
     private ProductModifyHistoryDao productModifyHistoryDao;
 
-    @Autowired
-    private ReleaseProductByBatchService releaseProductByBatchService;
-
     @Autowired
     private GoodsHistoryService goodsHistoryService;
 
@@ -223,6 +221,9 @@ public class ProductServiceImpl implements ProductService {
     @Value("#{sys.productServiceIp}")
     private String productServiceIp;
 
+    @Autowired
+    private ProductPrivateService productPrivateService;
+
     private ConcurrentHashMap<String, Field> sortFields = new ConcurrentHashMap<String, Field>();
 
     @Override
@@ -294,7 +295,7 @@ public class ProductServiceImpl implements ProductService {
                 }
             }
             // 拿私有物料信息
-            ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+            ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
             if (null != productPrivate) {
                 product.setB2cEnabled(productPrivate.getB2cEnabled());
                 product.setBatchCount(productPrivate.getBatchCount());
@@ -569,7 +570,7 @@ public class ProductServiceImpl implements ProductService {
                 if (CollectionUtils.isNotEmpty(goodses)) {
                     goodsService.deleteGoods(goodses);
                 }
-                ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+                ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
                 if (productPrivate == null) {
                     productPrivate = new ProductPrivate();
                     productPrivate.setPrId(product.getId());
@@ -647,7 +648,7 @@ public class ProductServiceImpl implements ProductService {
                     productMatchResultDao.delete(productMatchResultSet);
                     goodsService.deleteGoods(goodses);
                     //productDao.delete(product.getId());
-                    ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+                    ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
                     if (null == productPrivate) {
                         productPrivate = new ProductPrivate();
                         productPrivate.setPrId(product.getId());
@@ -1131,7 +1132,7 @@ public class ProductServiceImpl implements ProductService {
         if (standardProduct == null) {
             standardProduct = afterProduct;
         } else {
-            ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+            ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
             if (productPrivate == null) {
                 productPrivate = new ProductPrivate();
                 productPrivate.setPrId(product.getId());
@@ -1160,7 +1161,7 @@ public class ProductServiceImpl implements ProductService {
         }
         goodsHistoryDao.save(goodsHistoryList);
         Product beforeProduct = productDao.findOne(beforeId);
-        ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(beforeProduct.getId());
+        ProductPrivate productPrivate = productPrivateService.findByPrId(beforeProduct.getId());
         if (productPrivate == null) {
             productPrivate = new ProductPrivate();
             productPrivate.setPrId(beforeProduct.getId());
@@ -1235,7 +1236,7 @@ public class ProductServiceImpl implements ProductService {
             }
         }
         goodsDao.save(saveList);
-        ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+        ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
         if (productPrivate == null) {
             productPrivate = new ProductPrivate();
             productPrivate.setPrId(product.getId());
@@ -1386,7 +1387,7 @@ public class ProductServiceImpl implements ProductService {
                         product.setKinden(matchResult.getKinden());
                         product.setKindid(matchResult.getKindid());
                         List<Product> products = productDao.findProductByPcmpcodeAndPbrandenAndEnUUAndStandard(product.getPcmpcode(), product.getPbranden(), product.getEnUU(), IntegerConstant.YES_SHORT);
-                        ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+                        ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
                         if (productPrivate == null) {
                             productPrivate = new ProductPrivate();
                             productPrivate.setPrId(product.getId());
@@ -1499,6 +1500,21 @@ public class ProductServiceImpl implements ProductService {
         return productDetail;
     }
 
+    /**
+     * 批量获物料信息
+     *
+     * @param ids
+     * @return
+     */
+    @Override
+    public List<Product> findByProductId(List<Long> ids) {
+        if (CollectionUtils.isNotEmpty(ids)) {
+            return productDao.findAll(ids);
+        } else {
+            return Collections.emptyList();
+        }
+    }
+
     @Override
     public ResultMap validitonStandard(JSONObject jsonObject) {
         Component component = (Component)jsonObject.get("component");
@@ -2177,5 +2193,24 @@ public class ProductServiceImpl implements ProductService {
             }
         }
     }
+
+    /**
+     * 分页获取器件信息
+     *
+     * @param params  分页信息
+     * @param keyword 搜索关键字
+     * @return
+     */
+    @Override
+    public Page<V_ProductPrivate> getPageProducts(PageParams params, String keyword) {
+        SPage<Long> ids = searchService.getProducts(null, keyword, params.getPage(), params.getCount(), null);
+        PageInfo info = new PageInfo(params);
+        if (null == ids) {
+            return new PageImpl<V_ProductPrivate>(Collections.emptyList(), info, 0);
+        }
+        List<Long> idList = ids.getContent();
+        List<V_ProductPrivate> productList = v_productPrivateDao.findAll(idList);
+        return new PageImpl<V_ProductPrivate>(productList, info, ids.getTotalElement());
+    }
 }
 

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

@@ -1,12 +1,11 @@
 package com.uas.platform.b2c.prod.commodity.service.impl;
 
-import com.alibaba.fastjson.JSON;
 import com.uas.platform.b2c.common.account.model.Enterprise;
-import com.uas.platform.b2c.common.account.service.EnterpriseService;
 import com.uas.platform.b2c.common.base.dao.CommonDao;
 import com.uas.platform.b2c.core.config.SysConf;
 import com.uas.platform.b2c.core.constant.IntegerConstant;
 import com.uas.platform.b2c.core.constant.ReleaseStatus;
+import com.uas.platform.b2c.core.constant.SplitChar;
 import com.uas.platform.b2c.core.constant.Status;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.NumberUtil;
@@ -16,12 +15,15 @@ import com.uas.platform.b2c.prod.commodity.constant.*;
 import com.uas.platform.b2c.prod.commodity.dao.*;
 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.ProductPrivateService;
+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.util.GoodsUtil;
 import com.uas.platform.b2c.prod.commodity.util.SheetUtil;
 import com.uas.platform.b2c.prod.product.brand.dao.BrandInfoDao;
 import com.uas.platform.b2c.prod.product.brand.modal.BrandInfo;
 import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
+import com.uas.platform.b2c.prod.product.common.service.impl.CreateNumberServiceImpl;
 import com.uas.platform.b2c.prod.product.kind.dao.KindInfoDao;
 import com.uas.platform.b2c.prod.product.kind.model.KindInfo;
 import com.uas.platform.b2c.prod.product.property.dao.PropertyDao;
@@ -30,6 +32,7 @@ import com.uas.platform.b2c.prod.store.model.StoreStatus;
 import com.uas.platform.b2c.prod.store.service.StoreInService;
 import com.uas.platform.b2c.trade.order.StringConstant.Currency;
 import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.b2c.trade.util.BoundedExecutor;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.persistence.criteria.CriterionExpression;
@@ -37,6 +40,7 @@ import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.persistence.criteria.SimpleExpression;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.map.HashedMap;
+import org.apache.log4j.Logger;
 import org.apache.poi.hssf.usermodel.HSSFCell;
 import org.apache.poi.hssf.usermodel.HSSFDateUtil;
 import org.apache.poi.ss.usermodel.*;
@@ -47,6 +51,7 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.StatementCallback;
+import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.StringUtils;
@@ -63,6 +68,8 @@ import java.sql.Statement;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -92,9 +99,6 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 	@Autowired
 	private SysConf SysConf;
 
-	@Autowired
-	private EnterpriseService enterpriseService;
-
 	@Autowired
 	private JdbcTemplate jdbcTemplate;
 
@@ -125,9 +129,21 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 	@Autowired
 	private V_ProductPrivateDao v_productPrivateDao;
 
+	@Autowired
+	private  ProductService productService;
+
+	/**
+	 * 控制任务提交速度的线程池
+	 */
+	private final BoundedExecutor executor;
+
+	private final NamedParameterJdbcTemplate namedJdbcTemplate;
+
 	@Autowired
 	private BrandInfoDao brandInfoDao;
 
+	private final ProductPrivateService productPrivateService;
+
 	private static final String SIZE = "尺寸";
 	private static final String COLOR = "颜色";
 	private static final String THICKCOPPER = "铜厚";
@@ -136,6 +152,16 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 	@Value("#{sys.productServiceIp}")
 	private String productServiceIp;
 
+    @Autowired
+	public ReleaseProductByBatchServiceImpl(NamedParameterJdbcTemplate namedJdbcTemplate, ProductPrivateService productPrivateService) {
+		this.namedJdbcTemplate = namedJdbcTemplate;
+		this.productPrivateService = productPrivateService;
+		ExecutorService executorService = Executors.newCachedThreadPool();
+		executor = new BoundedExecutor(executorService, 1600);
+	}
+
+    private final Logger logger = Logger.getLogger(getClass());
+
 	@Override
 	public ReleaseProductByBatch save(ReleaseProductByBatch releaseProductByBatch) {
 		return releaseProductByBatch;
@@ -182,6 +208,7 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 		Row headerRow = sheet.getRow(0);
 		int total = 0;
 		int blankNum = 0;
+		long l = System.currentTimeMillis();
 		if (headerRow != null) {
 			// 验证模板是否为商城模板
 			validateTemplate(headerRow, colNum, currency, isAPerson, isPcb);
@@ -221,15 +248,43 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 				}
 			}
 		}
-
-		Long userUU = SystemSession.getUser().getUserUU();
+		System.out.println("获取订单信息缺失");
+		long l1 = System.currentTimeMillis();
+		System.err.println("l1--------------l testyuj" + (l1 - l));
 		Long enUU = SystemSession.getUser().getEnterprise().getUu();
-		List<ReleaseProductByBatch> addList = new ArrayList<>(releaseProductByBatchs.size());
-		addList.addAll(releaseProductByBatchs);
-        commonDao.save(addList, ReleaseProductByBatch.class);
+		if (!isAPerson) {
+			//1:比较品牌、型号、自定义标签是否重复,2:比较六要素是否重复
+			for(int i = releaseProductByBatchs.size() - 1; i > -1; i--) {
+				ReleaseProductByBatch releaseProductByBatch = releaseProductByBatchs.get(i);
+				for(int j = i - 1; j > -1; j--) {
+					ReleaseProductByBatch byBatch = releaseProductByBatchs.get(j);
+					if(releaseProductByBatch.compareSameProductTagInfo(byBatch)) {
+						releaseProductByBatch.setTag("");
+						releaseProductByBatch.setTagstr("");
+						if (releaseProductByBatch.compareSameProductSixEle(byBatch)) {
+							releaseProductByBatch.addErrmsg(ErrorInfoConstant.REPEAT_IN_EXCEL.getInfo());
+							releaseProductByBatch.setReleaseStatus(ReleaseStatus.had_exists.getPhrase());
+							releaseProductByBatch.setReleaseCode(ReleaseStatus.had_exists.value());
+                            if (!StringUtilB2C.isEmpty(releaseProductByBatch.getErrmsg())) {
+                                if (releaseProductByBatch.getErrmsg().substring(0, 1).equals(",")) {
+                                    releaseProductByBatch.setErrmsg(releaseProductByBatch.getErrmsg().substring(1));
+                                }
+                            }
+						}
+					}
+				}
+			}
+		}
+        long l2 = System.currentTimeMillis();
+        System.err.println("l2--------------l1 testyuj" + (l2 - l1));
+		commonDao.save(releaseProductByBatchs, ReleaseProductByBatch.class);
+		long l3 = System.currentTimeMillis();
+        System.err.println("l3--------------l2 testyuj" + (l3 - l2));
         releaseProductByBatchDao.callReleaseExistValidProcedure(batch, isAPerson, enUU);
+		long l4 = System.currentTimeMillis();
+		System.err.println("l4--------------l3 testyuj" + (l4 - l3));
 		if (isAPerson) {
-			for (ReleaseProductByBatch releaseProductByBatch : addList) {
+			for (ReleaseProductByBatch releaseProductByBatch : releaseProductByBatchs) {
                 Long productid = releaseProductByBatch.getProductid();
                 if (productid != null) {
                     List<ProductPerson> productPersonList = productPersonDao.findByProductId(productid);
@@ -242,16 +297,47 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
                 }
 			}
 		}
-
+		Long l5 = 0l;
+		String strCount = "";
 		if (isPcb) {
-			releaseProductByBatchDao.callValidProcedurePcb(enUU, batch);
+			strCount = releaseProductByBatchDao.callValidProcedurePcb(enUU, batch);
 		} else {
-			releaseProductByBatchDao.callValidProcedure(enUU, batch);
+			final Object[] obj = new Object[]{enUU, batch};
+			String sql = "/*#mycat:db_type=master*/ set @enuu = %s; set @batch = '%s'; call PRODUCT_RELEASE_VALID_V5(@enuu, @batch, @out); select @out";
+			final String updateSql = String.format(sql, obj);
+			strCount = jdbcTemplate.execute(new StatementCallback<String>() {
+
+				@Override
+				public String doInStatement(Statement stmt) throws SQLException, DataAccessException {
+					stmt.executeQuery(updateSql);
+					ResultSet rs = stmt.getResultSet();
+					if (null != rs) {
+						rs.next();
+                        System.err.println("测试结果---------" + rs.getString(1));
+						return rs.getString(1);
+					}
+					return "0";
+				}
+			});
+			l5 = System.currentTimeMillis();
+			System.err.println("l5--------------l4 testyuj" + (l5 - l4));
+		}
+		Integer filter = 0, failure = 0, success = 0;
+		if (!StringUtilB2C.isEmpty(strCount)) {
+			String[] split = strCount.split(SplitChar.HYPHEN);
+            if (split.length == 3) {
+                filter = Integer.valueOf(split[0]);
+                failure = Integer.valueOf(split[1]);
+                success = Integer.valueOf(split[2]);
+            } else {
+                //便于测试上执行
+                Long userUU = SystemSession.getUser().getUserUU();
+                filter = releaseProductByBatchDao.getCountOfImportFail(userUU, batch, failCode);
+                failure = releaseProductByBatchDao.getCountPublisherUuAndBatchAndReleaseCode(userUU, batch, ReleaseStatus.failure.value());
+                success = releaseProductByBatchDao.getCountPublisherUuAndBatchAndReleaseCode(userUU, batch, ReleaseStatus.success.value());
+            }
 		}
 
-		Integer filter = releaseProductByBatchDao.getCountOfImportFail(userUU, batch, failCode);
-		Integer failure = releaseProductByBatchDao.getCountPublisherUuAndBatchAndReleaseCode(userUU, batch, ReleaseStatus.failure.value());
-		Integer success = releaseProductByBatchDao.getCountPublisherUuAndBatchAndReleaseCode(userUU, batch, ReleaseStatus.success.value());
 		modelMap.put("total", total);
 		modelMap.put("success", success);
 		modelMap.put("failure", failure);
@@ -1617,137 +1703,98 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 
 	@Override
 	public String publishByBatch(String batch, boolean isPcb) {
+		long l = System.currentTimeMillis();
 		List<ReleaseProductByBatch> releaseProductByBatchList =
 				releaseProductByBatchDao.findByRelbatchid(batch);
-		List<Long> productIds = null;
-		List<ProductPrivate> productPrivateList = null;
-		if (!CollectionUtils.isEmpty(releaseProductByBatchList)) {
-			Map<String, Object> map = convertProduct(releaseProductByBatchList, false, isPcb);
-			List<com.uas.ps.entity.Product> products = (List<com.uas.ps.entity.Product>) map.get("products");
-			// TODO 什么接口
-			String result = restTemplate.postForEntity(productServiceIp + "/product/update", products, String.class).getBody();
-			productIds = JSON.parseArray(result, Long.class);
-			Set<Long> idSet = new HashSet<>(productIds);
-			List<ProductPrivate> productPrivates = new ArrayList<>();
-			for (Long prId : idSet) {
-				ProductPrivate productPrivate = findByPrId(prId);
-				if (null == productPrivate) {
-					productPrivate = new ProductPrivate();
-					productPrivate.setPrId(prId);
-				}
-				productPrivate.setB2cEnabled(IntegerConstant.YES_SHORT);
-				productPrivates.add(productPrivate);
-			}
-			productPrivateList = productPrivateDao.save(productPrivates);
-
-			//根据更新的规格信息,更新在售产品的信息
-			List<V_ProductPrivate> v_productPrivates = v_productPrivateDao.findProductInIdAndSpecIsNotNull(productIds);
-			List<Goods> goodses = goodsDao.findByProductIds(productIds);
-			goodsService.updateSpecByProducts(v_productPrivates, goodses);
-
-			if (isPcb) {
-				List<PCB> pcbList = new ArrayList<>();
-				List<PCBPropertyValue> propertyValueList = new ArrayList<>();
-
-				for (Long prId : idSet) {
-					Product product = productDao.findOne(prId);
-					if (product != null) {
-						List<PCB> pcbs = pcbDao.findByProductid(prId);
-						if (CollectionUtils.isEmpty(pcbs)) {
-							PCB pcb = new PCB();
-							pcb.setProductid(prId);
-							pcb.setBrandid(product.getPbrandid());
-							pcb.setKindid(product.getKindid());
-							pcb.setCreatetime(new Date());
-							pcbList.add(pcb);
-						}
-					}
-
-					List<PCBPropertyValue> propertyValues = (List<PCBPropertyValue>) map.get(product.getEnUU().toString().concat(product.getProdNum()));
-					if (CollectionUtils.isNotEmpty(propertyValues)) {
-						for (PCBPropertyValue propertyValue : propertyValues) {
-							propertyValue.setProductid(prId);
-							propertyValueList.add(propertyValue);
-						}
-					}
-				}
-
-				if (CollectionUtils.isNotEmpty(pcbList)) {
-					pcbDao.save(pcbList);
-				}
-				if (CollectionUtils.isNotEmpty(propertyValueList)) {
-					pcbPropertyvalueDao.save(propertyValueList);
-				}
-			}
+		long l1 = System.currentTimeMillis();
+		System.err.println("l1 -------------------l " + (l1 - l));
+		if (CollectionUtils.isEmpty(releaseProductByBatchList)) {
+			return String.valueOf(IntegerConstant.NO_SHORT);
 		}
+		Map<String, Object> map = convertProduct(releaseProductByBatchList, false, isPcb);
+		long l2 = System.currentTimeMillis();
+		System.err.println("l2 -------------------l1 " + (l2 - l1));
+		Set<Long> idSet = (Set<Long>) map.get("prIds");
+		if (isPcb) {
+			savePcbInfo(idSet, map);
+		}
+		long l8 = System.currentTimeMillis();
 		Enterprise enterprise = SystemSession.getUser().getEnterprise();
-		final Object[] obj = new Object[]{enterprise.getUu(), enterprise.getEnName(), batch};
-		String sql = "/*#mycat:db_type=master*/ set @enuu = %s; set @enName = '%s'; set @batch = '%s'; call RELEASE_TO_GOODS_V3(@enuu, @enName, @batch, @out); select @out";
-		final String updateSql = String.format(sql, obj);
-		String num = jdbcTemplate.execute(new StatementCallback<String>() {
+        final Object[] obj = new Object[]{enterprise.getUu(), enterprise.getEnName(), batch};
+        String sql = "/*#mycat:db_type=master*/ set @enuu = %s; set @enName = '%s'; set @batch = '%s'; call RELEASE_TO_GOODS_V4(@enuu, @enName, @batch, @out); select @out";
+        final String updateSql = String.format(sql, obj);
+        String num = jdbcTemplate.execute(new StatementCallback<String>() {
+
+            @Override
+            public String doInStatement(Statement stmt) throws SQLException, DataAccessException {
+                stmt.executeUpdate(updateSql);
+                ResultSet rs = stmt.getResultSet();
+                if (null != rs) {
+                    rs.next();
+                    return rs.getString(1);
+                }
+                return "0";
+            }
+        });
+		long l9 = System.currentTimeMillis();
+		System.err.println("l9 -------------------l8 " + (l9 - l8));
+		ArrayList<Long> list = new ArrayList<>();
+		list.addAll((Set<Long>)map.get("prIds"));
+		afterPublishToGoodsDo(list, (Set<Long>)map.get("reIds"));
+		return StringUtilB2C.getStr(num);
+	}
 
-			@Override
-			public String doInStatement(Statement stmt) throws SQLException, DataAccessException {
-				stmt.executeQuery(updateSql);
-				ResultSet rs = stmt.getResultSet();
-				if (null != rs) {
-					rs.next();
-					return rs.getString(1);
+	/**
+	 * 批量保存pcb的信息
+	 * @param idSet id
+	 */
+	public void savePcbInfo(Set<Long> idSet, Map<String, Object> map) {
+		if (idSet == null || idSet.size() < 1) {
+			return ;
+		}
+		List<PCB> pcbList = new ArrayList<>();
+		List<PCBPropertyValue> propertyValueList = new ArrayList<>();
+
+		for (Long prId : idSet) {
+			Product product = productDao.findOne(prId);
+			if (product != null) {
+				List<PCB> pcbs = pcbDao.findByProductid(prId);
+				if (CollectionUtils.isEmpty(pcbs)) {
+					PCB pcb = new PCB();
+					pcb.setProductid(prId);
+					pcb.setBrandid(product.getPbrandid());
+					pcb.setKindid(product.getKindid());
+					pcb.setCreatetime(new Date());
+					pcbList.add(pcb);
 				}
-				return "0";
 			}
-		});
 
-		if (null != productIds) {
-			for (ProductPrivate productPrivate : productPrivateList) {
-				// 统计现在有多少在售信息
-				int batchCount = goodsDao.findCountByProductid(productPrivate.getPrId());
-				productPrivate.setBatchCount(batchCount);
+			List<PCBPropertyValue> propertyValues = (List<PCBPropertyValue>) map.get(product.getEnUU().toString().concat(product.getProdNum()));
+			if (CollectionUtils.isNotEmpty(propertyValues)) {
+				for (PCBPropertyValue propertyValue : propertyValues) {
+					propertyValue.setProductid(prId);
+					propertyValueList.add(propertyValue);
+				}
 			}
-			productPrivateDao.save(productPrivateList);
 		}
 
-//		Enterprise enterprise = SystemSession.getUser().getEnterprise();
-//		final Object[] obj = new Object[]{enterprise.getUu(), enterprise.getEnName(), batch};
-//		String sql = "/*#mycat:db_type=master*/ set @enuu = %s; set @enName = '%s'; set @batch = '%s'; call RELEASE_TO_PRODUCT_V1(@enuu, @enName, @batch, @out); select @out";
-//		final String updateSql = String.format(sql, obj);
-//		String num = jdbcTemplate.execute(new StatementCallback<String>() {
-//
-//			@Override
-//			public String doInStatement(Statement stmt) throws SQLException, DataAccessException {
-//				stmt.executeQuery(updateSql);
-//				ResultSet rs = stmt.getResultSet();
-//				if (null != rs) {
-//					rs.next();
-//					return rs.getString(1);
-//				}
-//				return "0";
-//			}
-//		});
-//		if (!"0".equals(num)) {
-//			List<Goods> goodsList = goodsDao.findByBatchid(batch);
-//			Set<String> uuids = new HashSet<String>();
-//			for (Goods goods : goodsList) {
-//				if (goods.getUuid() != null) {
-//					uuids.add(goods.getUuid());
-////					goodsService.saveOrUpdatePriceInfos(goods, "NORMAL");
-//				}
-//			}
-//			// TODO 之后删除
-//			for (String uuid : uuids) {
-//				goodsService.updateComponentTradeInfos(uuid);
-//			}
-//		}
-		return StringUtilB2C.getStr(num);
+		if (CollectionUtils.isNotEmpty(pcbList)) {
+			pcbDao.save(pcbList);
+		}
+		if (CollectionUtils.isNotEmpty(propertyValueList)) {
+			pcbPropertyvalueDao.save(propertyValueList);
+		}
 	}
 
-
 	private  Map<String, Object> convertProduct (List<ReleaseProductByBatch> releaseProductByBatchList, boolean isAPerson , boolean isPcb) {
 		if (CollectionUtils.isEmpty(releaseProductByBatchList)) {
 			return null;
 		}
 		Map<String, Object> map = new HashedMap();
-		List<com.uas.ps.entity.Product> products = new ArrayList<>();
+		List<Product> products = new ArrayList<>();
+		List<ProductPrivate> productPrivates = new ArrayList<>();
+		Set<Long> prIds = new HashSet<>();
+		Set<Long> reIds = new HashSet<>();
 		Map<String, List<PCBPropertyValue>> propertyMap = new HashedMap();
 
 		Long sizeProId = null;
@@ -1760,33 +1807,30 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 			thickCopperProId = propertyDao.findIdByLabelCn(THICKCOPPER);
 			thickProId = propertyDao.findIdByLabelCn(THICK);
 		}
-
+		String importNum = createNumberService.getTimeNumber("trade$product_import_num", 8, releaseProductByBatchList.size());
+		if (StringUtils.isEmpty(importNum)) {
+			throw new IllegalOperatorException("生成批次号失败");
+		}
+		String time = importNum.substring(IntegerConstant.NO_SHORT, (IntegerConstant.TIME_LENGTH));
+		Integer num = Integer.valueOf(importNum.substring(IntegerConstant.TIME_LENGTH));
+		String prodNum = null;
 		for (ReleaseProductByBatch releaseProductByBatch : releaseProductByBatchList) {
 		    if (releaseProductByBatch.getReleaseCode().equals(ReleaseStatus.failure.value()) ||
                     releaseProductByBatch.getReleaseCode().equals(ReleaseStatus.success.value())) {
-                com.uas.ps.entity.Product product = new com.uas.ps.entity.Product();
-                // releaseProductByBatch.getCode(); 在公有库生成
-                product.setMinPack(releaseProductByBatch.getMinPackage());
-                product.setCmpImg(releaseProductByBatch.getImg());
-                product.setEnUU(SystemSession.getUser().getEnterprise().getUu());
-                product.setBrand(releaseProductByBatch.getBrandNameEn());
-                product.setCmpCode(releaseProductByBatch.getCode());
-                product.setCmpUuid(releaseProductByBatch.getComponentUuId());
-                product.setKind(releaseProductByBatch.getKindName());
-                product.setKindId(releaseProductByBatch.getKindUuid());
-                product.setpCmpCode(releaseProductByBatch.getB2cCode());
-                product.setpBrand(releaseProductByBatch.getB2cBrandcn());
-                product.setpBrandEn(releaseProductByBatch.getB2cBranden());
-                product.setpBrandId(releaseProductByBatch.getBrandId());
-                product.setpBrandUuid(releaseProductByBatch.getBranduuid());
-                product.setStandard(releaseProductByBatch.getComponentUuId() == null ? (short)0 : (short)1);
-                product.setCmpUuid(releaseProductByBatch.getComponentUuId());
-                product.setCreateTime(new Date(System.currentTimeMillis()));
-				product.setSpec(releaseProductByBatch.getSpec());
-                // 产品导入默认可销售
-                product.setIsSale((short) 1);
-                String batchCode = "PNUM" + createNumberService.getTimeNumber("trade$product_import_num", 8);
-                product.setCode(batchCode);
+				if (releaseProductByBatch.getProductid() == null) {
+					Product product = new Product();
+					product.setReleaseByBatch(releaseProductByBatch);
+					// releaseProductByBatch.getCode(); 在公有库生成
+					prodNum = "PNUM" + time + CreateNumberServiceImpl.formatIntToStr(num++, 8);
+					product.setProdNum(prodNum);
+					products.add(product);
+				} else {
+					//对于已经存在于物料库的信息,如果规格信息已存在,则做更新,如果是
+					prIds.add(releaseProductByBatch.getProductid());
+					if (!StringUtilB2C.isEmpty(releaseProductByBatch.getSpec())) {
+						reIds.add(releaseProductByBatch.getId());
+					}
+				}
 
 				if (isPcb) {
 					List<PCBPropertyValue> propertyValues = new ArrayList<>();
@@ -1807,14 +1851,31 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 						propertyValues.add(propertyValue);
 					}
 					if (CollectionUtils.isNotEmpty(propertyValues)) {
-						propertyMap.put(product.getEnUU().toString().concat(product.getCode()), propertyValues);
+						propertyMap.put(SystemSession.getUser().getEnterprise().getUu().toString().concat(prodNum), propertyValues);
 					}
 				}
-                products.add(product);
+
             }
 		}
+		if (products.size() != 0) {
+			List<Product> productes = productDao.save(products);
+			for (Product producte : productes) {
+				ProductPrivate productPrivate = new ProductPrivate();
+				productPrivate.setB2cEnabled(IntegerConstant.YES_SHORT);
+				productPrivate.setPrId(producte.getId());
+				productPrivate.setBatchCount(IntegerConstant.NO_SHORT);
+				productPrivates.add(productPrivate);
 
-		map.put("products", products);
+				prIds.add(producte.getId());
+			}
+		}
+		if (CollectionUtils.isNotEmpty(productPrivates)) {
+			productPrivateService.saveProductPrivate(productPrivates);
+		}
+		if (reIds.size() > 0) {
+			map.put("reIds", reIds);
+		}
+		map.put("prIds", prIds);
 		map.put("propertyvalues", propertyMap);
 		return map;
 	}
@@ -1825,30 +1886,15 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
                 releaseProductByBatchDao.findByRelbatchid(batch);
         if (!CollectionUtils.isEmpty(releaseProductByBatchList)) {
 			Map<String, Object> map = convertProduct(releaseProductByBatchList,false, false);
-			List<com.uas.ps.entity.Product> products = (List<com.uas.ps.entity.Product>) map.get("products");
-            // TODO 什么接口
-			String result = restTemplate.postForEntity(productServiceIp + "/product/update", products, String.class).getBody();
-            List<Long> productIds = JSON.parseArray(result, Long.class);
+			Set<Long> prIds = (Set<Long>) map.get("prIds");
+            List<Long> productIds = new ArrayList<>();
+			productIds.addAll(prIds);
             //添加个人关系
             String res  = restTemplate.postForEntity(productServiceIp + "/product/assign/batch?userUU=" + SystemSession.getUser().getUserUU(), productIds, String.class).getBody();
             // 默认为b2c Enable开启
-            List<ProductPrivate> productPrivates = new ArrayList<>();
-			Set<Long> idSet = new HashSet<>(productIds);
-            for (Long prId : idSet) {
-                ProductPrivate productPrivate = findByPrId(prId);
-                if (null == productPrivate) {
-                    productPrivate = new ProductPrivate();
-					productPrivate.setPrId(prId);
-                }
-                productPrivate.setB2cEnabled(IntegerConstant.YES_SHORT);
-                // 统计现在有多少在售信息
-                int batchCount = goodsDao.findCountByProductid(prId);
-                productPrivate.setBatchCount(batchCount);
-				productPrivates.add(productPrivate);
-            }
-            productPrivateDao.save(productPrivates);
+			productPrivateService.newProductPrivateIfNotExist(productIds);
         }
-
+		return "sucesss";
 //		User user = SystemSession.getUser();
 //		Enterprise enterprise = SystemSession.getUser().getEnterprise();
 //		final Object[] obj = new Object[]{enterprise.getUu(), user.getUserUU(), enterprise.getEnName(), batch};
@@ -1867,17 +1913,44 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 //				return "0";
 //			}
 //		});
-		return null;
 	}
 
-	@Override
-	public ProductPrivate findByPrId(Long prId) {
-		List<ProductPrivate> productPrivates = productPrivateDao.findByPrId(prId);
-		if (!CollectionUtils.isEmpty(productPrivates)) {
-			ProductPrivate productPrivate = productPrivates.get(0);
-			return productPrivate;
-		} else {
-			return null;
+	/**
+	 * 批量发布之后,需要做的事情,内部使用线程,不需要让用户等结果
+	 */
+	public void afterPublishToGoodsDo(final List<Long> productIds, final Set<Long> reIds) {
+		if (CollectionUtils.isEmpty(productIds)) {
+			return ;
+		}
+		final Runnable afterPublishToGoodsRunnable = new Runnable() {
+			@Override
+			public void run() {
+				//创建物料的私有信息
+				productPrivateService.newProductPrivateIfNotExist(productIds);
+
+				if ((reIds != null) && (reIds.size() != 0)) {
+					List<ReleaseProductByBatch> productByBatches = releaseProductByBatchDao.findAll(reIds);
+					List<Long> prIds = new ArrayList<>();
+					for (ReleaseProductByBatch productByBatch : productByBatches) {
+						prIds.add(productByBatch.getProductid());
+					}
+					List<Product> products = productService.findByProductId(prIds);
+					for (Product product : products) {
+						for (ReleaseProductByBatch productByBatch : productByBatches) {
+							if ((productByBatch.getProductid() != null ) && (product.getId().longValue() == productByBatch.getProductid().longValue())) {
+								product.setSpec(productByBatch.getSpec());
+							}
+						}
+					}
+					List<Goods> goodses = goodsDao.findByProductIds(prIds);
+					goodsService.updateSpecByProducts(products, goodses);
+				}
+			}
+		};
+		try {
+			executor.submitTask(afterPublishToGoodsRunnable);
+		} catch (InterruptedException e) {
+			e.printStackTrace();
 		}
 	}
 }

+ 2 - 1
src/main/java/com/uas/platform/b2c/prod/product/brand/modal/BrandMap.java

@@ -14,7 +14,8 @@ import java.util.List;
  * @author hulh
  */
 @Entity
-@Table(name = "product$brand_map")
+@Table(name = "product$brand_map", indexes = {@Index(name = "enuu_cn_index", columnList = "map_enuu, map_name_cd_cn"),
+@Index(name = "enuu_en_index", columnList = "map_enuu, map_name_cd_en")})
 public class BrandMap {
 
 	private final static List<String> typeCn = Arrays.asList("代理商", "经销商", "原厂商", "寄售商");

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/product/common/service/impl/CreateNumberServiceImpl.java

@@ -92,7 +92,7 @@ public class CreateNumberServiceImpl implements CreateNumberService {
 	 * @param digit
 	 *            返回的位数
 	 */
-	private static String formatIntToStr(int number, int digit) {
+	public static String formatIntToStr(int number, int digit) {
 		String format = "%0" + String.valueOf(digit) + "d";
 		return String.format(format, number);
 	}

+ 37 - 0
src/main/java/com/uas/platform/b2c/trade/order/controller/AdminToDoController.java

@@ -0,0 +1,37 @@
+package com.uas.platform.b2c.trade.order.controller;
+
+import com.uas.platform.b2c.trade.order.model.AdminToDo;
+import com.uas.platform.b2c.trade.order.service.AdminToDoService;
+import com.uas.platform.core.model.PageParams;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 待办事项控制器
+ *
+ * @author yuj 2018-07-24 16:00
+ */
+@RestController
+@RequestMapping(value = "/adminToDo")
+public class AdminToDoController {
+
+    private final AdminToDoService adminToDoService;
+
+    @Autowired
+    public AdminToDoController(AdminToDoService adminToDoService) {
+        this.adminToDoService = adminToDoService;
+    }
+
+    /**
+     * 分页获取待办事项
+     * @param params
+     * @return Page<AdminToDo>
+     */
+    @RequestMapping(value = "/page", method = RequestMethod.GET)
+    public Page<AdminToDo> getPageAdminToDo(PageParams params) {
+        return adminToDoService.getPageAdminToDo(params);
+    }
+}

+ 13 - 0
src/main/java/com/uas/platform/b2c/trade/order/dao/AdminToDoDao.java

@@ -0,0 +1,13 @@
+package com.uas.platform.b2c.trade.order.dao;
+
+import com.uas.platform.b2c.trade.order.model.AdminToDo;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Created by yujia on 2018/7/24.
+ */
+@Repository
+public interface AdminToDoDao extends JpaRepository<AdminToDo, Long>, JpaSpecificationExecutor<AdminToDo> {
+}

+ 8 - 0
src/main/java/com/uas/platform/b2c/trade/order/dao/MessageNotifyPersonalManagementDao.java

@@ -25,4 +25,12 @@ public interface MessageNotifyPersonalManagementDao extends JpaRepository<Messag
      */
     @Query(value = "select m from MessageNotifyPersonalManagement m where m.notifyPersonalEnuu = :enuu and m.type= :type")
     List<MessageNotifyPersonalManagement> findNotifyPersonalEnuuAndType(@Param("enuu") Long enuu, @Param("type") String type);
+
+    /**
+     * 根据企业的enuu和类型,获取信息
+     * @param enuu 企业enuu
+     * @return MessageNotifyPersonalManagement
+     */
+    @Query(value = "select m from MessageNotifyPersonalManagement m where m.notifyPersonalEnuu = :enuu")
+    List<MessageNotifyPersonalManagement> findNotifyPersonalEnuu(@Param("enuu") Long enuu);
 }

+ 146 - 0
src/main/java/com/uas/platform/b2c/trade/order/model/AdminToDo.java

@@ -0,0 +1,146 @@
+package com.uas.platform.b2c.trade.order.model;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * 为管理后台的人添加待办事项
+ *
+ * @author yuj 2018-07-24 15:45
+ */
+@Entity
+@Table(name = "v$admin$todo")
+public class AdminToDo implements Serializable {
+
+    private static final long serialVersionUID = -4071041669790873167L;
+
+    @Id
+    @Column(name = "id")
+    private String id;
+
+    @Column(name = "orderid")
+    private String orderid;
+
+    /**
+     * 申请时间
+     */
+    @Column(name = "applytime")
+    private String applytime;
+
+    /**
+     * 卖方的uu
+     */
+    @Column(name = "sellerenuu")
+    private Long sellerenuu;
+
+    /**
+     * 卖方的公司
+     */
+    @Column(name = "sellername")
+    private String sellername;
+
+    /**
+     * 申请人
+     */
+    @Column(name = "applyname")
+    private String applyname;
+
+    /**
+     * 申请人公司
+     */
+    @Column(name = "applyenname")
+    private String applyenname;
+
+    /**
+     * 信息类型
+     */
+    @Column(name = "type")
+    private String type;
+
+    /**
+     * 消息主题
+     */
+    @Transient
+    private String message;
+
+    public String getOrderid() {
+        return orderid;
+    }
+
+    public AdminToDo setOrderid(String orderid) {
+        this.orderid = orderid;
+        return this;
+    }
+
+    public String getApplytime() {
+        return applytime;
+    }
+
+    public AdminToDo setApplytime(String applytime) {
+        this.applytime = applytime;
+        return this;
+    }
+
+    public Long getSellerenuu() {
+        return sellerenuu;
+    }
+
+    public AdminToDo setSellerenuu(Long sellerenuu) {
+        this.sellerenuu = sellerenuu;
+        return this;
+    }
+
+    public String getSellername() {
+        return sellername;
+    }
+
+    public AdminToDo setSellername(String sellername) {
+        this.sellername = sellername;
+        return this;
+    }
+
+    public String getApplyname() {
+        return applyname;
+    }
+
+    public AdminToDo setApplyname(String applyname) {
+        this.applyname = applyname;
+        return this;
+    }
+
+    public String getApplyenname() {
+        return applyenname;
+    }
+
+    public AdminToDo setApplyenname(String applyenname) {
+        this.applyenname = applyenname;
+        return this;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public AdminToDo setType(String type) {
+        this.type = type;
+        return this;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public AdminToDo setId(String id) {
+        this.id = id;
+        return this;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public AdminToDo setMessage(String message) {
+        this.message = message;
+        return this;
+    }
+}

+ 18 - 0
src/main/java/com/uas/platform/b2c/trade/order/service/AdminToDoService.java

@@ -0,0 +1,18 @@
+package com.uas.platform.b2c.trade.order.service;
+
+import com.uas.platform.b2c.trade.order.model.AdminToDo;
+import com.uas.platform.core.model.PageParams;
+import org.springframework.data.domain.Page;
+
+/**
+ * Created by yujia on 2018/7/24.
+ */
+public interface AdminToDoService {
+
+    /**
+     * 分页获取待办事项
+     * @param params
+     * @return Page<AdminToDo>
+     */
+    Page<AdminToDo> getPageAdminToDo(PageParams params);
+}

+ 7 - 0
src/main/java/com/uas/platform/b2c/trade/order/service/MessageNotifyPersonalManagementService.java

@@ -18,6 +18,13 @@ public interface MessageNotifyPersonalManagementService {
      */
     List<MessageNotifyPersonalManagement> findNotifyPersonalEnuuAndType(Long enuu, String type);
 
+    /**
+     * 根据enuu获取对象
+     * @param enuu 企业enuu
+     * @return List<MessageNotifyPersonalManagement>
+     */
+    List<MessageNotifyPersonalManagement> findNotifyPersonalEnuu(Long enuu);
+
     /**
      * 删除信息
      * @param list

+ 97 - 0
src/main/java/com/uas/platform/b2c/trade/order/service/impl/AdminToDoServiceImpl.java

@@ -0,0 +1,97 @@
+package com.uas.platform.b2c.trade.order.service.impl;
+
+import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.core.utils.StringUtilB2C;
+import com.uas.platform.b2c.trade.order.dao.AdminToDoDao;
+import com.uas.platform.b2c.trade.order.model.AdminToDo;
+import com.uas.platform.b2c.trade.order.model.MessageNotifyPersonalManagement;
+import com.uas.platform.b2c.trade.order.service.AdminToDoService;
+import com.uas.platform.b2c.trade.order.service.MessageNotifyPersonalManagementService;
+import com.uas.platform.b2c.trade.order.type.MessageType;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 待办事项service
+ *
+ * @author yuj 2018-07-24 15:59
+ */
+@Service
+public class AdminToDoServiceImpl implements AdminToDoService {
+
+    private final AdminToDoDao adminToDoDao;
+
+    private final MessageNotifyPersonalManagementService messageNotifyPersonalManagementService;
+
+    private final String CONFIRM_PAID_MESSAGE = "订单%s 买家已经付款成功,请确认是否收款成功";
+
+    private final String APPLY_PAID_MESSAGE = "订单%s 买家已确认收货,请尽快申请付款";
+
+    private final String FINANCIAL_SETTLEMENT_MESSAGE = "订单%s 已交易成功,请尽快和卖家结清货款";
+    @Autowired
+    public AdminToDoServiceImpl(AdminToDoDao adminToDoDao, MessageNotifyPersonalManagementService messageNotifyPersonalManagementService) {
+        this.adminToDoDao = adminToDoDao;
+        this.messageNotifyPersonalManagementService = messageNotifyPersonalManagementService;
+    }
+
+    /**
+     * 分页获取待办事项
+     *
+     * @param params
+     * @return Page<AdminToDo>
+     */
+    @Override
+    public Page<AdminToDo> getPageAdminToDo(PageParams params) {
+        final PageInfo info = new PageInfo(params);
+        User user = SystemSession.getUser();
+        Enterprise enterprise = user.getEnterprise();
+        if (enterprise == null) {
+            return new PageImpl<AdminToDo>(Collections.emptyList(), info, 0l);
+        }
+        List<MessageNotifyPersonalManagement> managements = messageNotifyPersonalManagementService.findNotifyPersonalEnuu(enterprise.getUu());
+        Boolean canNotify = false;
+        for (MessageNotifyPersonalManagement management : managements) {
+            if (management.getNotifyPersonalUseruu().longValue() == user.getUserUU().longValue()) {
+                canNotify = true;
+                break;
+            }
+        }
+        if (!canNotify) {
+            return new PageImpl<AdminToDo>(Collections.emptyList(), info, 0l);
+        }
+        info.sorting("applytime", Sort.Direction.DESC);
+        org.springframework.data.domain.Page<AdminToDo> adminToDos = adminToDoDao.findAll(new Specification<AdminToDo>() {
+            @Override
+            public Predicate toPredicate(Root<AdminToDo> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                query.where(info.getPredicates(root, query, cb));
+                return null;
+            }
+        }, info);
+        List<AdminToDo> content = adminToDos.getContent();
+        for (AdminToDo adminToDo : content) {
+            if (StringUtilB2C.equals(adminToDo.getType(), MessageType.CONFIRM_PAID.getType())) {
+                adminToDo.setMessage(String.format(CONFIRM_PAID_MESSAGE, adminToDo.getOrderid()));
+            } else if (StringUtilB2C.equals(adminToDo.getType(), MessageType.APPLY_PAID.getType())) {
+                adminToDo.setMessage(String.format(APPLY_PAID_MESSAGE, adminToDo.getOrderid()));
+            } else {
+                adminToDo.setMessage(String.format(FINANCIAL_SETTLEMENT_MESSAGE, adminToDo.getOrderid()));
+            }
+        }
+        return adminToDos;
+    }
+}

+ 16 - 0
src/main/java/com/uas/platform/b2c/trade/order/service/impl/MessageNotifyPersonalManagementServiceImpl.java

@@ -42,6 +42,22 @@ public class MessageNotifyPersonalManagementServiceImpl implements MessageNotify
         }
     }
 
+    /**
+     * 根据enuu获取对象
+     *
+     * @param enuu 企业enuu
+     * @return List<MessageNotifyPersonalManagement>
+     */
+    @Override
+    public List<MessageNotifyPersonalManagement> findNotifyPersonalEnuu(Long enuu) {
+        if (enuu == null) {
+            return Collections.emptyList();
+        } else {
+            List<MessageNotifyPersonalManagement> managements = messageNotifyPersonalManagementDao.findNotifyPersonalEnuu(enuu);
+            return managements;
+        }
+    }
+
     /**
      * 删除信息
      *

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

@@ -1,5 +1,5 @@
 jdbc.driverClassName=com.mysql.jdbc.Driver
-jdbc.url=7e5ef205e2ff4ca4ac98c9f833880ec6e2fe1a4579ebe694e129681326fc2cb1b5fe058042985e2f72b57c8be4fa3e1544065eabf2ab94ad017d02162675aa969997adc7fd7bd04c0eb8bcc3a1733fe6a27f40bcf87efef4566f5872030efe79859a9abb7cbad9c1aa1ae7c2bb1cb23007adc91d94a9369cec407809597189c5
+jdbc.url=7e5ef205e2ff4ca4ac98c9f833880ec6e2fe1a4579ebe6946c98747cbe3897b66b5c4cb4985aa8f22aa1cbab4bc6bfe12e09403e6255e2fda2f113bc366bbfc5d9a2cf99c34ce47ba6bd752a9bf5f04c3faf83464996ab6930a84c7d3b9f62d759eb691bc8cd1fe3225f6e7efa5ab3a583896b06178e65c56c3c4e448a0ae4fe
 jdbc.username=474e1aeadeeecac5
 jdbc.password=48981af937f010627b96e886a0d38aad
 jdbc.initialSize=1

二進制
src/main/resources/jxls-tpl/trade/releaseByBatch-person.xls


二進制
src/main/resources/jxls-tpl/trade/releaseByBatchError-person.xls


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

@@ -1,5 +1,5 @@
 jdbc.driverClassName=com.mysql.jdbc.Driver
-jdbc.url=7e5ef205e2ff4ca4ac98c9f833880ec6e2fe1a4579ebe694e129681326fc2cb1b5fe058042985e2f72b57c8be4fa3e1544065eabf2ab94ad017d02162675aa969997adc7fd7bd04c0eb8bcc3a1733fe6a27f40bcf87efef4566f5872030efe79859a9abb7cbad9c1aa1ae7c2bb1cb23007adc91d94a9369cec407809597189c5
+jdbc.url=7e5ef205e2ff4ca4ac98c9f833880ec6e2fe1a4579ebe6946c98747cbe3897b66b5c4cb4985aa8f22aa1cbab4bc6bfe12e09403e6255e2fda2f113bc366bbfc5d9a2cf99c34ce47ba6bd752a9bf5f04c3faf83464996ab6930a84c7d3b9f62d759eb691bc8cd1fe3225f6e7efa5ab3a583896b06178e65c56c3c4e448a0ae4fe
 jdbc.username=474e1aeadeeecac5
 jdbc.password=48981af937f010627b96e886a0d38aad
 jdbc.initialSize=1

+ 19 - 1
src/main/webapp/resources/css/user/base.css

@@ -271,10 +271,28 @@ select {
 }
 
 .user_center .search-right {
-    margin-top: 22px;
+    margin-top: 32px;
     position: relative;
 }
 
+.user_center .search-right .search-list{
+    position:absolute;
+    left:5px;
+    top:-22px;
+}
+.user_center .search-right .search-list ul li{
+    cursor:pointer;
+    line-height: 22px;
+    height:22px;
+    padding: 0 10px;
+    font-size: 14px;
+    color:#fff;
+}
+.user_center .search-right .search-list ul li.active{
+    color:#4a71c6;
+    background: #fff;
+}
+
 .user_center .search-right input {
     display: inline-block;
     line-height: 36px;

+ 20 - 1
src/main/webapp/resources/css/vendor/base.css

@@ -235,9 +235,28 @@ select {
     display: inline-block;
 }
 .user_center .search-right {
-    margin-top: 22px;
+    margin-top: 32px;
     position: relative;
 }
+
+.user_center .search-right .search-list{
+    position:absolute;
+    left:5px;
+    top:-22px;
+}
+.user_center .search-right .search-list ul li{
+    cursor:pointer;
+    line-height: 22px;
+    height:22px;
+    padding: 0 10px;
+    font-size: 14px;
+    color:#fff;
+}
+.user_center .search-right .search-list ul li.active{
+    color:#4a71c6;
+    background: #fff;
+}
+
 .user_center .search-right input {
     display: inline-block;
     line-height: 36px;

+ 2 - 6
src/main/webapp/resources/css/vendor/sell.css

@@ -3440,7 +3440,6 @@ body {
     background: #fff;
 }
 .com_tab ul li {
-    width: 100px;
     height:40px;
     text-align: center;
     float: left;
@@ -3448,8 +3447,8 @@ body {
 }
 .com_tab ul li a {
     font-size: 14px;
-    width: 100px;
     height:40px;
+    padding: 0 20px;
     display: inline-block;
 }
 .com_tab ul li.active a {
@@ -3521,10 +3520,7 @@ body {
 .com_tab:nth-of-type(2) ul li:first-child{
     margin-left: 0px
 }
-
-
-
-.:nth-of-type(1) ul li.active:after{
+.com_tab:nth-of-type(1) ul li.active:after{
     display: block
 }
 .log_company dl span.wd01 {

+ 80 - 61
src/main/webapp/resources/js/common/controllers/commonCtrls.js

@@ -258,70 +258,87 @@ define([ 'app/app' ], function(app) {
 
 	// 搜索框Ctrl
 	app.controller('SearchCtrl', ['$scope', '$http', '$rootScope', 'SessionService', function($scope, $http, $rootScope, SessionService) {
-		$scope.searchType = 'original';// 搜索类型
-		$scope.searchType = {
-			original: false,
-			inaction: false,
-			proffing: false,
-			brand: false,
-			isCmp: function() {
-				var me = this;
-				return me.original || me.inaction || me.proffing;
-			}
-		};
-		if(SessionService.get('brand')) {
-			$scope.searchType.brand = true;
-		}
+		// $scope.searchType = {
+		// 	original: false,
+		// 	inaction: false,
+		// 	proffing: false,
+		// 	brand: false,
+		// 	isCmp: function() {
+		// 		var me = this;
+		// 		return me.original || me.inaction || me.proffing;
+		// 	}
+		// };
+        // 默认搜索类型
+        $scope.searchType = 'component';
 
-		var componentSearchType = SessionService.get('component');
-		if(componentSearchType) {
-			$scope.searchType = angular.fromJson(componentSearchType);
-			$scope.searchType.isCmp = function() {
-				var me = this;
-				return me.original || me.inaction || me.proffing;
-			}
-		}
+		// 选搜索类型
+        $scope.setTypeClick = function (type) {
+        	$scope.searchType = type
+            $scope.search()
+		};
+
+        // 搜索
+        $scope.search = function() {
+            if($scope.keyword) {
+                SessionService.set('brand', true);
+                SessionService.unset('component');
+                window.location.href = 'search?w=' + encodeURI($scope.keyword) + '&type=' + $scope.searchType;
+            }
+        };
 
-		// 点击搜索库存、样品、呆滞
-		$scope.cmpTypeClick = function() {
-			if($scope.searchType.isCmp()) {
-				$scope.searchType.brand = false;
-			}
-		};
+		// if(SessionService.get('brand')) {
+		// 	$scope.searchType.brand = true;
+		// }
+        //
+		// var componentSearchType = SessionService.get('component');
+		// if(componentSearchType) {
+		// 	$scope.searchType = angular.fromJson(componentSearchType);
+		// 	$scope.searchType.isCmp = function() {
+		// 		var me = this;
+		// 		return me.original || me.inaction || me.proffing;
+		// 	}
+		// }
+
+		// // 点击搜索库存、样品、呆滞
+		// $scope.cmpTypeClick = function() {
+		// 	if($scope.searchType.isCmp()) {
+		// 		$scope.searchType.brand = false;
+		// 	}
+		// };
 
 		// 点击搜索品牌
-		$scope.brandTypeClick = function() {
-			if($scope.searchType.brand) {
-				$scope.searchType.original = false;
-				$scope.searchType.inaction = false;
-				$scope.searchType.proffing = false;
-			}
-		};
+		// $scope.brandTypeClick = function() {
+		// 	if($scope.searchType.brand) {
+		// 		$scope.searchType.original = false;
+		// 		$scope.searchType.inaction = false;
+		// 		$scope.searchType.proffing = false;
+		// 	}
+		// };
 
 		// 选搜索类型
-		$scope.setSearchType = function(t) {
-			$scope.searchType = t;
-		};
+		// $scope.setSearchType = function(t) {
+		// 	$scope.searchType = t;
+		// };
 
 		// 搜索
-		$scope.search = function() {
-			if($scope.keyword) {
-				if($scope.searchType.brand) {
-					SessionService.set('brand', true);
-					SessionService.unset('component');
-					window.location.href = 'search?w=' + encodeURI($scope.keyword) + '&type=brand';
-				}else if($scope.searchType.isCmp()){
-					SessionService.set('component', angular.toJson($scope.searchType));
-					SessionService.unset('brand');
-					window.location.href = 'search?w=' + encodeURI($scope.keyword) + '&type=component';
-				}else {
-					SessionService.unset('component');
-					SessionService.unset('brand');
-					window.location.href = 'search?w=' + encodeURI($scope.keyword) + '&type=all';
-				}
-
-			}
-		};
+		// $scope.search = function() {
+		// 	if($scope.keyword) {
+		// 		if($scope.searchType === 'brand') {
+		// 			SessionService.set('brand', true);
+		// 			SessionService.unset('component');
+		// 			window.location.href = 'search?w=' + encodeURI($scope.keyword) + '&type=brand';
+		// 		}else if($scope.searchType.isCmp()){
+		// 			SessionService.set('component', angular.toJson($scope.searchType));
+		// 			SessionService.unset('brand');
+		// 			window.location.href = 'search?w=' + encodeURI($scope.keyword) + '&type=component';
+		// 		}else {
+		// 			SessionService.unset('component');
+		// 			SessionService.unset('brand');
+		// 			window.location.href = 'search?w=' + encodeURI($scope.keyword) + '&type=all';
+		// 		}
+        //
+		// 	}
+		// };
 
 		// 搜索框获得焦点,显示联想框
 		$scope.onFocus = function() {
@@ -356,17 +373,19 @@ define([ 'app/app' ], function(app) {
 		$scope.onChange = function() {
 			if ($scope.keyword) {
 				var params = {
-					keyword: $scope.keyword
+					keyword: $scope.keyword,
+					type: $scope.searchType
 				};
-				if($rootScope.userInfo) {
-					params.userUU = $rootScope.userInfo.userUU;
-				}
+				// if($rootScope.userInfo) {
+				// 	params.userUU = $rootScope.userInfo.userUU;
+				// }
 				$http.get('search/similarKeywords', {
 					params : params
 				}).success(function(data){
 					$scope.associates = data;// 联想词数组
+					console.log('1', data)
 				}).error(function(response) {
-
+					console.log(response)
 				});
 			} else {
 				$scope.associates = [];// 联想词数组

+ 8 - 0
src/main/webapp/resources/view/sso/header.html

@@ -219,6 +219,14 @@
             </ul>
         </div>
         <div id="mall-search" class="search-right fr" ng-controller="SearchCtrl">
+            <div class="search-list">
+                <ul class="list-inline">
+                    <li ng-class="{'active': searchType === 'component'}" ng-click="setTypeClick('component')">型号</li>
+                    <li ng-class="{'active': searchType === 'product'}" ng-click="setTypeClick('product')">物料名称</li>
+                    <li ng-class="{'active': searchType === 'store'}" ng-click="setTypeClick('store')">卖家</li>
+                    <li ng-class="{'active': searchType === 'brand'}" ng-click="setTypeClick('brand')">品牌</li>
+                </ul>
+            </div>
             <input type="text" ng-model="keyword" ng-change="onChange()" ng-search="search()" ng-focus="onFocus()" ng-blur="onBlur()" ng-keyup="onKeyup()"placeholder="品牌/物料名称/型号" />
             <a class="seek" ng-click="search()">搜索</a>
             <ul class="association" ng-show="associate || associateEnter"  ng-class="{'none': !associate || !associateEnter}" ng-mouseenter="onAssociateEnter()" ng-mouseleave="onAssociateLeave()">

+ 8 - 0
src/main/webapp/resources/view/usercenter/header.html

@@ -219,6 +219,14 @@
             </ul>
         </div>
         <div id="mall-search" class="search-right fr" ng-controller="SearchCtrl">
+            <div class="search-list">
+                <ul class="list-inline">
+                    <li ng-class="{'active': searchType === 'component'}" ng-click="setTypeClick('component')">型号</li>
+                    <li ng-class="{'active': searchType === 'product'}" ng-click="setTypeClick('product')">物料名称</li>
+                    <li ng-class="{'active': searchType === 'store'}" ng-click="setTypeClick('store')">卖家</li>
+                    <li ng-class="{'active': searchType === 'brand'}" ng-click="setTypeClick('brand')">品牌</li>
+                </ul>
+            </div>
             <input type="text" ng-model="keyword" ng-change="onChange()" ng-search="search()" ng-focus="onFocus()" ng-blur="onBlur()" ng-keyup="onKeyup()"placeholder="品牌/物料名称/型号" />
             <a class="seek" ng-click="search()">搜索</a>
             <ul class="association" ng-show="associate || associateEnter"  ng-class="{'none': !associate || !associateEnter}" ng-mouseenter="onAssociateEnter()" ng-mouseleave="onAssociateLeave()">

+ 14 - 6
src/main/webapp/resources/view/vendor/forstore/vendor_upload.html

@@ -463,7 +463,6 @@
     }
     .remind-line{
         width: 100%;
-        height: 30px;
         line-height: 30px;
         text-align: center;
         background: #fef6f2;
@@ -471,8 +470,11 @@
         overflow: hidden ;
     }
     .remind-line span{
-        margin-left: 330px;
-        height: 30px;
+        width: 660px;
+        word-break: break-all;
+        display: inline-block;
+        margin-left: 190px;
+        text-align: left;
         font-size: 14px;
         color: #f15601;
     }
@@ -529,8 +531,8 @@
     <div class="pro_management device">
         <div class="com_tab">
             <ul class="fl" style="width: 100%" ng-if="!isPcbStore">
-                <li ng-class="{'active': $$productOn.tab == 'bathOn'}" ng-click="toggleActive('bathOn')"><a href="">导入企业库</a></li>
-                <li ng-class="{'active': $$productOn.tab == 'bathOnPerson'}" ng-click="toggleActive('bathOnPerson')"><a href="">导入个人库</a></li>
+                <li ng-class="{'active': $$productOn.tab == 'bathOn'}" ng-click="toggleActive('bathOn')"><a href="">导入产品并上架</a></li>
+                <li ng-class="{'active': $$productOn.tab == 'bathOnPerson'}" ng-click="toggleActive('bathOnPerson')"><a href="">导入产品</a></li>
             </ul>
             <ul class="fl" style="width: 100%" ng-if="isPcbStore">
                 <li><a ui-sref="vendor_material">公司产品库</a></li>
@@ -541,7 +543,13 @@
             </ul>
         </div>
         <div class="remind-line" ng-show="$$productOn.tab == 'bathOn' && showTip"><span class="fl">导入企业库的产品同时会进行上架销售并展示在店铺</span><a ng-click="closeTip()" class="fr">&times;</a></div>
-        <div class="remind-line" ng-show="$$productOn.tab == 'bathOnPerson' && showTip"><span class="fl">创建您的个人产品库,可为您精准推送客户需求</span><a href="help/helpDetail/56" target="_blank" class="operate-introduce">操作说明</a><a ng-click="closeTip()" class="fr">&times;</a></div>
+        <div class="remind-line" ng-show="$$productOn.tab == 'bathOnPerson' && showTip">
+            <span class="fl">
+                1、导入产品物料,可让您被搜索到且能获取相关产品的询价商机。<br/>
+                2、由于导入产品物料无须填写库存、交期、价格等信息,买家不能立即购买。<br/>
+                3、如希望立即购买请进行“导入产品并上架”操作,或“导入物料”后在“库存管理”里完成上架。
+            </span>
+            <a href="help/helpDetail/56" target="_blank" class="operate-introduce">操作说明</a><a ng-click="closeTip()" class="fr">&times;</a></div>
         <div class="wanted_list01">
             <div class="tab" ng-if="$$productOn.leadIn == 'bathOn'" ng-class="{'active': leadIn == 'bathOn'}" >
                 <div class="load_next" ng-class="{'border-none':open01}">

+ 8 - 1
src/main/webapp/resources/view/vendor/header.html

@@ -216,6 +216,14 @@
             </ul>
         </div>
         <div id="mall-search" class="search-right fr" ng-controller="SearchCtrl">
+            <div class="search-list">
+                <ul class="list-inline">
+                    <li ng-class="{'active': searchType === 'component'}" ng-click="setTypeClick('component')">型号</li>
+                    <li ng-class="{'active': searchType === 'product'}" ng-click="setTypeClick('product')">物料名称</li>
+                    <li ng-class="{'active': searchType === 'store'}" ng-click="setTypeClick('store')">卖家</li>
+                    <li ng-class="{'active': searchType === 'brand'}" ng-click="setTypeClick('brand')">品牌</li>
+                </ul>
+            </div>
             <input type="text" ng-model="keyword" ng-change="onChange()" ng-search="search()" ng-focus="onFocus()" ng-blur="onBlur()" ng-keyup="onKeyup()"placeholder="品牌/物料名称/型号" />
             <a class="seek" ng-click="search()">搜索</a>
             <ul class="association" ng-show="associate || associateEnter" ng-mouseenter="onAssociateEnter()" ng-mouseleave="onAssociateLeave()" ng-class="{'none': !associate || !associateEnter}">
@@ -228,7 +236,6 @@
                 <li class="similar-title" ng-if="associates.component && associates.component.length > 0">型号:</li>
                 <li ng-repeat="as in associates.component" ng-bind="as.code" ng-class="{'active': $index==selectIndex}"
                     ng-click="onAssociateClick(as.code)"></li>
-
             </ul>
         </div>
     </div>