Browse Source

Merge branch 'dev-mysql' into newAccountTest0210

# Conflicts:
#	pom.xml
suntg 8 years ago
parent
commit
83fcbf9dee
100 changed files with 4367 additions and 279 deletions
  1. 1 2
      pom.xml
  2. 2 0
      src/main/java/com/uas/platform/b2c/common/account/controller/SecurityController.java
  3. 43 0
      src/main/java/com/uas/platform/b2c/core/filter/SimpleCORSFilter.java
  4. 28 0
      src/main/java/com/uas/platform/b2c/core/filter/SystemSessionInterceptor.java
  5. 29 4
      src/main/java/com/uas/platform/b2c/core/support/SystemSession.java
  6. 6 1
      src/main/java/com/uas/platform/b2c/core/support/view/JxlsExcelView.java
  7. 43 0
      src/main/java/com/uas/platform/b2c/core/utils/StringUtilB2C.java
  8. 20 10
      src/main/java/com/uas/platform/b2c/external/erp/commodity/service/impl/ProductDetailERPServiceImpl.java
  9. 13 4
      src/main/java/com/uas/platform/b2c/external/erp/commodity/util/ModelConverter.java
  10. 2 2
      src/main/java/com/uas/platform/b2c/external/erp/order/service/impl/OrderServiceImpl.java
  11. 1 0
      src/main/java/com/uas/platform/b2c/external/erp/product/util/ModelConverter.java
  12. 49 0
      src/main/java/com/uas/platform/b2c/fa/factoring/api/LoanApplyController.java
  13. 17 0
      src/main/java/com/uas/platform/b2c/fa/factoring/dao/LoanApplyDao.java
  14. 176 0
      src/main/java/com/uas/platform/b2c/fa/factoring/model/LoanApply.java
  15. 18 0
      src/main/java/com/uas/platform/b2c/fa/factoring/service/LoanApplyService.java
  16. 38 0
      src/main/java/com/uas/platform/b2c/fa/factoring/service/impl/LoanApplyServiceImpl.java
  17. 2 1
      src/main/java/com/uas/platform/b2c/prod/commodity/constant/ErrorInfoConstant.java
  18. 1 1
      src/main/java/com/uas/platform/b2c/prod/commodity/constant/ShortConstant.java
  19. 67 2
      src/main/java/com/uas/platform/b2c/prod/commodity/controller/GoodsController.java
  20. 2 2
      src/main/java/com/uas/platform/b2c/prod/commodity/controller/ProductController.java
  21. 17 0
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/GoodsDao.java
  22. 1 1
      src/main/java/com/uas/platform/b2c/prod/commodity/facade/impl/ProductStandardPutOnInfoFacadeImpl.java
  23. 25 14
      src/main/java/com/uas/platform/b2c/prod/commodity/model/ReleaseProductByBatch.java
  24. 1 1
      src/main/java/com/uas/platform/b2c/prod/commodity/service/GoodsHistoryService.java
  25. 35 1
      src/main/java/com/uas/platform/b2c/prod/commodity/service/GoodsService.java
  26. 2 1
      src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java
  27. 6 2
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsHistoryServiceImpl.java
  28. 355 82
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java
  29. 8 7
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductServiceImpl.java
  30. 1 1
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductStandardPutOnInfoServiceImpl.java
  31. 7 7
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ReleaseProductByBatchServiceImpl.java
  32. 40 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/api/VendorListController.java
  33. 40 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/controller/VendorListController.java
  34. 164 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/controller/VendorListSubmitController.java
  35. 48 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/dao/VendorListDao.java
  36. 36 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/dao/VendorListSubmitDao.java
  37. 263 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/modal/VendorList.java
  38. 362 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/modal/VendorListSubmit.java
  39. 28 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/VendorListService.java
  40. 75 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/VendorListSubmitService.java
  41. 157 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/VendorListServiceImpl.java
  42. 490 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/VendorListSubmitServiceImpl.java
  43. 29 25
      src/main/java/com/uas/platform/b2c/prod/product/common/service/impl/CreateNumberServiceImpl.java
  44. 9 0
      src/main/java/com/uas/platform/b2c/prod/product/component/dao/ComponentDao.java
  45. 0 3
      src/main/java/com/uas/platform/b2c/prod/store/api/CommodityController.java
  46. 11 0
      src/main/java/com/uas/platform/b2c/prod/store/controller/StoreInController.java
  47. 7 0
      src/main/java/com/uas/platform/b2c/prod/store/service/StoreInService.java
  48. 19 0
      src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreInServiceImpl.java
  49. 15 0
      src/main/java/com/uas/platform/b2c/trade/order/model/Order.java
  50. 9 1
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderServiceImpl.java
  51. 1 1
      src/main/java/com/uas/platform/b2c/trade/rate/model/RateBuyer.java
  52. 1 1
      src/main/java/com/uas/platform/b2c/trade/rate/model/RateGoods.java
  53. 1 1
      src/main/java/com/uas/platform/b2c/trade/rate/model/RateTemplate.java
  54. 1 1
      src/main/java/com/uas/platform/b2c/trade/rate/model/RateVendor.java
  55. 1 1
      src/main/java/com/uas/platform/b2c/trade/rate/service/impl/RateServiceImpl.java
  56. 11 6
      src/main/java/com/uas/platform/b2c/trade/seek/controller/SeekPurchaseBomController.java
  57. 74 0
      src/main/java/com/uas/platform/b2c/trade/seek/controller/SeekSalesmanInfoController.java
  58. 15 0
      src/main/java/com/uas/platform/b2c/trade/seek/dao/SeekSalesmanDao.java
  59. 20 0
      src/main/java/com/uas/platform/b2c/trade/seek/dao/SeekSalesmanInfoDao.java
  60. 15 0
      src/main/java/com/uas/platform/b2c/trade/seek/dao/SeekSalesmanMemberDao.java
  61. 79 0
      src/main/java/com/uas/platform/b2c/trade/seek/model/SeekSalesman.java
  62. 166 0
      src/main/java/com/uas/platform/b2c/trade/seek/model/SeekSalesmanInfo.java
  63. 44 0
      src/main/java/com/uas/platform/b2c/trade/seek/model/SeekSalesmanMember.java
  64. 18 0
      src/main/java/com/uas/platform/b2c/trade/seek/service/SeekSalesmanInfoService.java
  65. 13 0
      src/main/java/com/uas/platform/b2c/trade/seek/service/impl/SeekPurchaseBomServiceImpl.java
  66. 116 0
      src/main/java/com/uas/platform/b2c/trade/seek/service/impl/SeekSalesmanInfoServiceImpl.java
  67. 3 2
      src/main/resources/dev/sys.properties
  68. BIN
      src/main/resources/jxls-tpl/product/brand-vendor.xls
  69. BIN
      src/main/resources/jxls-tpl/trade/releaseByBatch-rmb.xls
  70. BIN
      src/main/resources/jxls-tpl/trade/releaseByBatchError-rmb.xls
  71. BIN
      src/main/resources/jxls-tpl/trade/releaseByBatchError-usd.xls
  72. BIN
      src/main/resources/jxls-tpl/trade/releasebyBatch-usd.xls
  73. BIN
      src/main/resources/jxls-tpl/trade/seekPurchaseByBatch.xls
  74. 2 1
      src/main/resources/prod/sys.properties
  75. 3 2
      src/main/resources/test/sys.properties
  76. 6 0
      src/main/webapp/WEB-INF/spring/webmvc.xml
  77. 3 0
      src/main/webapp/WEB-INF/views/normal/admin.html
  78. 12 4
      src/main/webapp/WEB-INF/views/normal/adminWithNav.html
  79. 1 0
      src/main/webapp/WEB-INF/views/normal/erp/vendor_center.html
  80. 1 1
      src/main/webapp/resources/css/common.css
  81. BIN
      src/main/webapp/resources/img/all/border_line.png
  82. BIN
      src/main/webapp/resources/img/icon/shop_icon.png
  83. 61 36
      src/main/webapp/resources/js/admin/app.js
  84. 60 0
      src/main/webapp/resources/js/admin/controllers/SeekSalesmanCtrl.js
  85. 56 0
      src/main/webapp/resources/js/admin/controllers/SeekSalesmanDetailCtrl.js
  86. 153 0
      src/main/webapp/resources/js/admin/controllers/SupplierSubmitDetailCtrl.js
  87. 60 0
      src/main/webapp/resources/js/admin/controllers/SupplierSubmitListCtrl.js
  88. 20 12
      src/main/webapp/resources/js/admin/controllers/ads/ads_brand.js
  89. 20 12
      src/main/webapp/resources/js/admin/controllers/ads/ads_component.js
  90. 24 0
      src/main/webapp/resources/js/admin/controllers/fa/LoanApplyListCtrl.js
  91. 53 13
      src/main/webapp/resources/js/admin/controllers/help/HelpDetailCtrl.js
  92. 37 7
      src/main/webapp/resources/js/admin/controllers/help/HelpEditCtrl.js
  93. 319 0
      src/main/webapp/resources/js/admin/controllers/supplierMaintenanceCtrl.js
  94. 15 1
      src/main/webapp/resources/js/common/controllers/commonCtrls.js
  95. 1 1
      src/main/webapp/resources/js/common/directives.js
  96. 15 1
      src/main/webapp/resources/js/common/query/goods.js
  97. 10 0
      src/main/webapp/resources/js/common/query/help.js
  98. 9 0
      src/main/webapp/resources/js/common/query/loanApply.js
  99. 25 0
      src/main/webapp/resources/js/common/query/seekSalesman.js
  100. 4 0
      src/main/webapp/resources/js/common/query/storeInfo.js

+ 1 - 2
pom.xml

@@ -409,8 +409,7 @@
 			</exclusions>
 		</dependency>
 
-
-		<dependency>
+        <dependency>
             <groupId>net.sourceforge.pinyin4j</groupId>
             <artifactId>pinyin4j</artifactId>
 			<version>1.1.0</version>

+ 2 - 0
src/main/java/com/uas/platform/b2c/common/account/controller/SecurityController.java

@@ -103,6 +103,8 @@ public class SecurityController {
 		session.invalidate();
 		SSOHelper.clearLogin(request, response);
 		SystemSession.clear();
+		// 使session失效
+		request.getSession().invalidate();
 		if (StringUtils.isEmpty(returnUrl)) {
 			returnUrl = request.getHeader("Referer");
 		}

+ 43 - 0
src/main/java/com/uas/platform/b2c/core/filter/SimpleCORSFilter.java

@@ -0,0 +1,43 @@
+package com.uas.platform.b2c.core.filter;
+
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * CORS 跨域请求过滤器,实现允许跨域
+ * @author suntg
+ * @since 2018年3月15日17:51:32
+ */
+public class SimpleCORSFilter implements Filter {
+
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+
+    }
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response,
+                         FilterChain chain) throws IOException, ServletException {
+        HttpServletResponse res = (HttpServletResponse) response;
+        res.setHeader("Access-Control-Allow-Origin", "*");
+        res.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT");
+        res.setHeader("Access-Control-Allow-Headers", "Content-Type");
+        res.setHeader("Access-Control-Allow-Credentials", "true");
+        res.setHeader("Access-Control-Allow-Headers", "x-requested-with");
+        chain.doFilter(request, res);
+    }
+
+    @Override
+    public void destroy() {
+
+    }
+
+}

+ 28 - 0
src/main/java/com/uas/platform/b2c/core/filter/SystemSessionInterceptor.java

@@ -0,0 +1,28 @@
+package com.uas.platform.b2c.core.filter;
+
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.core.support.SystemSession;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+/**
+ * 用户信息拦截器,对所有的请求,自动将Session 中的用户信息设置进
+ */
+public class SystemSessionInterceptor extends HandlerInterceptorAdapter {
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        if (SystemSession.getUser() == null) {
+            HttpSession session = request.getSession(false);
+            if (session != null && session.getAttribute("user") != null) {
+                SystemSession.setUser((User) session.getAttribute("user"));
+            }
+            SystemSession.setSession(session);
+        }
+        return true;
+    }
+
+}

+ 29 - 4
src/main/java/com/uas/platform/b2c/core/support/SystemSession.java

@@ -2,6 +2,8 @@ package com.uas.platform.b2c.core.support;
 
 import com.uas.platform.b2c.common.account.model.User;
 
+import javax.servlet.http.HttpSession;
+
 /**
  * 每次请求服务器时,用户信息存放在本次线程中
  * 
@@ -11,22 +13,45 @@ import com.uas.platform.b2c.common.account.model.User;
  */
 public class SystemSession {
 
-	private static ThreadLocal<User> local = new ThreadLocal<User>();
+	private static ThreadLocal<User> localUser = new ThreadLocal<User>();
+
+	private static ThreadLocal<HttpSession> loaclSession = new ThreadLocal<HttpSession>();
+
+	/**
+	 * 在Session信息拦截器中会进行调用,将登录的用户信息设置到这里
+	 * @param session
+	 */
+	public static void setSession(HttpSession session) {
+		loaclSession.set(session);
+	}
+
+	public static HttpSession getSession() {
+		return loaclSession.get();
+	}
+
+	public static void clearSesssion() {
+		loaclSession.set(null);
+	}
 
 	/**
 	 * 在身份信息验证拦截器中会进行调用,将登录的用户信息设置到这里
 	 * @param session
 	 */
 	public static void setUser(User session) {
-		local.set(session);
+		localUser.set(session);
 	}
 
 	public static User getUser() {
-		return local.get();
+		return localUser.get();
+	}
+
+	public static void clearUser() {
+		localUser.set(null);
 	}
 
 	public static void clear() {
-		local.set(null);
+		localUser.set(null);
+		loaclSession.set(null);
 	}
 
 }

+ 6 - 1
src/main/java/com/uas/platform/b2c/core/support/view/JxlsExcelView.java

@@ -8,6 +8,7 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 import org.springframework.core.io.Resource;
 import org.springframework.core.io.support.LocalizedResourceHelper;
+import org.springframework.util.StringUtils;
 import org.springframework.web.servlet.support.RequestContextUtils;
 import org.springframework.web.servlet.view.document.AbstractExcelView;
 
@@ -87,7 +88,11 @@ public class JxlsExcelView extends AbstractExcelView {
 		}
 
 		public Export() {
-			this.user = SystemSession.getUser().getUserName();
+			if (StringUtils.isEmpty(SystemSession.getUser())) {
+				this.user = "游客";
+			} else {
+				this.user = SystemSession.getUser().getUserName();
+			}
 			this.date = DateFormatUtils.DATETIME_FORMAT.format(new Date());
 		}
 	}

+ 43 - 0
src/main/java/com/uas/platform/b2c/core/utils/StringUtilB2C.java

@@ -273,4 +273,47 @@ public class StringUtilB2C {
 			return a.equals(b);
 		}
 	}
+
+
+	/**
+	 * 中文的标点 转化为英文的标点,全角转半角
+	 *
+	 * @param input
+	 * @return
+	 */
+	public static String toEnglish(String input) {
+		if (StringUtils.isEmpty(input)) {
+			return null;
+		} else {
+            /*正则转换中文标点*/
+			input = input.replaceAll("\\:", ":")
+					.replaceAll("\\。", ".")
+					.replaceAll("\\“", "\"")
+					.replaceAll("\\”", "\"")
+					.replaceAll("\\【", "[")
+					.replaceAll("\\】", "]")
+					.replaceAll("\\《", "<")
+					.replaceAll("\\》", ">")
+					.replaceAll("\\,", ", ")
+					.replaceAll("\\?", "?")
+					.replaceAll("\\、", ", ")
+					.replaceAll("\\;", ";")
+					.replaceAll("\\(", "(")
+					.replaceAll("\\)", ")")
+					.replaceAll("\\‘", "'")
+					.replaceAll("\\’", "'")
+					.replaceAll("\\『", "[")
+					.replaceAll("\\』", "]")
+					.replaceAll("\\「", "[")
+					.replaceAll("\\」", "]")
+					.replaceAll("\\﹃", "[")
+					.replaceAll("\\﹄", "]")
+					.replaceAll("\\〔", "{")
+					.replaceAll("\\〕", "}")
+					.replaceAll("\\—", "-")
+					.replaceAll("\\·", ".");
+            /*正则转换全角为半角*/
+            return input;
+		}
+	}
 }

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

@@ -17,13 +17,13 @@ import com.uas.platform.b2c.prod.commodity.model.Product;
 import com.uas.platform.b2c.prod.commodity.model.ProductDetail;
 import com.uas.platform.b2c.prod.commodity.service.GoodsService;
 import com.uas.platform.core.logging.BufferedLoggerManager;
-import org.apache.log4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.CollectionUtils;
-
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.List;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
 
 /**
  * 针对ERP物料交易详情接口
@@ -86,11 +86,14 @@ public class ProductDetailERPServiceImpl implements ProductDetailERPService {
     @Override
     public String getCurrency() {
         logger.log("物料详情", "获取币别,企业:" + SystemSession.getUser().getEnterprise().getEnName());
-        return enterpriseService.getCurrencyByRegisterAddress().getData().toString();
+        Object result = enterpriseService.getCurrencyByRegisterAddress().getData();
+        return result == null ? "" : result.toString();
     }
 
     @Override
     public void updateReserve(List<ProductDetailERP> productDetailERPList) {
+        SimpleDateFormat dateFormat=new SimpleDateFormat("yy-MM-dd");
+        SimpleDateFormat timeFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         List<Product> productList = new ArrayList<Product>();
         Long enuu = SystemSession.getUser().getEnterprise().getUu();
         for (ProductDetailERP productDetailERP : productDetailERPList) {
@@ -115,7 +118,7 @@ public class ProductDetailERPServiceImpl implements ProductDetailERPService {
                             if (!CollectionUtils.isEmpty(goods)) {
                                 for (Goods good : goods) {
                                     if (Double.compare(subtractDecimal.doubleValue(), good.getReserve()) == 0) {// 差值等于此批次数量,直接下架此批次
-                                        goodsService.offShelfGoodsByProvider(good.getBatchCode());
+                                        goodsService.offShelfGoodsByProvider(good.getBatchCode(),true);
                                         break;
                                     }
 
@@ -126,16 +129,16 @@ public class ProductDetailERPServiceImpl implements ProductDetailERPService {
                                         loggerInfo.info(SystemSession.getUser().getEnterprise().getEnName() + "更新库存: " + products.get(0).getProdNum() + ",self is" + good.getSelfSale());
                                         // 如果调整后的库存小于最小起订量直接下架
                                         if (good.getReserve() < good.getMinBuyQty()) {
-                                            goodsService.offShelfGoodsByProvider(good.getBatchCode());
+                                            goodsService.offShelfGoodsByProvider(good.getBatchCode(),true);
                                         } else {
-                                            goodsService.updateGoods(nowGood, good);
+                                            goodsService.updateGoodsByERP(nowGood, good);
                                             goodsService.updateComponentTradeInfos(nowGood.getUuid());
                                         }
                                         break;
                                     }
 
                                     if (Double.compare(subtractDecimal.doubleValue(), good.getReserve()) > 0) {// 差值大于此批次数量,下架次批次,并继续下一批次调整
-                                        goodsService.offShelfGoodsByProvider(good.getBatchCode());
+                                        goodsService.offShelfGoodsByProvider(good.getBatchCode(),true);
                                         subtractDecimal = subtractDecimal.subtract(BigDecimal.valueOf(good.getReserve()));
                                     }
                                 }
@@ -146,7 +149,14 @@ public class ProductDetailERPServiceImpl implements ProductDetailERPService {
                 }
 
                 products.get(0).setErpReserve(productDetailERP.getReserve() == null ? 0 : productDetailERP.getReserve());
-                products.get(0).setProduceDate(productDetailERP.getProduceDate());
+                if (productDetailERP.getProduceDate() != null) {
+                    try {
+                        products.get(0).setProduceDate(dateFormat.format(timeFormat.parse(productDetailERP.getProduceDate())));
+                    } catch (Exception e) {
+                        products.get(0).setProduceDate(productDetailERP.getProduceDate());
+                    }
+                }
+
                 products.get(0).setPrice(productDetailERP.getPrice());
                 productList.add(products.get(0));
             }

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

@@ -13,11 +13,11 @@ import com.uas.platform.b2c.prod.commodity.model.GoodsQtyPrice;
 import com.uas.platform.b2c.prod.commodity.model.GoodsSimple;
 import com.uas.platform.b2c.prod.commodity.model.ProductDetail;
 import com.uas.platform.b2c.prod.product.component.modal.ComponentGoods;
-import org.springframework.data.domain.Page;
-import org.springframework.util.CollectionUtils;
-
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.List;
+import org.springframework.data.domain.Page;
+import org.springframework.util.CollectionUtils;
 
 /**
  * 用于ERP与商城类的互转
@@ -27,6 +27,9 @@ import java.util.List;
  */
 public class ModelConverter {
 
+	public static SimpleDateFormat dateFormat=new SimpleDateFormat("yy-MM-dd");
+	public static SimpleDateFormat timeFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
     /**
      * erp分段价格转 商城分段价格
      *
@@ -196,7 +199,13 @@ public class ModelConverter {
 		productDetail.setMinPackQty(productDetailERP.getMinPackQty());
 		productDetail.setPackaging(productDetailERP.getPackaging());
 		productDetail.setPrice(productDetailERP.getPrice());
-		productDetail.setProduceDate(productDetailERP.getProduceDate());
+		if (productDetailERP.getProduceDate() != null) {
+			try {
+				productDetail.setProduceDate(dateFormat.format(timeFormat.parse(productDetailERP.getProduceDate())));
+			} catch (Exception e) {
+				productDetail.setProduceDate(productDetailERP.getProduceDate());
+			}
+		}
 		// 暂时将ERP空闲库存放置在product中
 //		productDetail.setReserve(productDetailERP.getReserve());
 		productDetail.setCode(productDetailERP.getCode());

+ 2 - 2
src/main/java/com/uas/platform/b2c/external/erp/order/service/impl/OrderServiceImpl.java

@@ -33,7 +33,6 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
-import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -81,7 +80,8 @@ public class OrderServiceImpl implements OrderService {
 		SimpleExpression status3 = PredicateUtils.eq("status", Status.TOBECONFIRMED.value(), true);
 		SimpleExpression status4 = PredicateUtils.eq("status", Status.UNAVAILABLE_NOPAID.value(), true);
 		SimpleExpression status5 = PredicateUtils.eq("status", Status.UNAVAILABLE_PERSONAL.value(), true);
-		SimpleExpression[] expressions = new SimpleExpression[] { status1, status2, status3, status4, status5};
+		SimpleExpression status6 = PredicateUtils.eq("status", Status.TOBESHIPPED.value(), true);
+		SimpleExpression[] expressions = new SimpleExpression[] { status1, status2, status3, status4, status5, status6};
 		LogicalExpression purLogical = PredicateUtils.or(expressions);
 
 		// 采购单待上传的状态

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

@@ -528,6 +528,7 @@ public class ModelConverter {
 		product.setStandard(i);// 默认设置为非标准,到平台做匹配更新
 		Enterprise enter = SystemSession.getUser().getEnterprise();
 		// erp上传的数据默认赋值给标准信息
+		product.setPbranden(product.getBrand());
 		product.setPbrand(product.getBrand());
 		product.setPcmpcode(product.getCmpCode());
 		product.setKind(product.getProdName());

+ 49 - 0
src/main/java/com/uas/platform/b2c/fa/factoring/api/LoanApplyController.java

@@ -0,0 +1,49 @@
+package com.uas.platform.b2c.fa.factoring.api;
+
+import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
+import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.platform.b2c.fa.factoring.model.LoanApply;
+import com.uas.platform.b2c.fa.factoring.service.LoanApplyService;
+import com.uas.platform.b2c.prod.product.brand.modal.Brand;
+import com.uas.platform.b2c.prod.product.brand.modal.BrandSubmit;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import com.uas.platform.core.model.PageParams;
+import com.uas.platform.core.model.ServiceCode;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 贷款申请Controller
+ * @author suntg
+ * @since 2018年3月13日10:23:34
+ */
+@RestController("api.LoanApplyController")
+@RequestMapping("/api/fa/loanApply")
+public class LoanApplyController {
+
+    @Autowired
+    private LoanApplyService loanApplyService;
+
+    /**
+     * 分页获取数据
+     * @param page
+     * @return
+     */
+    @RequestMapping(method = RequestMethod.GET)
+    public Page<LoanApply> getInitialSimpleInfoByFirst(PageParams page) {
+        return loanApplyService.getByPage(page);
+    }
+
+    /**
+     * 保存贷款申请
+     * @param json
+     */
+    @RequestMapping(method = RequestMethod.POST)
+    public void saveLoanApply(@RequestBody String json) {
+        LoanApply loanApply = FastjsonUtils.fromJson(json, LoanApply.class);
+        loanApply = loanApplyService.save(loanApply);
+    }
+
+}

+ 17 - 0
src/main/java/com/uas/platform/b2c/fa/factoring/dao/LoanApplyDao.java

@@ -0,0 +1,17 @@
+package com.uas.platform.b2c.fa.factoring.dao;
+
+import com.uas.platform.b2c.fa.factoring.model.LoanApply;
+import com.uas.platform.core.data.repository.GenericRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 贷款申请数据处理类
+ */
+@Repository
+public interface LoanApplyDao extends CrudRepository<LoanApply, Long>, JpaSpecificationExecutor<LoanApply>, GenericRepository<LoanApply, Long> {
+
+
+
+}

+ 176 - 0
src/main/java/com/uas/platform/b2c/fa/factoring/model/LoanApply.java

@@ -0,0 +1,176 @@
+package com.uas.platform.b2c.fa.factoring.model;
+
+import javax.persistence.*;
+import java.util.Date;
+
+/**
+ * 贷款申请
+ * @author suntg
+ * @since 2018年3月12日20:12:47
+ */
+@Entity
+@Table(name = "fa$loan_apply")
+public class LoanApply {
+
+    /**
+     * 序列号
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @Id
+    @GeneratedValue
+    @Column(name = "la_id")
+    private Long id;
+
+    /**
+     * 申请时间
+     */
+    @Column(name = "la_date")
+    private Date date = new Date();
+
+    /**
+     * 用户称呼
+     */
+    @Column(name = "la_name")
+    private String name;
+
+    /**
+     * 用户企业名称
+     */
+    @Column(name = "la_enname")
+    private String enName;
+
+    /**
+     * 用户手机号
+     */
+    @Column(name = "la_tel")
+    private String tel;
+
+    /**
+     * 用户邮箱地址
+     */
+    @Column(name = "la_email")
+    private String email;
+
+    /**
+     * 用户QQ号
+     */
+    @Column(name = "la_qq")
+    private String qq;
+
+    /**
+     * 用户联系地址
+     */
+    @Column(name = "la_address")
+    private String address;
+
+    /**
+     * 申请金额
+     */
+    @Column(name = "la_amount")
+    private Double amount;
+
+    /**
+     * 备注
+     */
+    @Column(name = "la_remark")
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getTel() {
+        return tel;
+    }
+
+    public void setTel(String tel) {
+        this.tel = tel;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getQq() {
+        return qq;
+    }
+
+    public void setQq(String qq) {
+        this.qq = qq;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public Double getAmount() {
+        return amount;
+    }
+
+    public void setAmount(Double amount) {
+        this.amount = amount;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getEnName() {
+        return enName;
+    }
+
+    public void setEnName(String enName) {
+        this.enName = enName;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public String contact() {
+        StringBuffer s = new StringBuffer();
+        if (this.tel != null) {
+            s.append("手机号:" + this.tel);
+        }
+        if (this.email != null) {
+            s.append(" 邮箱:" + this.email);
+        }
+        if (this.qq != null) {
+            s.append(" QQ:" + this.qq);
+        }
+        return s.toString();
+    }
+
+}

+ 18 - 0
src/main/java/com/uas/platform/b2c/fa/factoring/service/LoanApplyService.java

@@ -0,0 +1,18 @@
+package com.uas.platform.b2c.fa.factoring.service;
+
+import com.uas.platform.b2c.fa.factoring.model.LoanApply;
+import com.uas.platform.b2c.prod.product.brand.modal.Brand;
+import com.uas.platform.core.model.PageParams;
+import org.springframework.data.domain.Page;
+
+/**
+ * 用户贷款申请服务
+ * @author suntg
+ * @since 2018年3月13日09:39:03
+ */
+public interface LoanApplyService {
+
+    public Page<LoanApply> getByPage(PageParams params);
+
+    public LoanApply save(LoanApply loanApply);
+}

+ 38 - 0
src/main/java/com/uas/platform/b2c/fa/factoring/service/impl/LoanApplyServiceImpl.java

@@ -0,0 +1,38 @@
+package com.uas.platform.b2c.fa.factoring.service.impl;
+
+import com.uas.platform.b2c.fa.factoring.dao.LoanApplyDao;
+import com.uas.platform.b2c.fa.factoring.model.LoanApply;
+import com.uas.platform.b2c.fa.factoring.service.LoanApplyService;
+import com.uas.platform.b2c.fa.payment.utils.StringUtils;
+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.Sort;
+import org.springframework.stereotype.Service;
+
+/**
+ * 用户贷款申请服务实现类
+ * @author suntg
+ * @since 2018年3月13日09:39:35
+ */
+@Service
+public class LoanApplyServiceImpl implements LoanApplyService {
+
+    @Autowired
+    private LoanApplyDao loanApplyDao;
+
+    @Override
+    public Page<LoanApply> getByPage(PageParams params) {
+        PageInfo pageable = new PageInfo(params);
+        if (pageable.getSort() == null) {
+            pageable.sorting("date", Sort.Direction.DESC);
+        }
+        return loanApplyDao.findAll(pageable);
+    }
+
+    @Override
+    public LoanApply save(LoanApply loanApply) {
+        return loanApplyDao.save(loanApply);
+    }
+}

+ 2 - 1
src/main/java/com/uas/platform/b2c/prod/commodity/constant/ErrorInfoConstant.java

@@ -16,11 +16,12 @@ public enum  ErrorInfoConstant {
     BREAK_UP_INFO("C列:请选择可拆卖情况是或否"),
     RESERVE_NUMBER_INFO("D列:库存须填写小于10亿的正整数"),
     PRODUCE_DATE_INFO("E列:生产日期不能为空"),
+    PACKAGE_NOT_EXIST_INFO("F列:包装方式不存在"),
     PACKAGE_METHOD_INFO("F列:包装方式只能填写中英文"),
     PACKAGE_EMPTY_INFO("F列:包装方式不能为空"),
     PERSON_PACKAGE_EMPTY_INFO("C列:规格信息不能为空"),
     DELIVERY_EMPTY_INFO("G-H列:存在交期的信息为空"),
-    DELIVERY_VALUE_INFO("G-H列:交期只能填写1-31之间的整数值"),
+    DELIVERY_VALUE_INFO("G-H列:交期只能填写1-999之间的整数值"),
     PRICE_INFO("K列:单价必须是小于1万的正数"),
     MIN_PACKAGE_INFO("I列:最小包数量包含非数字字符"),
     REPEAT_IN_EXCEL("表格中已存在相同的产品");

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/commodity/constant/ShortConstant.java

@@ -10,7 +10,7 @@ public class ShortConstant {
     /**
      * 最长交期
      */
-    public static final Short maxDelivery = 31;
+    public static final Short maxDelivery = 999;
 
     /**
      * 最短交期

+ 67 - 2
src/main/java/com/uas/platform/b2c/prod/commodity/controller/GoodsController.java

@@ -477,7 +477,7 @@ public class GoodsController {
 	public ResultMap offShelfGoodsByProvider(String batchCodes) {
 		assert logger != null;
 		logger.log("货品管理", "下架上架商品");
-		return goodsService.offShelfGoodsByProvider(batchCodes);
+		return goodsService.offShelfGoodsByProvider(batchCodes,false);
 	}
 
     /**
@@ -566,6 +566,42 @@ public class GoodsController {
 		return modelView;
 	}
 
+	/**
+	 * 导出在售信息Excel表
+	 *
+	 * @param isAjax  the is ajax 是否是ajax请求
+	 * @param request the request 请求对象
+	 * @return model and view
+	 */
+	@RequestMapping(value = "/down/goods", method = RequestMethod.GET)
+	public ModelAndView downLoadPurchase(@RequestParam(defaultValue = "false") Boolean isAjax, String keyword, @RequestParam(required = false) Boolean isSelfSupport, HttpServletRequest request) {
+		ModelAndView modelView = new ModelAndView();
+		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
+		modelView.addObject("dateFormat", dateFormat);
+		modelView.addObject("goodsService", goodsService);
+		HttpSession session = request.getSession();
+		Object loading = session.getAttribute("loading");
+		if(isAjax) {
+			MappingJackson2JsonView view = new MappingJackson2JsonView();
+			Map attributes = new HashMap();
+			if(loading == null || !Boolean.valueOf(loading.toString())) {
+				attributes.put("load", false);
+			}else if(Boolean.valueOf(loading.toString())){
+				attributes.put("load", true);
+			}
+			view.setAttributesMap(attributes);
+			modelView.setView(view);
+			return modelView;
+		}
+		session.setAttribute("loading", true);
+		modelView.addObject("data", goodsService.getGoodsByEnuu(keyword, isSelfSupport));
+		modelView.setView(new JxlsExcelView("classpath:jxls-tpl/trade/goods", "优软商城在售产品"));
+		//重置为下载停止状态
+		session.setAttribute("loading", false);
+		logger.log("批量下载在售产品信息", "以Excel形式导出批量导出在售产品数据");
+		return modelView;
+	}
+
     /**
      * 导出上下架历史信息表
      *
@@ -668,12 +704,41 @@ public class GoodsController {
 	 * @param tag 自定义标签
 	 * @return
 	 */
-    @RequestMapping(value = "repeat/tag", method = RequestMethod.GET)
+    @RequestMapping(value = "/repeat/tag", method = RequestMethod.GET)
     public ResultMap getCountByTag(Long goodId, Long productId, String tag) {
 		logger.log("自定义标签", "查询标签是否重复");
 		return goodsService.getCountByTag(goodId, productId, tag);
 	}
 
+	/**
+	 * 批量删除指定在售产品
+	 * @param idList
+	 * @return
+	 */
+	@RequestMapping(value = "/delete/batch", method = RequestMethod.PUT)
+	public ResultMap batchDeleteGoods(@RequestBody List<Long> idList) {
+		logger.log("删除商品", "根据id删除指定商品");
+		return goodsService.batchDeleteGoods(idList);
+	}
+
+	@RequestMapping(value = "/delete/enUU", method = RequestMethod.PUT)
+	public ResultMap deleteAllOnSaleGoods() {
+		Long enUU = SystemSession.getUser().getEnterprise().getUu();
+		logger.log("下架商品", "下架该enUU" + enUU + "所有商品");
+		return goodsService.deleteGoodsByEnUU(enUU);
+	}
+
+	/**
+	 * 下架当前企业的所有在售商品
+	 * @return
+	 */
+	@RequestMapping(value = "/down/enUU", method = RequestMethod.PUT)
+	public ResultMap downNowEnterpriseGoods() {
+		Long enUU = SystemSession.getUser().getEnterprise().getUu();
+		logger.log("下架商品", "下架该enUU" + enUU + "所有商品");
+		return goodsService.downNowEnterpriseGoods(enUU);
+	}
+
     /**
      * 下架当前企业的所有的商品信息
      *

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

@@ -109,9 +109,9 @@ public class ProductController {
 	 * @param productReplaceList 替代物料数组
 	 */
 	@RequestMapping(value = "/productReplace", method = RequestMethod.POST)
-	ResultMap setProductReplacesByPerson(@RequestBody String productReplaceList) {
+	ResultMap setProductReplacesByPerson(@RequestParam("productId") Long productId, @RequestBody String productReplaceList) {
 		List<ProductReplace> productReplaces = JSON.parseArray(productReplaceList,ProductReplace.class);
-		productService.setProductReplacesByPerson(productReplaces);
+		productService.setProductReplacesByPerson(productId, productReplaces);
 		return ResultMap.success("success");
 	}
 

+ 17 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/dao/GoodsDao.java

@@ -184,6 +184,23 @@ public interface GoodsDao extends JpaSpecificationExecutor<Goods>, JpaRepository
      */
     List<Goods> findByEnUUAndStatus(Long enUU, Integer status);
 
+    /**
+     * 根据企业enUU获取指定状态的产品列表
+     * @param enUU  企业euUU
+     * @param statusList 指定状态
+     * @return
+     */
+    @Query(value = "select g from Goods g where g.enUU = :enUU and status in :statusList")
+    List<Goods> findByEnUUAndInStatus(@Param("enUU") Long enUU, @Param("statusList") List<Integer> statusList);
+
+    /**
+     * 根据id列表查询所有的在售商品
+     * @param idList
+     * @return
+     */
+    @Query(value = "select g from Goods g where id in :idList")
+    List<Goods> findGoodsInIdList(@Param("idList") List<Long> idList);
+
     /**
      * 根据企业UU、商品型号和库存类型获取产品
      *

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/commodity/facade/impl/ProductStandardPutOnInfoFacadeImpl.java

@@ -164,7 +164,7 @@ public class ProductStandardPutOnInfoFacadeImpl implements ProductStandardPutOnI
 		}
 
         //保存库存的历史
-        GoodsHistory history = goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.STANDARD_MODIFY.getPhrase());
+        GoodsHistory history = goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.STANDARD_MODIFY.getPhrase(),false);
         goodsHistoryService.save(history);
 
 

+ 25 - 14
src/main/java/com/uas/platform/b2c/prod/commodity/model/ReleaseProductByBatch.java

@@ -8,7 +8,6 @@ import com.uas.platform.b2c.core.utils.StringUtilB2C;
 import com.uas.platform.b2c.prod.commodity.constant.DoubleConstant;
 import com.uas.platform.b2c.prod.commodity.constant.ErrorInfoConstant;
 import com.uas.platform.b2c.prod.commodity.type.ReleaseConstant;
-import com.uas.platform.b2c.prod.commodity.util.GoodsUtil;
 import com.uas.platform.b2c.trade.order.StringConstant.Currency;
 import org.apache.commons.collections.CollectionUtils;
 import org.codehaus.jackson.annotate.JsonIgnore;
@@ -19,6 +18,7 @@ import java.io.Serializable;
 import java.io.UnsupportedEncodingException;
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.regex.Matcher;
@@ -34,6 +34,17 @@ import java.util.regex.Pattern;
 @Table(name = "trade$releasebybatch")
 public class ReleaseProductByBatch implements Serializable {
 
+	/**
+	 * 可用包装方式列表
+	 */
+	private static final List<String> PACKAGING_LIST;
+
+	static {
+		String[] array = {"Bulk-散装", "Reel-卷装", "Tape/Reel-编带", "Tray-盘装",
+				"Tube-管装", "盒装", "袋装", "罐装", "瓶装", "桶装", "箱装"};
+		PACKAGING_LIST = Arrays.asList(array);
+	}
+
 	/**
 	 * 验证产品型号
 	 */
@@ -506,8 +517,8 @@ public class ReleaseProductByBatch implements Serializable {
 				throw new RuntimeException(e + "指定字符集不支持");
 			}
 		}
-		setBrandNameEn(StringUtilB2C.getStr(value));
-		setB2cBranden(StringUtilB2C.getStr(value));
+		setBrandNameEn(StringUtilB2C.toEnglish(StringUtilB2C.getStr(value)));
+		setB2cBranden(StringUtilB2C.toEnglish(StringUtilB2C.getStr(value)));
 	}
 
 	public void setCodeByExcel(Object value) {
@@ -576,14 +587,17 @@ public class ReleaseProductByBatch implements Serializable {
 		setProductDate(productData);
 	}
 
-	public void setPackagingByExcel(Object value ,boolean isAPerson) {
+	public void setPackagingByExcel(Object value, boolean isAPerson) {
 		if (!StringUtils.isEmpty(value)) {
 			String packaging = value.toString();
 			if (!isAPerson) {
-				Matcher matcher = chineseAndEnglishPattern.matcher(packaging);
-				if (!matcher.find()) {
-					addErrmsg(ErrorInfoConstant.PACKAGE_METHOD_INFO.getInfo());
+				if (!PACKAGING_LIST.contains(packaging)) {
+					addErrmsg(ErrorInfoConstant.PACKAGE_NOT_EXIST_INFO.getInfo());
 				}
+//				Matcher matcher = chineseAndEnglishPattern.matcher(packaging);
+//				if (!matcher.find()) {
+//					addErrmsg(ErrorInfoConstant.PACKAGE_METHOD_INFO.getInfo());
+//				}
 			}
 		} else {
 			if (!isAPerson) {
@@ -593,13 +607,7 @@ public class ReleaseProductByBatch implements Serializable {
 			}
 		}
 		String packagingData = StringUtilB2C.replaceLineBreak(StringUtilB2C.getStr(value));
-		if (!isAPerson) {
-			try {
-				packagingData = com.uas.platform.b2c.fa.payment.utils.StringUtils.cutOutString(packagingData, 10);
-			} catch (UnsupportedEncodingException e) {
-				throw new RuntimeException(e + "指定字符集不支持");
-			}
-		} else {
+		if (isAPerson) {
 			try {
 				packagingData = com.uas.platform.b2c.fa.payment.utils.StringUtils.cutOutString(packagingData, 150);
 			} catch (UnsupportedEncodingException e) {
@@ -648,6 +656,9 @@ public class ReleaseProductByBatch implements Serializable {
 			if (minBuy <= 0) {
 				setMinBuyQty(getMinPackage());
 			} else {
+				if (NumberUtil.compare(minBuy, DoubleConstant.maxMinPackageQty) > 0) {
+					minBuy = DoubleConstant.maxMinPackageQty;
+				}
 				setMinBuyQty(minBuy);
 				if ((breakUp != null) && !breakUp && minPackage != null) {
 					double remainder = minBuy % minPackage;

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

@@ -58,7 +58,7 @@ public interface GoodsHistoryService {
      * @param type  操作类型
      * @return goods history
      */
-    GoodsHistory converTGoodsHist(Goods goods, String type);
+    GoodsHistory converTGoodsHist(Goods goods, String type, Boolean isERP);
 
     /**
      * 获取买家需要的Goods相关信息

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

@@ -185,6 +185,13 @@ public interface GoodsService {
      */
     ResultMap updateGoods(Goods goods);
 
+    /**
+     * 更新/下架产品(erp)
+     *
+     * @return the result goods
+     */
+    Goods updateGoodsByERP(Goods nowGoods, Goods oldGoods);
+
     /**
      * 将保存的信息上架
      * @param id  需要上架信息的id
@@ -413,7 +420,7 @@ public interface GoodsService {
      * @param batchCodes 待下架商品批次号
      * @return the result map
      */
-    ResultMap offShelfGoodsByProvider(String batchCodes);
+    ResultMap offShelfGoodsByProvider(String batchCodes,Boolean isERP);
 
     /**
      * 分页获取批次信息
@@ -478,6 +485,12 @@ public interface GoodsService {
      */
     public List<Goods> getGoodsByIDS(String ids);
 
+    /**
+     * 根据enUU获取在售产品
+     * @return
+     */
+    List<Goods> getGoodsByEnuu(String keyword, Boolean isSelfSupport);
+
     /**
      * 判断是自营还是寄售
      *
@@ -518,6 +531,27 @@ public interface GoodsService {
      */
     ResultMap getCountByTag(Long goodId, Long productId, String tag);
 
+    /**
+     *下架当前企业的所有在售商品
+     * @param enUU  enUU
+     * @return
+     */
+    ResultMap downNowEnterpriseGoods(Long enUU);
+
+    /**
+     * 根据指定id列表删除在售产品
+     * @param idList
+     * @return
+     */
+    ResultMap batchDeleteGoods(List<Long> idList);
+
+    /**
+     * 根据企业enUU删除该产品
+     * @param enUU
+     * @return
+     */
+    ResultMap deleteGoodsByEnUU(Long enUU);
+
     /**
      * 批量获取相似商品的个数
      *

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

@@ -44,9 +44,10 @@ public interface ProductService {
 
     /**
      * 批量保存个人替代物料信息
+     * @param productId          替代物料id
      * @param productReplaceList 替代物料数组
      */
-    boolean setProductReplacesByPerson(List<ProductReplace> productReplaceList);
+    boolean setProductReplacesByPerson(Long productId, List<ProductReplace> productReplaceList);
 
 
     /**

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

@@ -132,10 +132,14 @@ public class GoodsHistoryServiceImpl implements GoodsHistoryService {
 	}
 
 	@Override
-	public GoodsHistory converTGoodsHist(Goods goods, String type) {
+	public GoodsHistory converTGoodsHist(Goods goods, String type, Boolean isERP) {
 		GoodsHistory goodsHistory = new GoodsHistory(goods);
 		goodsHistory.setOperateDate(new Date());
-		goodsHistory.setOperateUU(SystemSession.getUser().getUserUU());
+		if (null != isERP && isERP == true) {
+			goodsHistory.setOperateUU(88888888L);
+		} else {
+			goodsHistory.setOperateUU(SystemSession.getUser().getUserUU());
+		}
 		goodsHistory.setOperateType(type);
 		if(GoodsHistory.OperateType.Update.getPhrase().equals(type)) {
 			goodsHistory.setMessage(compareGoodsHistory(goodsHistory));

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

@@ -18,7 +18,6 @@ import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.DoubleArith;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
 import com.uas.platform.b2c.core.utils.NumberUtil;
-import com.uas.platform.b2c.core.utils.PatternUtil;
 import com.uas.platform.b2c.external.erp.commodity.util.ModelConverter;
 import com.uas.platform.b2c.prod.commodity.constant.DoubleConstant;
 import com.uas.platform.b2c.prod.commodity.constant.IntegerConstant;
@@ -243,18 +242,23 @@ public class GoodsServiceImpl implements GoodsService {
 //        if(!PatternUtil.matchChineseAndEnglish(goods.getTag())) {
 //            throw new IllegalOperatorException("自定义标签的信息只能包含中文和英文");
 //        }
-        if (goods.getPackaging() == null) {
+        /*if (goods.getPackaging() == null) {
             throw new IllegalOperatorException("包装信息为空");
+        }*/
+//        if (goods.getPackaging().length() > 10) {
+//            throw new IllegalOperatorException("包装信息操作约定的10个字符");
+//        }
+//        if (!PatternUtil.matchChineseAndEnglish(goods.getPackaging())) {
+//            throw new IllegalOperatorException("包装信息只能包含中文和英文");
+//        }
+        if (StringUtils.isEmpty(goods.getProduceDate())) {
+            throw new IllegalOperatorException("型号" + goods.getCode()+"品牌" + goods.getBrandNameEn() +"的产品生产日期为空");
+        } else {
+            if (goods.getProduceDate().length() > 12) {
+                throw new IllegalOperatorException("产品生产日期不能超过12个字符");
+            }
         }
-        if (goods.getPackaging().length() > 10) {
-            throw new IllegalOperatorException("包装信息操作约定的10个字符");
-        }
-        if (!PatternUtil.matchChineseAndEnglish(goods.getPackaging())) {
-            throw new IllegalOperatorException("包装信息只能包含中文和英文");
-        }
-        if (goods.getProduceDate().length() > 11) {
-            throw new IllegalOperatorException("产品生产日期不能超过11个字符");
-        }
+
         if (goods.getOriginal() == null) {
             throw new IllegalOperatorException("必须选择库存类型");
         }
@@ -491,7 +495,7 @@ public class GoodsServiceImpl implements GoodsService {
 		}
 		goodsDao.modifyReserve(goods.getBatchCode(), goods.getUuid(), goods.getReserve(), goods.getStatus().intValue());
 		// 每次批次保存同时保存一遍历史信息
-		GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.DeductReserve.getPhrase());
+		GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.DeductReserve.getPhrase(),false);
 		goodsHistoryService.save(goodsHistory);
 		// 更新器件属性的库存
 		updateComponentTradeInfos(goods.getUuid());
@@ -529,7 +533,7 @@ public class GoodsServiceImpl implements GoodsService {
 
             goodsDao.modifyReserve(goods.getBatchCode(), goods.getUuid(), goods.getReserve(), goods.getStatus().intValue());
             // 每次批次保存同时保存一遍历史信息
-            GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.ReleaseReserve.getPhrase());
+            GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.ReleaseReserve.getPhrase(),false);
             goodsHistoryService.save(goodsHistory);
             // 更新器件属性的库存
             updateComponentTradeInfos(goods.getUuid());
@@ -715,7 +719,7 @@ public class GoodsServiceImpl implements GoodsService {
             return null;
         }
 //		updateGoodTransactional(goods);
-        GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.Publish.getPhrase());
+        GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.Publish.getPhrase(),false);
         //仅保存商品信息,不上架
         if (goods.getId() == null || goods.getSold() == null) {
             goods.setSold(IntegerConstant.NO_INT);
@@ -779,7 +783,7 @@ public class GoodsServiceImpl implements GoodsService {
             if (resultMap.getCode() != CodeType.OK.code()) {
                 continue;
             }
-            GoodsHistory g = goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.Publish.getPhrase());
+            GoodsHistory g = goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.Publish.getPhrase(),false);
             goodsHistorys.add(g);
             list.add(goods);
             if (goods.getUuid() != null) {
@@ -812,7 +816,7 @@ public class GoodsServiceImpl implements GoodsService {
             if (resultMap.getCode() != CodeType.OK.code()) {
                 continue;
             }
-            GoodsHistory g = goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.Publish.getPhrase());
+            GoodsHistory g = goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.Publish.getPhrase(),false);
             goodsHistorys.add(g);
             list.add(goods);
             if (goods.getUuid() != null) {
@@ -1379,7 +1383,7 @@ public class GoodsServiceImpl implements GoodsService {
                 return resultMap;
             }
             //	updateGoodTransactional(goods);
-            GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, OperateType.Publish.getPhrase());
+            GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, OperateType.Publish.getPhrase(),false);
             Goods persistGoods = goodsDao.save(goods);
             goodsHistoryDao.save(goodsHistory);
             // TODO huxz 添加或修改商品价格信息
@@ -1440,7 +1444,7 @@ public class GoodsServiceImpl implements GoodsService {
         }
         goods.setStatus(Status.NO_SHELVE.value());
         //	updateGoodTransactional(goods);
-        GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, OperateType.ADD_GOODS.getPhrase());
+        GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, OperateType.ADD_GOODS.getPhrase(),false);
         Goods persistGoods = goodsDao.save(goods);
         if(product != null) {
             ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
@@ -1505,8 +1509,8 @@ public class GoodsServiceImpl implements GoodsService {
                 if (StringConstant.ERP.equals(product.getSourceApp())) {
                     List<Goods> goodses = goodsDao.findByProductId(product.getId());
                     Double reserve = productService.getGoodsReserveByErpReserve(product.getErpReserve(), goodses);
-                    reserve = NumberUtil.add(reserve, nowGoods.getReserve());
-                    reserve = NumberUtil.sub(reserve, oldGoods.getReserve());
+                    reserve = NumberUtil.add(reserve, oldGoods.getReserve());
+                    reserve = NumberUtil.sub(reserve, nowGoods.getReserve());
                     if (NumberUtil.compare(reserve, DoubleConstant.zero) < 0) {
                         throw new IllegalOperatorException("总在售库存量超过空闲库存量");
                     }
@@ -1554,7 +1558,7 @@ public class GoodsServiceImpl implements GoodsService {
                 goodsHistoryService
                         .converTGoodsHist
                                 (nowGoods,
-                                        OperateType.Update.getPhrase());
+                                        OperateType.Update.getPhrase(),false);
         List<Order> orders = detailService.updateOrderDetailsByGoods(nowGoods);
         //更新购物车信息
         List<Cart> cartList = cartService.updateCartByGoods(nowGoods);
@@ -1574,6 +1578,112 @@ public class GoodsServiceImpl implements GoodsService {
 		return nowGoods;
 	}
 
+    @Override
+    @Transactional
+    public Goods updateGoodsByERP(Goods nowGoods, Goods oldGoods) {
+        Goods resultGoods = null;
+        nowGoods.setMaxDelivery(oldGoods.getMaxDelivery());
+        nowGoods.setMinDelivery(oldGoods.getMinDelivery());
+        nowGoods.setSelfDeliveryDemMaxTime(oldGoods.getSelfDeliveryDemMaxTime());
+        nowGoods.setSelfDeliveryDemMinTime(oldGoods.getSelfDeliveryDemMinTime());
+        nowGoods.setSelfDeliveryHKMaxTime(oldGoods.getSelfDeliveryHKMaxTime());
+        nowGoods.setSelfDeliveryHKMinTime(oldGoods.getSelfDeliveryHKMinTime());
+        nowGoods.setTag(oldGoods.getTag());
+        //判断是否切换了销售方式
+        Boolean isChangeSaleType = false;
+        String storeuuid = oldGoods.getStoreid();
+        if (Integer.valueOf(oldGoods.getSelfSale()).equals(IntegerConstant.B2C_SALE)) {
+            if(!sysConf.getStoreid().equals(nowGoods.getStoreid())) {
+                isChangeSaleType = true;
+            }
+            nowGoods.setStoreid(sysConf.getStoreid());
+            nowGoods.setStoreName(sysConf.getEnName());
+        } else if (Integer.valueOf(oldGoods.getSelfSale()).equals(IntegerConstant.SELF_SALE)) {
+            StoreIn storeIn = storeInService.findByEnUU(nowGoods.getEnUU());
+            if (storeIn != null && storeIn.getStatus() == StoreStatus.OPENED) {
+                if(!storeIn.getUuid().equals(nowGoods.getStoreid())) {
+                    isChangeSaleType = true;
+                }
+                nowGoods.setStoreid(storeIn.getUuid());
+                nowGoods.setStoreName(storeIn.getStoreName());
+            } else {
+                throw new IllegalOperatorException("您还未开店铺,不能选择自营");
+            }
+        } else {
+            throw new IllegalOperatorException("您选择的销售方式不存在");
+        }
+
+        if(nowGoods.getProductid() != null) {
+            Product product = productDao.findOne(nowGoods.getProductid());
+            if(product != null) {
+                if (StringConstant.ERP.equals(product.getSourceApp())) {
+                    List<Goods> goodses = goodsDao.findByProductId(product.getId());
+                    Double reserve = productService.getGoodsReserveByErpReserve(product.getErpReserve(), goodses);
+                    reserve = NumberUtil.add(reserve, oldGoods.getReserve());
+                    reserve = NumberUtil.sub(reserve, nowGoods.getReserve());
+                    if (NumberUtil.compare(reserve, DoubleConstant.zero) < 0) {
+                        // 下架这部分的库存
+                        //throw new IllegalOperatorException("总在售库存量超过空闲库存量");
+                    }
+                }
+            }
+        }
+
+        // 设置货到香港,货到大陆的延长时间
+        setB2CDelayTime(nowGoods);
+
+        nowGoods.setUpdateDate(new Date());
+        nowGoods.setImg(oldGoods.getImg());
+        nowGoods.setMinBuyQty(oldGoods.getMinBuyQty());
+        nowGoods.setMinPackQty(oldGoods.getMinPackQty());
+        nowGoods.setBreakUp(oldGoods.getBreakUp());
+        nowGoods.setPerQty();
+        nowGoods.setReserve(oldGoods);
+        nowGoods.setPackaging(oldGoods.getPackaging());
+        nowGoods.setProduceDate(oldGoods.getProduceDate());
+        // 用含税单价同步未含税单价
+        oldGoods.setWithOutTaxRMBPrice();
+        oldGoods.setWithOutTaxUSDPrice();
+        //保留六位有效数字
+        oldGoods.setSixFraction();
+        nowGoods.setQtyPrice(oldGoods.getQtyPrice());
+        // 更新本批次最小最大价格信息
+        nowGoods.setMinPriceRMB(GoodsUtil.getMinPriceRMB(nowGoods.getPrices()));
+        nowGoods.setMaxPriceRMB(GoodsUtil.getMaxPriceRMB(nowGoods.getPrices()));
+        nowGoods.setMinPriceUSD(GoodsUtil.getMinPriceUSD(nowGoods.getPrices()));
+        nowGoods.setMaxPriceUSD(GoodsUtil.getMaxPriceUSD(nowGoods.getPrices()));
+        if((nowGoods.getStatus().intValue() != Status.REMOVED.value()) && (nowGoods.getStatus().intValue() != Status.NO_SHELVE.value())) {
+            if (NumberUtil.compare(nowGoods.getReserve(), nowGoods.getMinBuyQty()) > -1) {
+                nowGoods.setStatus(Status.AVAILABLE.value());
+            } else {
+                nowGoods.setStatus(Status.UNAVAILABLE.value());
+            }
+        }
+
+        GoodsHistory history =
+                goodsHistoryService
+                        .converTGoodsHist
+                                (nowGoods,
+                                        OperateType.Update.getPhrase(),true);
+        List<Order> orders = detailService.updateOrderDetailsByGoods(nowGoods);
+        //更新购物车信息
+        List<Cart> cartList = cartService.updateCartByGoods(nowGoods);
+        //更新浏览历史
+        List<GoodsBrowsingHistory> browsingHistories = browsingHistoryService.updateGoodsBrowsingHistoryByGoods(nowGoods);
+//		ProductStandardPutOnInfo putOnInfo = productStandardPutOnInfoService.updateProductStandardPutOnInfoByGoods(nowGoods);
+//		Product product = productService.updateProduct(putOnInfo);
+        updateGoodsRelateInfo(orders, cartList, browsingHistories, null, null, history, nowGoods);
+        //更新店铺推荐的信息
+        if(isChangeSaleType) { // 如果切换了销售方式
+            Set<String> uuids = new HashSet<>();
+            uuids.add(nowGoods.getBatchCode());
+            recommendProductService.deleteProductsWhenSellerUpdateReserve(storeuuid, uuids);
+        } else {
+            recommendProductService.updateRecommendProductInfo(nowGoods);
+        }
+        return nowGoods;
+    }
+
     /**
      * 添加商品操作记录,保存商品信息
      *
@@ -1646,7 +1756,7 @@ public class GoodsServiceImpl implements GoodsService {
                     goodsDao.deleteByBatchCode(batchCode);
 
                     GoodsHistory goodsHist = goodsHistoryService.converTGoodsHist(goods,
-                            GoodsHistory.OperateType.Down.getPhrase());
+                            GoodsHistory.OperateType.Down.getPhrase(),false);
                     goodsHist.setMessage(goodsHist.getMessage() + "该批次下架");
                     goodsHistoryService.save(goodsHist);
                     uuids.add(goods.getUuid());
@@ -1832,7 +1942,7 @@ public class GoodsServiceImpl implements GoodsService {
         } else {
             goods.setStatus(Status.UNAVAILABLE.value());
         }
-        GoodsHistory converTGoodsHist = goodsHistoryService.converTGoodsHist(goods, OperateType.Update.getPhrase());
+        GoodsHistory converTGoodsHist = goodsHistoryService.converTGoodsHist(goods, OperateType.Update.getPhrase(),true);
         goodsHistoryService.save(converTGoodsHist);
         Goods good = goodsDao.save(goods);
         if (good == null) {
@@ -1855,7 +1965,7 @@ public class GoodsServiceImpl implements GoodsService {
                 goods.setStatus(Status.UNAVAILABLE.value());
             }
             // 每次批次保存同时保存一遍历史信息
-            GoodsHistory goodsHist = goodsHistoryService.converTGoodsHist(goods, OperateType.OrderPaied.getPhrase());
+            GoodsHistory goodsHist = goodsHistoryService.converTGoodsHist(goods, OperateType.OrderPaied.getPhrase(),true);
             goodsHist.setMessage(goodsHist.getMessage() + "接口变更库存之后,扣除意向采购单 和正式采购单的购买数量");
             goodsHistoryService.save(goodsHist);
             good = goodsDao.save(goods);
@@ -2021,7 +2131,7 @@ public class GoodsServiceImpl implements GoodsService {
 
                 } else {
                     goods.setStatus(Status.REMOVED.value());
-                    GoodsHistory goodsHist = goodsHistoryService.converTGoodsHist(goods, OperateType.Down.getPhrase());
+                    GoodsHistory goodsHist = goodsHistoryService.converTGoodsHist(goods, OperateType.Down.getPhrase(),false);
                     goodsHist.setMessage(goodsHist.getMessage() + "该批次产品下架(UAS接口)");
                     goodsHistoryService.save(goodsHist);
                     goodsDao.delete(goods);
@@ -2168,13 +2278,22 @@ public class GoodsServiceImpl implements GoodsService {
         if (StringUtils.hasText(code)) {
             pageInfo.expression(like("code", code, false));
         }
-        return goodsDao.findAll(new Specification<Goods>() {
+        Page<Goods> goodsPage = goodsDao.findAll(new Specification<Goods>() {
             @Override
             public Predicate toPredicate(Root<Goods> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
                 query.where(pageInfo.getPredicates(root, query, builder));
                 return null;
             }
         }, pageInfo);
+        for (Goods goods : goodsPage.getContent()) {
+            if (goods.getUuid() != null) {
+                Component component = componentDao.findByUuid(goods.getUuid());
+                if (component != null) {
+                    goods.setAttach(component.getAttach());
+                }
+            }
+        }
+        return goodsPage;
     }
 
     @Override
@@ -2265,7 +2384,7 @@ public class GoodsServiceImpl implements GoodsService {
     }
 
 	@Override
-	public ResultMap offShelfGoodsByProvider(String batchCodes) {
+	public ResultMap offShelfGoodsByProvider(String batchCodes, Boolean isERP) {
 		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 		logger.info(String.format("%s 商城测试下架时间记录1", dateFormat.format(new Date())));
 		if (StringUtils.isEmpty(batchCodes)) {
@@ -2282,7 +2401,7 @@ public class GoodsServiceImpl implements GoodsService {
         logger.info(String.format("%s 商城测试下架时间记录2", dateFormat.format(new Date())));
         for (String batchCode : batchCodeArr) {
             logger.info(String.format("%s 商城测试下架时间记录 调用下架方法开始", dateFormat.format(new Date())));
-            ResultMap resultMap = offShelfOneGoodsByProvider(batchCode);
+            ResultMap resultMap = offShelfOneGoodsByProvider(batchCode,isERP);
             logger.info(String.format("%s 商城测试下架时间记录  调用下架方法结束", dateFormat.format(new Date())));
             if (resultMap.isSuccess()) {
                 Goods goods = (Goods) resultMap.getData();
@@ -2321,7 +2440,7 @@ public class GoodsServiceImpl implements GoodsService {
      * @param batchCode 商品批次号
      */
     @Transactional
-    public ResultMap offShelfOneGoodsByProvider(String batchCode) {
+    public ResultMap offShelfOneGoodsByProvider(String batchCode, Boolean isERP) {
         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         logger.info(String.format("%s 商城测试下架时间记录 进入下架方法", dateFormat.format(new Date())));
         if (StringUtils.isEmpty(batchCode)) {
@@ -2343,31 +2462,18 @@ public class GoodsServiceImpl implements GoodsService {
         goods.setStatus(Status.REMOVED.value());
 
         //检查对应产品库信息
-        Product product = productDao.findOne(goods.getProductid());
-        if (product == null) {
-            throw new IllegalOperatorException("产品库信息丢失");
-        }
+//        Product product = productDao.findOne(goods.getProductid());
+//        if (product == null) {
+//            throw new IllegalOperatorException("产品库信息丢失");
+//        }
 
         logger.info(String.format("%s 商城测试下架时间记录 转历史库存 开始", dateFormat.format(new Date())));
         GoodsHistory goodsHist = goodsHistoryService.converTGoodsHist(goods,
-                GoodsHistory.OperateType.Down.getPhrase());
+                GoodsHistory.OperateType.Down.getPhrase(), isERP);
         logger.info(String.format("%s 商城测试下架时间记录 转历史库存 结束", dateFormat.format(new Date())));
         goodsHist.setMessage(goodsHist.getMessage() + "该批次下架");
         goodsHistoryService.save(goodsHist);
 
-//		ProductStandardPutOnInfo standardPutOnInfo = productStandardPutOnInfoDao.findOne(goods.getStandprodid());
-//		if(standardPutOnInfo != null) {
-//			standardPutOnInfo.setStatus(Status.REMOVED.value());
-//			standardPutOnInfo.setAvailableOnSale(NumberUtil.add(standardPutOnInfo.getAvailableOnSale(), standardPutOnInfo.getOnSaleQty()));
-//			standardPutOnInfo.setOnSaleQty(0.0d);
-//			productStandardPutOnInfoDao.save(standardPutOnInfo);
-//
-//			Product product = productDao.findOne(standardPutOnInfo.getProductid());
-//			product.setAvailableOnSale(standardPutOnInfo.getAvailableOnSale());
-//			product.setOnSaleQty(standardPutOnInfo.getOnSaleQty());
-//			productDao.save(product);
-//		}
-
         Goods updateGoods = goodsDao.save(goods);
 		//下架对应的批次 目前确定下架之后不做删除动作。
 		// goodsDao.deleteByBatchCode(goods.getBatchCode());
@@ -2509,6 +2615,68 @@ public class GoodsServiceImpl implements GoodsService {
         return goods;
     }
 
+    @Override
+    public List<Goods> getGoodsByEnuu(String keyword, Boolean isSelfSupport) {
+        final PageInfo page = new PageInfo();
+        page.setPageNumber(1);
+        page.setPageSize(10);
+        Long enUU = SystemSession.getUser().getEnterprise().getUu();
+        page.expression(PredicateUtils.eq("enUU", enUU, true));
+        page.sorting("createdDate", Sort.Direction.DESC);
+
+        SimpleExpression status1 = PredicateUtils.eq("status", Status.AVAILABLE.value(), true);
+        SimpleExpression status2 = PredicateUtils.eq("status", Status.UNAVAILABLE.value(), true);
+        SimpleExpression[] expressions2 = new SimpleExpression[] {status1, status2};
+        LogicalExpression logicalExpression2 = PredicateUtils.or(expressions2);
+        page.expression(logicalExpression2);
+
+        List<StoreIn> storeIns = storeInDao.findByEnUU(enUU);
+        String uuid = null;
+        if (!CollectionUtils.isEmpty(storeIns)) {
+            uuid = storeIns.get(0).getUuid();
+        } else {
+            uuid = "null";
+        }
+        // 过滤自营店铺上架商品
+        if (isSelfSupport != null && isSelfSupport && StringUtils.hasText(uuid)) {
+            SimpleExpression[] simpleExpressions = new SimpleExpression[3];
+            simpleExpressions[0] = PredicateUtils.eq("storeid", uuid, true);
+            simpleExpressions[1] = PredicateUtils.ne("storeName", "优软测试二", true);
+            simpleExpressions[2] = PredicateUtils.ne("storeName", "优软商城", true);
+            page.expression(PredicateUtils.and(simpleExpressions));
+        }
+        // 过滤寄售商品
+        if (isSelfSupport != null && !isSelfSupport && StringUtils.hasText(uuid)) {
+            String[] storeNames = new String[]{"优软测试二", "优软商城"};
+            LogicalExpression logicalExpression = PredicateUtils.in("storeName", storeNames, true);
+            if (!"null".equals(uuid)) {
+                SimpleExpression simpleExpression = PredicateUtils.ne("storeid", uuid, true);
+                page.expression(PredicateUtils.or(simpleExpression, logicalExpression));
+            } else {
+                page.expression(logicalExpression);
+            }
+        }
+
+        // 过滤关键词
+        if (StringUtils.hasText(keyword)) {
+            SimpleExpression code = like("code", keyword, true, true);
+            SimpleExpression brandNameEn = like("brandNameEn", keyword, true, true);
+            SimpleExpression batchCode = PredicateUtils.like("prodNum", keyword, true, true);
+            SimpleExpression[] expressions3 = new SimpleExpression[]{code, brandNameEn, batchCode};
+            LogicalExpression logicalExpression3 = PredicateUtils.or(expressions3);
+            page.expression(logicalExpression2);
+        }
+
+        return goodsDao.findAll(new Specification<Goods>() {
+            @Override
+            public Predicate toPredicate(Root<Goods> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                query.where(page.getPredicates(root, query, cb));
+                return null;
+            }
+        }, page.getSort());
+    }
+
+    @Override
     public String isSelfSupport(String storeid) {
         if(StringUtils.isEmpty(storeid)) {
             return "";
@@ -2682,6 +2850,112 @@ public class GoodsServiceImpl implements GoodsService {
         return ResultMap.success(false);
     }
 
+    @Override
+    public ResultMap downNowEnterpriseGoods(Long enUU) {
+        List<Integer> statusList = Arrays.asList(Status.AVAILABLE.value(), Status.UNAVAILABLE.value());
+        List<Goods> goodsList = goodsDao.findByEnUUAndInStatus(enUU, statusList);
+        List<GoodsHistory> histories = new ArrayList<>(goodsList.size());
+        List<Goods> goodsUpdate = new ArrayList<>(goodsList.size());
+        List<String> uuids = new ArrayList<>(goodsList.size());
+        for (Goods goods : goodsList) {
+            goods.setStatus(Status.REMOVED.value());
+
+            GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, "批量下架公司产品",false);
+            goodsHistory.setMessage(goodsHistory.getMessage() + "该批次下架");
+            goodsHistoryService.save(goodsHistory);
+            histories.add(goodsHistory);
+            goodsUpdate.add(goods);
+
+            uuids.add(goods.getUuid());
+        }
+
+        goodsDao.save(goodsUpdate);
+        goodsHistoryDao.save(histories);
+        for (String uuid : uuids) {
+            updateComponentTradeInfos(uuid);
+        }
+        return ResultMap.success(goodsUpdate.size());
+    }
+
+    private Map<Object, Object> deleteGoodsList(List<Goods> goodsList) {
+        Map<Object, Object> map = new HashMap<>();
+        int fail = 0;
+        // 保存批次号,以便下架推荐产品
+        Set<String> set = new HashSet<>();
+        String storeId = null;
+        for (Goods goods : goodsList) {
+            boolean isExistOrder = validateExistOrder(goods.getBatchCode());
+
+            if (isExistOrder) {
+                fail++;
+                continue;
+            }
+            if (storeId == null) {
+                storeId = goods.getStoreid();
+            }
+            set.add(goods.getBatchCode());
+
+            List<Order> orders = detailService.updateOrderDetailsByGoods(goods);
+            orderService.save(orders);
+
+            Boolean aBoolean = floorsService.updateHomeInfo(goods.getBatchCode());
+            List<GoodsHistory> histories = new ArrayList<>();
+            if (goods.getStatus().equals(Status.AVAILABLE.value()) || goods.getStatus().equals(Status.UNAVAILABLE.value())) {
+                //先做下架记录
+                goods.setStatus(Status.REMOVED.value());
+                GoodsHistory goodsHistoryRemoved = goodsHistoryService.converTGoodsHist(goods, OperateType.Down.getPhrase(),false);
+                histories.add(goodsHistoryRemoved);
+            }
+
+            goods.setStatus(Status.GOODS_DELETE.value());
+            //删除库存信息
+            GoodsHistory goodsHistoryDelete = goodsHistoryService.converTGoodsHist(goods, OperateType.DELETE.getPhrase(),false);
+            histories.add(goodsHistoryDelete);
+            goodsHistoryService.save(histories);
+
+            goodsDao.deleteByBatchCode(goods.getBatchCode());
+            if (goods.getProductid() != null) {
+                Product product = productDao.findOne(goods.getProductid());
+                if (product != null) {
+                    ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+                    if (productPrivate == null) {
+                        productPrivate = new ProductPrivate();
+                    }
+                    Integer count = productPrivate.getBatchCount();
+                    productPrivate.setBatchCount(--count);
+                    productPrivateDao.save(productPrivate);
+                }
+            }
+
+            //统计器件的信息
+            if (!StringUtils.isEmpty(goods.getUuid())) {
+                updateComponentTradeInfos(goods.getUuid());
+            }
+        }
+        recommendProductService.deleteProductsWhenSellerUpdateReserve(storeId, set);
+        map.put("total", goodsList.size());
+        map.put("success", goodsList.size() - fail);
+        map.put("fail", fail);
+        return map;
+    }
+
+    @Override
+    @Transactional
+    public ResultMap batchDeleteGoods(List<Long> idList) {
+        List<Goods> goodsList = goodsDao.findGoodsInIdList(idList);
+        Map<Object, Object> map = deleteGoodsList(goodsList);
+        return ResultMap.success(map);
+    }
+
+    @Override
+    @Transactional
+    public ResultMap deleteGoodsByEnUU(Long enUU) {
+        List<Integer> statusList = Arrays.asList(Status.AVAILABLE.value(), Status.UNAVAILABLE.value());
+        List<Goods> goodsList = goodsDao.findByEnUUAndInStatus(enUU, statusList);
+        Map<Object, Object> map = deleteGoodsList(goodsList);
+        return ResultMap.success(map);
+    }
+
     /**
      * 下架该公司所有的商品信息
      *
@@ -2714,7 +2988,7 @@ public class GoodsServiceImpl implements GoodsService {
             }
             goods.setStatus(Status.REMOVED.value());
 
-            GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, "批量下架公司产品");
+            GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, "批量下架公司产品",false);
             goodsHistory.setMessage(goodsHistory.getMessage() + "该批次下架");
             goodsHistoryService.save(goodsHistory);
             histories.add(goodsHistory);
@@ -2832,7 +3106,7 @@ public class GoodsServiceImpl implements GoodsService {
             goods.setStatus(Status.AVAILABLE.value());
         }
         GoodsHistory goodsHist = goodsHistoryService.converTGoodsHist(goods,
-                GoodsHistory.OperateType.Publish.getPhrase());
+                GoodsHistory.OperateType.Publish.getPhrase(),false);
         goodsHist.setMessage(goodsHist.getMessage() + "该批次上架");
         goodsHistoryService.save(goodsHist);
         Product product = productDao.findOne(id);
@@ -2904,19 +3178,8 @@ public class GoodsServiceImpl implements GoodsService {
         if(goods == null) {
             return null;
         }
-        boolean isExistOrder = false;
-        List<OrderDetail> orderList = orderDetailService.findOrderDetailByBatchCode(goods.getBatchCode());
-        String codes = OrderStatus.UNAVAILABLE.getCodes() + "-" + Status.TOBECONFIRMED.value();
-        for (OrderDetail detail : orderList) {
-            Order order = detail.getOrder();
-            int status = order.getStatus() == null ? detail.getStatus() : order.getStatus();
-            if (codes.indexOf(String.valueOf(status)) < 0) {
-                if (StringUtils.isEmpty(order.getOrderids())) {
-                    isExistOrder = true;
-                    break;
-                }
-            }
-        }
+        boolean isExistOrder = validateExistOrder(goods.getBatchCode());
+
         if (isExistOrder) {
             throw new IllegalOperatorException("该商品已经被购买了,不能删除");
         }
@@ -2932,20 +3195,20 @@ public class GoodsServiceImpl implements GoodsService {
         if (goods.getStatus().equals(Status.AVAILABLE.value()) || goods.getStatus().equals(Status.UNAVAILABLE.value())) {
             //先做下架记录
             goods.setStatus(Status.REMOVED.value());
-            GoodsHistory goodsHistoryRemoved = goodsHistoryService.converTGoodsHist(goods, OperateType.Down.getPhrase());
+            GoodsHistory goodsHistoryRemoved = goodsHistoryService.converTGoodsHist(goods, OperateType.Down.getPhrase(),false);
             histories.add(goodsHistoryRemoved);
         }
 
         goods.setStatus(Status.GOODS_DELETE.value());
         //删除库存信息
-        GoodsHistory goodsHistoryDelete = goodsHistoryService.converTGoodsHist(goods, OperateType.DELETE.getPhrase());
+        GoodsHistory goodsHistoryDelete = goodsHistoryService.converTGoodsHist(goods, OperateType.DELETE.getPhrase(),false);
         histories.add(goodsHistoryDelete);
         goodsHistoryService.save(histories);
 
         goodsDao.deleteByBatchCode(goods.getBatchCode());
-        if(goods.getProductid() != null) {
+        if (goods.getProductid() != null) {
             Product product = productDao.findOne(goods.getProductid());
-            if(product != null) {
+            if (product != null) {
                 ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
                 if (productPrivate == null) {
                     productPrivate = new ProductPrivate();
@@ -2963,6 +3226,28 @@ public class GoodsServiceImpl implements GoodsService {
         return goods;
     }
 
+    /**
+     * 根据批次号查询是否有订单
+     * @param batchCode
+     * @return
+     */
+    private boolean validateExistOrder(String batchCode) {
+        boolean isExistOrder = false;
+        List<OrderDetail> orderList = orderDetailService.findOrderDetailByBatchCode(batchCode);
+        String codes = OrderStatus.UNAVAILABLE.getCodes() + "-" + Status.TOBECONFIRMED.value();
+        for (OrderDetail detail : orderList) {
+            Order order = detail.getOrder();
+            int status = order.getStatus() == null ? detail.getStatus() : order.getStatus();
+            if (codes.indexOf(String.valueOf(status)) < 0) {
+                if (StringUtils.isEmpty(order.getOrderids())) {
+                    isExistOrder = true;
+                    break;
+                }
+            }
+        }
+        return isExistOrder;
+    }
+
     @Override
     public List<Goods> deleteGoods(List<Goods> goodses) {
         List<Order> orders = new ArrayList<>();
@@ -2976,19 +3261,7 @@ public class GoodsServiceImpl implements GoodsService {
             if (goods == null) {
                 return null;
             }
-            boolean isExistOrder = false;
-            List<OrderDetail> orderList = orderDetailService.findOrderDetailByBatchCode(goods.getBatchCode());
-            String codes = OrderStatus.UNAVAILABLE.getCodes() + "-" + Status.TOBECONFIRMED.value();
-            for (OrderDetail detail : orderList) {
-                Order order = detail.getOrder();
-                int status = order.getStatus() == null ? detail.getStatus() : order.getStatus();
-                if (codes.indexOf(String.valueOf(status)) < 0) {
-                    if (StringUtils.isEmpty(order.getOrderids())) {
-                        isExistOrder = true;
-                        break;
-                    }
-                }
-            }
+            boolean isExistOrder = validateExistOrder(goods.getBatchCode());
             if (isExistOrder) {
                 throw new IllegalOperatorException("存在商品已经被购买了,不能删除");
             }
@@ -3003,12 +3276,12 @@ public class GoodsServiceImpl implements GoodsService {
 
             if (goods.getStatus().equals(Status.AVAILABLE.value()) || goods.getStatus().equals(Status.UNAVAILABLE.value())) {
                 goods.setStatus(Status.REMOVED.value());
-                GoodsHistory goodsHistoryRemoved = goodsHistoryService.converTGoodsHist(goods, OperateType.Down.getPhrase());
+                GoodsHistory goodsHistoryRemoved = goodsHistoryService.converTGoodsHist(goods, OperateType.Down.getPhrase(),false);
                 histories.add(goodsHistoryRemoved);
             }
             //删除库存信息
             goods.setStatus(Status.GOODS_DELETE.value());
-            GoodsHistory goodsHistoryDelete = goodsHistoryService.converTGoodsHist(goods, OperateType.DELETE.getPhrase());
+            GoodsHistory goodsHistoryDelete = goodsHistoryService.converTGoodsHist(goods, OperateType.DELETE.getPhrase(),false);
             histories.add(goodsHistoryDelete);
             goodses1.add(goods);
             gids.add(goods.getId());
@@ -3246,7 +3519,7 @@ public class GoodsServiceImpl implements GoodsService {
                 }
                 if (isModify) {
                     goods.setQtyPrice(FastjsonUtils.toJson(list));
-                    GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, OperateType.MODIFY_PRICE.getPhrase());
+                    GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, OperateType.MODIFY_PRICE.getPhrase(),false);
                     histories.add(goodsHistory);
                     goodses.add(goods);
                 }

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

@@ -350,8 +350,9 @@ public class ProductServiceImpl implements ProductService {
                 if (CollectionUtils.isEmpty(p)) {
                     ProductPerson productPerson = new ProductPerson();
                     productPerson.setUserUU(useruu);
+                    productPerson.setEnuu(SystemSession.getUser().getEnterprise().getUu());
                     productPerson.setProductId(prId);
-                    productPerson.setTime(new Date(System.currentTimeMillis()));
+                    productPerson.setTime(new Date());
                     productPersonDao.save(productPerson);
                 }
             }
@@ -360,12 +361,12 @@ public class ProductServiceImpl implements ProductService {
     }
 
     @Override
-    public boolean setProductReplacesByPerson(List<ProductReplace> productReplaceList) {
-        if (CollectionUtils.isEmpty(productReplaceList)) {
+    public boolean setProductReplacesByPerson(Long productId, List<ProductReplace> productReplaceList) {
+        if (productId == null) {
             return false;
         }
         Date date = new Date(System.currentTimeMillis());
-        List<ProductReplace> productReplacesOld = productReplaceDao.findByUserUUAndProductId(SystemSession.getUser().getUserUU(),productReplaceList.get(0).getProductId());
+        List<ProductReplace> productReplacesOld = productReplaceDao.findByUserUUAndProductId(SystemSession.getUser().getUserUU(), productId);
         productReplaceDao.delete(productReplacesOld);
         for (ProductReplace productReplace : productReplaceList) {
             productReplace.setUserUU(SystemSession.getUser().getUserUU());
@@ -778,7 +779,7 @@ public class ProductServiceImpl implements ProductService {
                 }else {
                     goods.setStatus(Status.AVAILABLE.value());
                 }
-                GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.Modifying.getPhrase());
+                GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.Modifying.getPhrase(),false);
                 goodsHistoryDao.save(goodsHistory);
                 goodsDao.save(goods);
 
@@ -1069,7 +1070,7 @@ public class ProductServiceImpl implements ProductService {
         for (Long id : idArray) {
             Goods goods = goodsDao.findOne(id);
             goodsHist = goodsHistoryService.converTGoodsHist(goods,
-                    GoodsHistory.OperateType.DELETE_FOR_REPEAT.getPhrase());
+                    GoodsHistory.OperateType.DELETE_FOR_REPEAT.getPhrase(),false);
             goodsHist.setMessage(goodsHist.getMessage() + "匹配后因为重复删除");
             goodsHistoryList.add(goodsHist);
             goodsDao.delete(id);
@@ -1135,7 +1136,7 @@ public class ProductServiceImpl implements ProductService {
             for (Goods goods : goodsList) {
                 updateGoodsInfo(goods, product);
                 GoodsHistory goodsHist = goodsHistoryService.converTGoodsHist(goods,
-                        GoodsHistory.OperateType.Modifying.getPhrase());
+                        GoodsHistory.OperateType.Modifying.getPhrase(),false);
                 //更新购物车信息
                 List<Cart> cartList = cartDao.findCartByBatch(goods.getBatchCode());
                 updateCartsInfo(goods, cartList);

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

@@ -128,7 +128,7 @@ public class ProductStandardPutOnInfoServiceImpl implements ProductStandardPutOn
                         goodsPrices.get(goodsPrices.size() - 1).setEnd(goods.getReserve());
                         goods.setQtyPrice(FastjsonUtils.toJson(goodsPrices));
                     }
-                    GoodsHistory history = goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.AddReserve.getPhrase());
+                    GoodsHistory history = goodsHistoryService.converTGoodsHist(goods, GoodsHistory.OperateType.AddReserve.getPhrase(),false);
                     listHist.add(history);
                     list.add(goods);
                     uuids.add(goods.getUuid());

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

@@ -468,7 +468,7 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 					prices2.add(price);
 				}
 			} else if (j == prices1.size() - 1) {
-				price.setEnd(DoubleConstant.maxReserve);
+				price.setEnd(DoubleConstant.maxMinPackageQty);
 				if (prices1.size() == 1) {
 					price.setStart(DoubleConstant.minReserve);
 				} else {
@@ -574,7 +574,7 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 				priceMaxMinPrice[1] = rmbMinPackPrice;
 			}
 		}
-		qtyPrice.setEnd(DoubleConstant.maxReserve);
+		qtyPrice.setEnd(DoubleConstant.maxMinPackageQty);
 		return qtyPrice;
 	}
 
@@ -614,7 +614,7 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 			aProduct.setReserveByExcel(reserveValue);
 
 			Cell productCell = row.getCell(UploadConstant.PRODUCE_DATE);
-			if (productCell.getCellType() == 0) {
+			if (productCell != null && productCell.getCellType() == 0) {
 				if (HSSFDateUtil.isCellDateFormatted(productCell)) {
 					SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 					String productStr = sdf.format(productCell.getDateCellValue());
@@ -704,7 +704,7 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 		} else {
 			Double cellPrice = Double.valueOf(firstValue.toString());
 			if (validatePrice(cellPrice)) {
-				GoodsQtyPrice qtyPrice = getOneQtyPrice(aProduct.getMinBuyQty(), DoubleConstant.maxReserve,
+				GoodsQtyPrice qtyPrice = getOneQtyPrice(aProduct.getMinBuyQty(), DoubleConstant.maxMinPackageQty,
 						cellPrice, aProduct.getRmbTaxRate(), aProduct.getCurrency());
 				qtyPriceList.add(qtyPrice);
 			} else {
@@ -756,7 +756,7 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 		if (start == null || lastEnd == null) {
 			return false;
 		}
-		return start.compareTo(lastEnd) > 0 && start.compareTo(DoubleConstant.maxReserve) <= 0;
+		return start.compareTo(lastEnd) > 0 && start.compareTo(DoubleConstant.maxMinPackageQty) <= 0;
 	}
 
 	/**
@@ -775,7 +775,7 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 			Double price = Double.valueOf(priceValue.toString());
 			Double start = Double.valueOf(startValue.toString());
 			if (validatePrice(price) && validateStartNumber(start, aProduct.getMinBuyQty())) {
-				GoodsQtyPrice qtyPrice = getOneQtyPrice(Double.valueOf(startValue.toString()), DoubleConstant.maxReserve,
+				GoodsQtyPrice qtyPrice = getOneQtyPrice(Double.valueOf(startValue.toString()), DoubleConstant.maxMinPackageQty,
 						price, aProduct.getRmbTaxRate(), aProduct.getCurrency());
 				qtyPriceList.add(qtyPrice);
 				qtyPriceList.get(0).setEnd(Double.valueOf(startValue.toString()) - 1);
@@ -805,7 +805,7 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 			Double start = Double.valueOf(startValue.toString());
 			Double lastEnd = qtyPriceList.get(qtyPriceList.size() - 1).getStart();
 			if (validatePrice(price) && validateStartNumber(start, lastEnd)) {
-				GoodsQtyPrice qtyPrice = getOneQtyPrice(start, DoubleConstant.maxReserve,
+				GoodsQtyPrice qtyPrice = getOneQtyPrice(start, DoubleConstant.maxMinPackageQty,
 						price, aProduct.getRmbTaxRate(), aProduct.getCurrency());
 				qtyPriceList.get(qtyPriceList.size() - 1).setEnd(start - 1);
 				qtyPriceList.add(qtyPrice);

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

@@ -0,0 +1,40 @@
+package com.uas.platform.b2c.prod.product.brand.api;
+
+import com.uas.platform.b2c.prod.product.brand.modal.VendorList;
+import com.uas.platform.b2c.prod.product.brand.service.VendorListService;
+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.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Created by wangyc on 2017/11/27.
+ *
+ * @version 2017/11/27 17:38 wangyc
+ */
+@RestController("api.VendorListController")
+@RequestMapping("api/produce/vendorlist")
+public class VendorListController {
+
+    private final VendorListService vendorListService;
+
+    @Autowired
+    public VendorListController(VendorListService vendorListService) {
+        this.vendorListService = vendorListService;
+    }
+
+    /**
+     * 通过品牌uuid获取供应商列表
+     * @param uuid
+     * @return
+     */
+    @RequestMapping(value = "/{uuid}", method = RequestMethod.GET)
+    public Page<VendorList> findByBrand(@PathVariable("uuid") String uuid, PageParams params) {
+        PageInfo pageInfo = new PageInfo(params);
+        return vendorListService.findByBrandAPI(pageInfo, uuid);
+    }
+}

+ 40 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/controller/VendorListController.java

@@ -0,0 +1,40 @@
+package com.uas.platform.b2c.prod.product.brand.controller;
+
+import com.uas.platform.b2c.prod.product.brand.modal.VendorList;
+import com.uas.platform.b2c.prod.product.brand.service.VendorListService;
+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.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Created by wangyc on 2017/11/27.
+ *
+ * @version 2017/11/27 17:38 wangyc
+ */
+@RestController
+@RequestMapping("produce/vendorlist")
+public class VendorListController {
+
+    private final VendorListService vendorListService;
+
+    @Autowired
+    public VendorListController(VendorListService vendorListService) {
+        this.vendorListService = vendorListService;
+    }
+
+    /**
+     * 通过品牌uuid获取供应商列表
+     * @param uuid
+     * @return
+     */
+    @RequestMapping(value = "/{uuid}", method = RequestMethod.GET)
+    public Page<VendorList> findByBrand(@PathVariable("uuid") String uuid, PageParams params) {
+        PageInfo pageInfo = new PageInfo(params);
+        return vendorListService.findByBrand(pageInfo, uuid);
+    }
+}

+ 164 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/controller/VendorListSubmitController.java

@@ -0,0 +1,164 @@
+package com.uas.platform.b2c.prod.product.brand.controller;
+
+import com.uas.platform.b2c.common.base.model.FileUpload;
+import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
+import com.uas.platform.b2c.core.support.view.JxlsExcelView;
+import com.uas.platform.b2c.prod.product.brand.modal.VendorListSubmit;
+import com.uas.platform.b2c.prod.product.brand.service.VendorListSubmitService;
+import com.uas.platform.core.exception.IllegalOperatorException;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by wangyc on 2017/11/27.
+ *
+ * @version 2017/11/27 10:35 wangyc
+ */
+@RestController
+@RequestMapping("/produce/vendorSubmit")
+public class VendorListSubmitController {
+
+    private final VendorListSubmitService vendorListSubmitService;
+
+    private static final UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+    @Autowired
+    public VendorListSubmitController(VendorListSubmitService vendorListSubmitService) {
+        this.vendorListSubmitService = vendorListSubmitService;
+    }
+
+    /**
+     * 获取供应商申请
+     * @param id
+     * @return
+     */
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    public VendorListSubmit getOne(@PathVariable("id") Long id) {
+        return vendorListSubmitService.findOne(id);
+    }
+
+    /**
+     * 新增供应商申请
+     * @param vendorListSubmit
+     * @return
+     */
+    @RequestMapping(method = RequestMethod.POST)
+    public VendorListSubmit save(@RequestBody VendorListSubmit vendorListSubmit) {
+        logger.log("品牌-供应商申请", "新增品牌供应商申请", "供应商名称:" + vendorListSubmit.getVendorName());
+        return vendorListSubmitService.save(vendorListSubmit);
+    }
+
+    /**
+     * 删除供应商申请
+     * @param id 供应商id
+     * @return
+     */
+    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
+    public VendorListSubmit delete(@PathVariable("id") Long id) {
+        logger.log("品牌-供应商申请", "删除品牌供应商申请", "供应商id:" + id);
+        return vendorListSubmitService.delete(id);
+    }
+
+    /**
+     * 更新供应商申请
+     * @param vendorListSubmit
+     * @return
+     */
+    @RequestMapping(value = "/update", method = RequestMethod.POST)
+    public VendorListSubmit update(@RequestBody VendorListSubmit vendorListSubmit) {
+        logger.log("品牌-供应商申请", "更新品牌供应商申请", "供应商名称:" + vendorListSubmit.getVendorName());
+        return vendorListSubmitService.update(vendorListSubmit);
+    }
+
+    /**
+     * 审核通过申请
+     * @param vendorListSubmit
+     * @return
+     */
+    @RequestMapping(value = "/audit", method = RequestMethod.POST)
+    public VendorListSubmit audit(@RequestBody VendorListSubmit vendorListSubmit) {
+        logger.log("品牌-供应商申请", "审核通过品牌供应商申请", "供应商名称:" + vendorListSubmit.getVendorName());
+        return vendorListSubmitService.audit(vendorListSubmit);
+    }
+
+    /**
+     * 审核不通过申请
+     * @param id
+     * @return
+     */
+    @RequestMapping(value = "/unaudit/{id}", method = RequestMethod.POST)
+    public VendorListSubmit unaudit(@PathVariable Long id) {
+        logger.log("品牌-供应商申请", "审核不通过品牌供应商申请", "供应商id:" + id);
+        return vendorListSubmitService.unaudit(id);
+    }
+
+    /**
+     * 获取批量导入供应商模板
+     *
+     * @return model and view
+     */
+    @RequestMapping(value = "/template", method = RequestMethod.GET)
+    public ModelAndView downloadTemplate() {
+        ModelAndView modelAndView = new ModelAndView();
+        modelAndView.setView(new JxlsExcelView("classpath:jxls-tpl/product/brand-vendor", "优软商城品牌供应商上传模板"));
+
+        logger.log("品牌-供应商申请", "下载批量导入供应商模板");
+        return modelAndView;
+    }
+
+    /**
+     * 批量导入供应商申请
+     * @param uploadItem
+     * @return
+     */
+    @RequestMapping(value = "/upload", method = RequestMethod.POST)
+    public List<VendorListSubmit> uploadVendorList(FileUpload uploadItem) {
+        logger.log("品牌-供应商申请", "批量导入供应商");
+        String fileName = uploadItem.getFile().getOriginalFilename();
+        String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
+        InputStream is = null;
+        Workbook workbook = null;
+        List<VendorListSubmit> vendorListSubmits = new ArrayList<VendorListSubmit>();
+
+        try {
+            is = uploadItem.getFile().getInputStream();
+            if ("xls".equals(suffix)) {
+                workbook = new HSSFWorkbook(is);
+            } else if ("xlsx".equals(suffix)) {
+                workbook = new XSSFWorkbook(is);
+            } else {
+                throw new IllegalOperatorException("文件格不正确,请上传.xls或.xlsx的文件");
+            }
+            vendorListSubmits = vendorListSubmitService.upload(workbook);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return vendorListSubmits;
+    }
+
+    /**
+     * 分页获取品牌供应商申请
+     * @param params
+     * @param keywords
+     * @param status
+     * @return
+     */
+    @RequestMapping(value = "/page", method = RequestMethod.GET)
+    public Page<VendorListSubmit> getPageInfo(PageParams params, String keywords, Integer status) {
+        PageInfo pageInfo = new PageInfo(params);
+        return vendorListSubmitService.findByPage(pageInfo, keywords, status);
+    }
+}

+ 48 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/dao/VendorListDao.java

@@ -0,0 +1,48 @@
+package com.uas.platform.b2c.prod.product.brand.dao;
+
+import com.uas.platform.b2c.prod.product.brand.modal.VendorList;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * Created by wangyc on 2017/11/27.
+ *
+ * @version 2017/11/27 11:12 wangyc
+ */
+@Repository
+public interface VendorListDao extends JpaSpecificationExecutor<VendorList>, JpaRepository<VendorList, Long>{
+
+    /**
+     * 通过品牌uuid获取品牌供应商信息
+     * @param uuid
+     * @return
+     */
+    List<VendorList> findByBranduuid(String uuid);
+
+    /**
+     * 通过品牌uuid和供应商名称获取品牌供应商信息
+     * @param uuid
+     * @param vendorName
+     * @return
+     */
+    List<VendorList> findByBranduuidAndVendorName(String uuid, String vendorName);
+
+    /**
+     * 通过品牌uuid和供应商营业执照号获取品牌供应商信息
+     * @param uuid
+     * @param license
+     * @return
+     */
+    List<VendorList> findByBranduuidAndLicense(String uuid, String license);
+
+    /**
+     * 通过品牌uuid和店铺id获取品牌供应商信息
+     * @param branduuid
+     * @param storeuuid
+     * @return
+     */
+    VendorList findByBranduuidAndStoreuuid(String branduuid, String storeuuid);
+}

+ 36 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/dao/VendorListSubmitDao.java

@@ -0,0 +1,36 @@
+package com.uas.platform.b2c.prod.product.brand.dao;
+
+import com.uas.platform.b2c.prod.product.brand.modal.VendorListSubmit;
+import java.util.List;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Created by wangyc on 2017/11/27.
+ *
+ * @version 2017/11/27 11:32 wangyc
+ */
+@Repository
+public interface VendorListSubmitDao extends JpaSpecificationExecutor<VendorListSubmit>, JpaRepository<VendorListSubmit, Long> {
+
+    /**
+     * 根据供应商id和申请状态获取申请信息
+     * @param vendorId
+     * @param status
+     * @return
+     */
+    List<VendorListSubmit> findByVendoridAndStatus(Long vendorId, Integer status);
+
+    /**
+     * 根据品牌uuid和申请状态获取新增供应商申请信息
+     * @param branduuid 品牌uuid
+     * @param status 状态
+     * @return
+     */
+    @Query("select v from VendorListSubmit v where v.vendorid is null and v.branduuid =:branduuid and v.status =:status")
+    List<VendorListSubmit> findByBranduuidAndStatusAndVendoridIsNull(@Param("branduuid") String branduuid, @Param("status") Integer status);
+
+}

+ 263 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/modal/VendorList.java

@@ -0,0 +1,263 @@
+package com.uas.platform.b2c.prod.product.brand.modal;
+
+import com.uas.platform.b2c.prod.store.model.StoreIn;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 品牌-供应商
+ * Created by wangyc on 2017/11/13.
+ *
+ * @version 2017/11/13 17:06 wangyc
+ */
+@Entity
+@Table(name = "product$vendorlist")
+public class VendorList implements Serializable {
+
+    private static final long serialVersionUID = 4427517228899698468L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    @Column(name = "vl_id")
+    private Long id;
+
+    /**
+     * 供应商名称
+     */
+    @Column(name = "vl_vendorname")
+    private String vendorName;
+
+    /**
+     * 供应商图片
+     */
+    @Column(name = "vl_img")
+    private String img;
+
+    /**
+     * 营业执照号
+     */
+    @Column(name = "vl_license")
+    private String license;
+
+    /**
+     * 供应商地区(以“,”分割,省市县)
+     */
+    @Column(name = "vl_area")
+    private String area;
+
+    /**
+     * 供应商详细地址
+     */
+    @Column(name = "vl_detailaddress")
+    private String detailAddress;
+
+    /**
+     * 供应商电话
+     */
+    @Column(name = "vl_tel")
+    private String tel;
+
+    /**
+     * 传真
+     */
+    @Column(name = "vl_fax")
+    private String fax;
+
+    /**
+     * 供应商网址
+     */
+    @Column(name = "vl_website")
+    private String website;
+
+    /**
+     * 对应商城店铺uuid
+     */
+    @Column(name = "vl_storeuuid")
+    private String storeuuid;
+
+    /**
+     * 店铺信息
+     */
+    @Transient
+    private StoreIn storeIn;
+
+    /**
+     * 供应商邮箱
+     */
+    @Column(name = "vl_email")
+    private String email;
+
+    /**
+     * 更新时间
+     */
+    @Column(name = "vl_updatetime")
+    private Date updatetime;
+
+    /**
+     * 品牌uuid
+     */
+    @Column(name = "vl_branduuid")
+    private String branduuid;
+
+    /**
+     * 是否申请中
+     * 1,是
+     * 0,否
+     */
+    @Column(name = "vl_issubmited")
+    private Short isSubmited;
+
+    /**
+     * 申请时间
+     */
+    @Column(name = "vl_submitTime")
+    private Date submitTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getVendorName() {
+        return vendorName;
+    }
+
+    public void setVendorName(String vendorName) {
+        this.vendorName = vendorName;
+    }
+
+    public String getImg() {
+        return img;
+    }
+
+    public void setImg(String img) {
+        this.img = img;
+    }
+
+    public String getLicense() {
+        return license;
+    }
+
+    public void setLicense(String license) {
+        this.license = license;
+    }
+
+    public String getArea() {
+        return area;
+    }
+
+    public void setArea(String area) {
+        this.area = area;
+    }
+
+    public String getDetailAddress() {
+        return detailAddress;
+    }
+
+    public void setDetailAddress(String detailAddress) {
+        this.detailAddress = detailAddress;
+    }
+
+    public String getTel() {
+        return tel;
+    }
+
+    public void setTel(String tel) {
+        this.tel = tel;
+    }
+
+    public String getFax() {
+        return fax;
+    }
+
+    public void setFax(String fax) {
+        this.fax = fax;
+    }
+
+    public String getWebsite() {
+        return website;
+    }
+
+    public void setWebsite(String website) {
+        this.website = website;
+    }
+
+    public String getStoreuuid() {
+        return storeuuid;
+    }
+
+    public void setStoreuuid(String storeuuid) {
+        this.storeuuid = storeuuid;
+    }
+
+    public StoreIn getStoreIn() {
+        return storeIn;
+    }
+
+    public void setStoreIn(StoreIn storeIn) {
+        this.storeIn = storeIn;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    public String getBranduuid() {
+        return branduuid;
+    }
+
+    public void setBranduuid(String branduuid) {
+        this.branduuid = branduuid;
+    }
+
+    public Short getIsSubmited() {
+        return isSubmited;
+    }
+
+    public void setIsSubmited(Short isSubmited) {
+        this.isSubmited = isSubmited;
+    }
+
+    public Date getSubmitTime() {
+        return submitTime;
+    }
+
+    public void setSubmitTime(Date submitTime) {
+        this.submitTime = submitTime;
+    }
+
+    public VendorList() {
+    }
+
+    public VendorList(VendorListSubmit vendorListSubmit) {
+        this.area = vendorListSubmit.getArea();
+        this.branduuid = vendorListSubmit.getBranduuid();
+        this.detailAddress = vendorListSubmit.getDetailAddress();
+        this.email = vendorListSubmit.getEmail();
+        this.license = vendorListSubmit.getLicense();
+        this.storeuuid = vendorListSubmit.getStoreuuid();
+        this.tel = vendorListSubmit.getTel();
+        this.fax = vendorListSubmit.getFax();
+        this.updatetime = new Date();
+        this.vendorName = vendorListSubmit.getVendorName();
+        this.website = vendorListSubmit.getWebsite();
+        this.img = vendorListSubmit.getImg();
+    }
+}

+ 362 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/modal/VendorListSubmit.java

@@ -0,0 +1,362 @@
+package com.uas.platform.b2c.prod.product.brand.modal;
+
+import com.uas.platform.b2c.common.account.model.UserBaseInfo;
+import com.uas.platform.b2c.prod.store.model.StoreIn;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 品牌-供应商申请
+ * Created by wangyc on 2017/11/13.
+ *
+ * @version 2017/11/13 17:24 wangyc
+ */
+@Entity
+@Table(name = "product$vendorlist_submit")
+public class VendorListSubmit implements Serializable {
+
+    private static final long serialVersionUID = 5300583886223133147L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    @Column(name = "vls_id")
+    private Long id;
+
+    /**
+     * 供应商名称
+     */
+    @Column(name = "vls_vendorname")
+    private String vendorName;
+
+    /**
+     * 供应商图片
+     */
+    @Column(name = "vls_img")
+    private String img;
+
+    /**
+     * 营业执照号
+     */
+    @Column(name = "vls_license")
+    private String license;
+
+    /**
+     * 供应商地区(以“,”分割,省市县)
+     */
+    @Column(name = "vls_area")
+    private String area;
+
+    /**
+     * 供应商详细地址
+     */
+    @Column(name = "vls_detailaddress")
+    private String detailAddress;
+
+    /**
+     * 供应商电话
+     */
+    @Column(name = "vls_tel")
+    private String tel;
+
+    /**
+     * 传真
+     */
+    @Column(name = "vls_fax")
+    private String fax;
+
+    /**
+     * 供应商网址
+     */
+    @Column(name = "vls_website")
+    private String website;
+
+    /**
+     * 对应商城店铺
+     */
+    @Column(name = "vls_storeuuid")
+    private String storeuuid;
+
+    /**
+     * 店铺信息
+     */
+    @Transient
+    private StoreIn storeIn;
+
+    /**
+     * 供应商邮箱
+     */
+    @Column(name = "vls_email")
+    private String email;
+
+    /**
+     * 更新时间
+     */
+    @Column(name = "vls_updatetime")
+    private Date updatetime;
+
+    /**
+     * 审核时间
+     */
+    @Column(name = "vls_audittime")
+    private Date audittime;
+
+    /**
+     * 品牌uuid
+     */
+    @Column(name = "vls_branduuid")
+    private String branduuid;
+
+    @Transient
+    private BrandInfo brand;
+
+    /**
+     * 审核状态
+     * SUBMITTED(101, "已提交"),
+     * AUDITED(102, "已审核"),
+     * NOTALLOW(103, "未通过"),
+     */
+    @Column(name = "vls_status")
+    private Integer status;
+
+    /**
+     * 申请操作类型
+     * DELETED(112, "删除")
+     * PRELIMINARY(818, "新增")
+     * ACTIVE(815, "更新")
+     */
+    @Column(name = "vls_type")
+    private Integer type;
+
+    /**
+     * 来源品牌--供应商id,以判断是否更新
+     */
+    @Column(name = "vls_vendorid")
+    private Long vendorid;
+
+    /**
+     * 上次更新人uu
+     */
+    @Column(name = "vls_updateruu")
+    private Long updateruu;
+
+    /**
+     * 上次更新人
+     */
+    @Transient
+    private UserBaseInfo updater;
+
+    /**
+     * 审核人uu
+     */
+    @Column(name = "vls_auditeruu")
+    private Long auditeruu;
+
+    /**
+     * 审核人
+     */
+    @Transient
+    private UserBaseInfo auditer;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getVendorName() {
+        return vendorName;
+    }
+
+    public void setVendorName(String vendorName) {
+        this.vendorName = vendorName;
+    }
+
+    public String getImg() {
+        return img;
+    }
+
+    public void setImg(String img) {
+        this.img = img;
+    }
+
+    public String getLicense() {
+        return license;
+    }
+
+    public void setLicense(String license) {
+        this.license = license;
+    }
+
+    public String getArea() {
+        return area;
+    }
+
+    public void setArea(String area) {
+        this.area = area;
+    }
+
+    public String getDetailAddress() {
+        return detailAddress;
+    }
+
+    public void setDetailAddress(String detailAddress) {
+        this.detailAddress = detailAddress;
+    }
+
+    public String getTel() {
+        return tel;
+    }
+
+    public void setTel(String tel) {
+        this.tel = tel;
+    }
+
+    public String getFax() {
+        return fax;
+    }
+
+    public void setFax(String fax) {
+        this.fax = fax;
+    }
+
+    public String getWebsite() {
+        return website;
+    }
+
+    public void setWebsite(String website) {
+        this.website = website;
+    }
+
+    public String getStoreuuid() {
+        return storeuuid;
+    }
+
+    public void setStoreuuid(String storeuuid) {
+        this.storeuuid = storeuuid;
+    }
+
+    public StoreIn getStoreIn() {
+        return storeIn;
+    }
+
+    public void setStoreIn(StoreIn storeIn) {
+        this.storeIn = storeIn;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    public Date getAudittime() {
+        return audittime;
+    }
+
+    public void setAudittime(Date audittime) {
+        this.audittime = audittime;
+    }
+
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    public String getBranduuid() {
+        return branduuid;
+    }
+
+    public void setBranduuid(String branduuid) {
+        this.branduuid = branduuid;
+    }
+
+    public BrandInfo getBrand() {
+        return brand;
+    }
+
+    public void setBrand(BrandInfo brand) {
+        this.brand = brand;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public Long getVendorid() {
+        return vendorid;
+    }
+
+    public void setVendorid(Long vendorid) {
+        this.vendorid = vendorid;
+    }
+
+    public Long getUpdateruu() {
+        return updateruu;
+    }
+
+    public void setUpdateruu(Long updateruu) {
+        this.updateruu = updateruu;
+    }
+
+    public UserBaseInfo getUpdater() {
+        return updater;
+    }
+
+    public void setUpdater(UserBaseInfo updater) {
+        this.updater = updater;
+    }
+
+    public Long getAuditeruu() {
+        return auditeruu;
+    }
+
+    public void setAuditeruu(Long auditeruu) {
+        this.auditeruu = auditeruu;
+    }
+
+    public UserBaseInfo getAuditer() {
+        return auditer;
+    }
+
+    public void setAuditer(UserBaseInfo auditer) {
+        this.auditer = auditer;
+    }
+
+    public VendorListSubmit() {
+    }
+
+    public VendorListSubmit(VendorList vendorList) {
+        this.vendorName = vendorList.getVendorName();
+        this.img = vendorList.getImg();
+        this.license = vendorList.getLicense();
+        this.area = vendorList.getArea();
+        this.detailAddress = vendorList.getDetailAddress();
+        this.tel = vendorList.getTel();
+        this.fax = vendorList.getFax();
+        this.website = vendorList.getWebsite();
+        this.storeuuid = vendorList.getStoreuuid();
+        this.email = vendorList.getEmail();
+        this.branduuid = vendorList.getBranduuid();
+    }
+}

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

@@ -0,0 +1,28 @@
+package com.uas.platform.b2c.prod.product.brand.service;
+
+import com.uas.platform.b2c.prod.product.brand.modal.VendorList;
+import com.uas.platform.core.model.PageInfo;
+import org.springframework.data.domain.Page;
+
+/**
+ * Created by wangyc on 2017/11/27.
+ *
+ * @version 2017/11/27 17:39 wangyc
+ */
+public interface VendorListService {
+
+    /**
+     * 通过品牌uuid获取供应商列表(公共接口调用)
+     * @param uuid
+     * @return
+     */
+    Page<VendorList> findByBrandAPI(PageInfo pageInfo, String uuid);
+
+    /**
+     * 通过品牌uuid获取供应商列表(管理后台调用)
+     * @param pageInfo
+     * @param uuid
+     * @return
+     */
+    Page<VendorList> findByBrand(PageInfo pageInfo, String uuid);
+}

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

@@ -0,0 +1,75 @@
+package com.uas.platform.b2c.prod.product.brand.service;
+
+import com.uas.platform.b2c.prod.product.brand.modal.VendorListSubmit;
+import com.uas.platform.core.model.PageInfo;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.data.domain.Page;
+
+import java.util.List;
+
+/**
+ * Created by wangyc on 2017/11/27.
+ *
+ * @version 2017/11/27 10:38 wangyc
+ */
+public interface VendorListSubmitService {
+
+    /**
+     * 获取供应商申请
+     * @param id
+     * @return
+     */
+    VendorListSubmit findOne(Long id);
+
+    /**
+     * 新增供应商
+     * @param vendorListSubmit
+     * @return
+     */
+    VendorListSubmit save(VendorListSubmit vendorListSubmit);
+
+    /**
+     * 删除供应商申请
+     * @param id 供应商id
+     * @return
+     */
+    VendorListSubmit delete(Long id);
+
+    /**
+     * 更新供应商
+     * @param vendorListSubmit
+     * @return
+     */
+    VendorListSubmit update(VendorListSubmit vendorListSubmit);
+
+    /**
+     * 审核通过申请
+     * @param vendorListSubmit
+     * @return
+     */
+    VendorListSubmit audit(VendorListSubmit vendorListSubmit);
+
+    /**
+     * 审核不通过申请
+     * @param id
+     * @return
+     */
+    VendorListSubmit unaudit(Long id);
+
+    /**
+     * 批量导入供应商申请
+     * @param workbook
+     * @return
+     */
+    List<VendorListSubmit> upload(Workbook workbook);
+
+    /**
+     * 分页获取供应商申请
+     * @param pageInfo
+     * @param keywords
+     * @param status
+     * @return
+     */
+    Page<VendorListSubmit> findByPage(PageInfo pageInfo, String keywords, Integer status);
+
+}

+ 157 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/VendorListServiceImpl.java

@@ -0,0 +1,157 @@
+package com.uas.platform.b2c.prod.product.brand.service.impl;
+
+import com.uas.platform.b2c.core.constant.Status;
+import com.uas.platform.b2c.prod.product.brand.dao.BrandDao;
+import com.uas.platform.b2c.prod.product.brand.dao.VendorListDao;
+import com.uas.platform.b2c.prod.product.brand.dao.VendorListSubmitDao;
+import com.uas.platform.b2c.prod.product.brand.modal.Brand;
+import com.uas.platform.b2c.prod.product.brand.modal.VendorList;
+import com.uas.platform.b2c.prod.product.brand.modal.VendorListSubmit;
+import com.uas.platform.b2c.prod.product.brand.service.VendorListService;
+import com.uas.platform.b2c.prod.store.dao.StoreInDao;
+import com.uas.platform.b2c.prod.store.model.StoreIn;
+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.persistence.criteria.CriterionExpression;
+import com.uas.platform.core.persistence.criteria.SimpleExpression;
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+/**
+ * Created by wangyc on 2017/11/27.
+ *
+ * @version 2017/11/27 17:39 wangyc
+ */
+@Service
+public class VendorListServiceImpl implements VendorListService{
+
+    private final VendorListDao vendorListDao;
+
+    private final VendorListSubmitDao vendorListSubmitDao;
+
+    private final BrandDao brandDao;
+
+    private final StoreInDao storeInDao;
+
+    @Autowired
+    public VendorListServiceImpl (VendorListDao vendorListDao, VendorListSubmitDao vendorListSubmitDao, BrandDao brandDao, StoreInDao storeInDao) {
+        this.vendorListDao = vendorListDao;
+        this.vendorListSubmitDao = vendorListSubmitDao;
+        this.brandDao = brandDao;
+        this.storeInDao = storeInDao;
+    }
+
+    @Override
+    public Page<VendorList> findByBrandAPI(final PageInfo pageInfo, String uuid) {
+        Brand brand = brandDao.findByUuid(uuid);
+
+        if (brand == null)
+            throw new IllegalOperatorException("此品牌为空,请重新确认品牌信息");
+
+        // 根据品牌信息获取
+        if (StringUtils.hasText(uuid)) {
+            SimpleExpression branduuid = new SimpleExpression("branduuid", uuid, CriterionExpression.Operator.EQ);
+            pageInfo.expression(branduuid);
+        }
+
+        return vendorListDao.findAll(new Specification<VendorList>() {
+            public Predicate toPredicate(Root<VendorList> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+                query.where(pageInfo.getPredicates(root, query, builder));
+                return null;
+            }
+        }, pageInfo);
+    }
+
+    @Override
+    public Page<VendorList> findByBrand(final PageInfo pageInfo, String uuid) {
+        Brand brand = brandDao.findByUuid(uuid);
+        if (brand == null)
+            throw new IllegalOperatorException("此品牌为空,请重新确认品牌信息");
+
+        // 根据品牌信息获取
+        if (StringUtils.hasText(uuid)) {
+            SimpleExpression branduuid = new SimpleExpression("branduuid", uuid, CriterionExpression.Operator.EQ);
+            pageInfo.expression(branduuid);
+        }
+
+        Page<VendorList> vendorListPage = vendorListDao.findAll(new Specification<VendorList>() {
+            public Predicate toPredicate(Root<VendorList> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+                query.where(pageInfo.getPredicates(root, query, builder));
+                return null;
+            }
+        }, pageInfo);
+
+        List<VendorList> vendorLists = vendorListPage.getContent();
+
+        // 装载店铺信息
+        if (CollectionUtils.isNotEmpty(vendorLists)) {
+            for (VendorList vendorList : vendorLists) {
+                // 如果供应商信息申请状态为正在申请中,用申请信息替换它
+                if (Constant.YES == vendorList.getIsSubmited()) {
+                    List<VendorListSubmit> vendorListSubmits = vendorListSubmitDao.findByVendoridAndStatus(vendorList.getId(),
+                        Status.SUBMITTED.value());
+                    if (CollectionUtils.isNotEmpty(vendorListSubmits)) {
+                        convertBySubmit(vendorList, vendorListSubmits.get(0));
+                    }
+                }
+
+                if (vendorList.getStoreuuid() != null) {
+                    StoreIn store = storeInDao.findByUuid(vendorList.getStoreuuid());
+                    if (store != null) {
+                        vendorList.setStoreIn(store);
+                    }
+                }
+            }
+        }
+
+        List<VendorList> returnVendorLists = new ArrayList<>(vendorLists);
+        Long totalElements = vendorListPage.getTotalElements();
+
+        List<VendorListSubmit> vendorListSubmits = vendorListSubmitDao.findByBranduuidAndStatusAndVendoridIsNull(uuid, Status.SUBMITTED.value());
+        if (CollectionUtils.isNotEmpty(vendorListSubmits)) {
+            for (VendorListSubmit vendorListSubmit : vendorListSubmits) {
+                VendorList vendorList = new VendorList();
+                convertBySubmit(vendorList, vendorListSubmit);
+                vendorList.setIsSubmited((short) 2);
+
+                if (vendorList.getStoreuuid() != null) {
+                    StoreIn store = storeInDao.findByUuid(vendorList.getStoreuuid());
+                    if (store != null) {
+                        vendorList.setStoreIn(store);
+                    }
+                }
+                returnVendorLists.add(vendorList);
+            }
+            totalElements += vendorListSubmits.size();
+//            pageInfo.setPageSize(returnVendorLists.size());
+        }
+
+        return new PageImpl<VendorList>(returnVendorLists, pageInfo, totalElements);
+    }
+
+    private void convertBySubmit(VendorList vendorList, VendorListSubmit vendorListSubmit) {
+        vendorList.setArea(vendorListSubmit.getArea());
+        vendorList.setBranduuid(vendorListSubmit.getBranduuid());
+        vendorList.setDetailAddress(vendorListSubmit.getDetailAddress());
+        vendorList.setEmail(vendorListSubmit.getEmail());
+        vendorList.setLicense(vendorListSubmit.getLicense());
+        vendorList.setStoreuuid(vendorListSubmit.getStoreuuid());
+        vendorList.setTel(vendorListSubmit.getTel());
+        vendorList.setFax(vendorListSubmit.getFax());
+        vendorList.setVendorName(vendorListSubmit.getVendorName());
+        vendorList.setWebsite(vendorListSubmit.getWebsite());
+        vendorList.setImg(vendorListSubmit.getImg());
+    }
+}

+ 490 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/VendorListSubmitServiceImpl.java

@@ -0,0 +1,490 @@
+package com.uas.platform.b2c.prod.product.brand.service.impl;
+
+import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
+import com.uas.platform.b2c.common.account.dao.UserBaseInfoDao;
+import com.uas.platform.b2c.common.account.model.UserBaseInfo;
+import com.uas.platform.b2c.core.constant.Status;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.prod.product.brand.dao.BrandDao;
+import com.uas.platform.b2c.prod.product.brand.dao.VendorListDao;
+import com.uas.platform.b2c.prod.product.brand.dao.VendorListSubmitDao;
+import com.uas.platform.b2c.prod.product.brand.modal.Brand;
+import com.uas.platform.b2c.prod.product.brand.modal.BrandInfo;
+import com.uas.platform.b2c.prod.product.brand.modal.VendorList;
+import com.uas.platform.b2c.prod.product.brand.modal.VendorListSubmit;
+import com.uas.platform.b2c.prod.product.brand.service.VendorListSubmitService;
+import com.uas.platform.b2c.prod.store.dao.StoreInDao;
+import com.uas.platform.b2c.prod.store.model.StoreIn;
+import com.uas.platform.b2c.prod.store.model.StoreStatus;
+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.persistence.criteria.CriterionExpression;
+import com.uas.platform.core.persistence.criteria.SimpleExpression;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+/**
+ * Created by wangyc on 2017/11/27.
+ *
+ * @version 2017/11/27 10:39 wangyc
+ */
+@Service
+public class VendorListSubmitServiceImpl implements VendorListSubmitService {
+
+    private final VendorListDao vendorListDao;
+
+    private final VendorListSubmitDao vendorListSubmitDao;
+
+    private final BrandDao brandDao;
+
+    private final StoreInDao storeInDao;
+
+    private final UserBaseInfoDao userBaseInfoDao;
+
+    private final EnterpriseDao enterpriseDao;
+
+    @Autowired
+    public VendorListSubmitServiceImpl(VendorListDao vendorListDao, VendorListSubmitDao vendorListSubmitDao, BrandDao brandDao, StoreInDao storeInDao, UserBaseInfoDao userBaseInfoDao, EnterpriseDao enterpriseDao){
+        this.vendorListDao = vendorListDao;
+        this.vendorListSubmitDao = vendorListSubmitDao;
+        this.brandDao = brandDao;
+        this.storeInDao = storeInDao;
+        this.userBaseInfoDao = userBaseInfoDao;
+        this.enterpriseDao = enterpriseDao;
+    }
+
+    @Override
+    public VendorListSubmit findOne(Long id) {
+        VendorListSubmit vendorListSubmit = vendorListSubmitDao.findOne(id);
+        if (vendorListSubmit == null) {
+            throw new IllegalOperatorException("此供应商申请不存在");
+        }
+
+        if (vendorListSubmit.getStoreuuid() != null) {
+            vendorListSubmit.setStoreIn(storeInDao.findByUuid(vendorListSubmit.getStoreuuid()));
+        }
+        return vendorListSubmit;
+    }
+
+    @Override
+    public VendorListSubmit save(VendorListSubmit vendorListSubmit) {
+        validition(vendorListSubmit);// 验证申请
+
+        List<VendorList> existsVendors = new ArrayList<VendorList>();
+        if (vendorListSubmit.getLicense() != null) {// 判断供应商信息是否已存在
+            existsVendors = vendorListDao.findByBranduuidAndLicense(vendorListSubmit.getBranduuid(), vendorListSubmit.getLicense());
+        } else {
+            existsVendors = vendorListDao.findByBranduuidAndVendorName(vendorListSubmit.getBranduuid(), vendorListSubmit.getVendorName());
+        }
+
+        if (CollectionUtils.isNotEmpty(existsVendors)) {
+            throw new IllegalOperatorException("此供应商已存在,请重新确认供应商信息或更新对应供应商信息");
+        }
+
+        vendorListSubmit.setUpdateruu(SystemSession.getUser().getUserUU());
+        vendorListSubmit.setUpdatetime(new Date());
+        vendorListSubmit.setStatus(Status.SUBMITTED.value());
+        // 设置操作类型为新增
+        vendorListSubmit.setType(Status.PRELIMINARY.value());
+        return vendorListSubmitDao.save(vendorListSubmit);
+    }
+
+    @Override
+    public VendorListSubmit delete(Long id) {
+        VendorList oldVendor = vendorListDao.findOne(id);
+        if (oldVendor == null) {
+            throw new IllegalOperatorException("此供应商信息不存在,请确认后再进行操作");
+        }
+
+        if (Constant.YES == oldVendor.getIsSubmited()) {
+            throw new IllegalOperatorException("此供应商信息正在申请中,请联系管理员处理完现有申请后,再进行操作");
+        }
+
+        Date now = new Date();
+
+        VendorListSubmit vendorListSubmit = new VendorListSubmit(oldVendor);
+        vendorListSubmit.setUpdateruu(SystemSession.getUser().getUserUU());
+        vendorListSubmit.setUpdatetime(now);
+        vendorListSubmit.setVendorid(oldVendor.getId());
+        vendorListSubmit.setStatus(Status.SUBMITTED.value());
+        // 设置操作类型为删除
+        vendorListSubmit.setType(Status.DELETED.value());
+
+        // 更新供应商信息为正在申请
+        oldVendor.setSubmitTime(now);
+        oldVendor.setIsSubmited(Constant.YES);
+        vendorListDao.save(oldVendor);
+
+        return vendorListSubmitDao.save(vendorListSubmit);
+    }
+
+    @Override
+    public VendorListSubmit update(VendorListSubmit vendorListSubmit) {
+        validition(vendorListSubmit);// 验证申请
+
+        VendorList oldVendor = vendorListDao.findOne(vendorListSubmit.getVendorid());
+        if (oldVendor == null)
+            throw new IllegalOperatorException("此供应商不存在");
+
+        if (Constant.YES == oldVendor.getIsSubmited()) {
+            throw new IllegalOperatorException("此供应商信息正在申请中,请联系管理员处理完现有申请后,再进行操作");
+        }
+
+
+        Date now = new Date();
+
+        vendorListSubmit.setUpdateruu(SystemSession.getUser().getUserUU());
+        vendorListSubmit.setUpdatetime(now);
+        vendorListSubmit.setStatus(Status.SUBMITTED.value());
+        // 设置操作类型为更新
+        vendorListSubmit.setType(Status.ACTIVE.value());
+        vendorListSubmit.setId(null);
+
+        // 更新供应商信息为正在申请
+        oldVendor.setSubmitTime(now);
+        oldVendor.setIsSubmited(Constant.YES);
+        vendorListDao.save(oldVendor);
+
+        return vendorListSubmitDao.save(vendorListSubmit);
+    }
+
+    @Override
+    public VendorListSubmit audit(VendorListSubmit vendorListSubmit) {
+        validition(vendorListSubmit);// 验证申请
+
+        Date now = new Date();
+
+        vendorListSubmit.setStatus(Status.AUDITED.value());// 修改状态为已审核
+        vendorListSubmit.setAuditeruu(SystemSession.getUser().getUserUU());
+        vendorListSubmit.setAudittime(now);
+        vendorListSubmitDao.save(vendorListSubmit);
+
+        // 删除申请,删除原供应商信息
+        if (Status.DELETED.value() == vendorListSubmit.getType()) {
+            // 检测关联供应商信息有效性
+            checkVendorid(vendorListSubmit);
+            vendorListDao.delete(vendorListSubmit.getVendorid());
+        } else {
+            VendorList vendorList = new VendorList(vendorListSubmit);
+            // 若为更新则更新之前的供应商信息
+            if (Status.ACTIVE.value() == vendorListSubmit.getType()) {
+                // 检测关联供应商信息有效性
+                checkVendorid(vendorListSubmit);
+                vendorList.setId(vendorListSubmit.getVendorid());
+            }
+            // 将供应商信息申请状态更新为不在申请中
+            vendorList.setIsSubmited(Constant.NO);
+            vendorList.setSubmitTime(now);
+            vendorListDao.save(vendorList);
+        }
+
+        return vendorListSubmit;
+    }
+
+    /**
+     * 检测关联供应商信息有效性
+     * @param vendorListSubmit 供应商申请
+     */
+    private void checkVendorid(VendorListSubmit vendorListSubmit) {
+        if (vendorListSubmit.getVendorid() == null || vendorListDao.findOne(vendorListSubmit.getVendorid()) == null) {
+            throw new IllegalOperatorException("原供应商信息不存在,请重新确认后再进行操作");
+        }
+    }
+
+    @Override
+    public VendorListSubmit unaudit(Long id) {
+        VendorListSubmit vendorListSubmit = vendorListSubmitDao.findOne(id);
+        if (vendorListSubmit == null)
+            throw new IllegalOperatorException("此申请不存在,请重新确认申请信息");
+        if (Status.SUBMITTED.value() != vendorListSubmit.getStatus())
+            throw new IllegalOperatorException("此申请不为待审核状态,请重新确认申请信息");
+
+        vendorListSubmit.setStatus(Status.NOTALLOW.value());
+        vendorListSubmit.setAuditeruu(SystemSession.getUser().getUserUU());
+        vendorListSubmit.setAudittime(new Date());
+
+        // 若申请关联已生效供应商信息,将已生效信息改为不在申请状态中
+        if (vendorListSubmit.getVendorid() != null) {
+            VendorList oldVendor = vendorListDao.findOne(vendorListSubmit.getVendorid());
+            if (oldVendor != null) {
+                oldVendor.setIsSubmited(Constant.NO);
+                oldVendor.setSubmitTime(new Date());
+                vendorListDao.save(oldVendor);
+            }
+        }
+
+        return vendorListSubmitDao.save(vendorListSubmit);
+    }
+
+    @Override
+    public List<VendorListSubmit> upload(Workbook workbook) {
+        List<VendorListSubmit> vendorListSubmits = new ArrayList<VendorListSubmit>();
+        Sheet sheet = workbook.getSheetAt(0);
+        int rowNum = sheet.getLastRowNum();
+        Date date = new Date();
+
+        Row firstRow = sheet.getRow(0);// 验证表头
+        if (firstRow != null) {
+            List<String> titles = new ArrayList<String>();
+            titles.add("品牌英文名");
+            titles.add("代理商名称");
+            titles.add("营业执照号");
+            titles.add("地区(省,市,区/县。以,分隔)");
+            titles.add("详细地址(街道)");
+            titles.add("电话");
+            titles.add("传真");
+            titles.add("网址");
+            titles.add("关联企业名称");
+            titles.add("邮箱");
+
+            List<String> heads = new ArrayList<String>();
+            for (int j = 0; j < 10; j++) {
+                if (firstRow.getCell(j) != null) {
+                    firstRow.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
+                    Object cell = firstRow.getCell(j);
+                    if (cell != null && StringUtils.hasText(firstRow.getCell(j).getStringCellValue().trim())) {
+                        heads.add(firstRow.getCell(j).getStringCellValue().trim());
+                    }
+                }
+            }
+            if (!titles.equals(heads))
+                throw new IllegalOperatorException("表头不正确,请重新下载模板");
+        } else {
+            throw new IllegalOperatorException("表头不正确,请重新下载模板");
+        }
+
+        List<VendorListSubmit> vendorListSubmitList = new ArrayList<VendorListSubmit>();
+
+        for (int r = 1; r <= rowNum; r++) {
+            Row row = sheet.getRow(r);
+
+            if (row != null && row.getCell(0) != null) {
+                VendorListSubmit vendorListSubmit = new VendorListSubmit();
+
+                // 品牌英文名
+                if (row.getCell(0) != null) {
+                    row.getCell(0).setCellType(Cell.CELL_TYPE_STRING);
+                    String brandNameEn = row.getCell(0).getStringCellValue().trim();
+
+                    if (StringUtils.hasText(brandNameEn)) {
+                        List<Brand> brands = brandDao.findByUpperNameEn(brandNameEn);
+                        if (CollectionUtils.isEmpty(brands))
+                            throw new IllegalOperatorException("第" + (r+1) + "行品牌:" + brandNameEn + " 不存在,请重新确认品牌信息");
+
+                        vendorListSubmit.setBranduuid(brands.get(0).getUuid());
+                    } else {
+                        throw new IllegalOperatorException("第" + (r+1) + "行品牌英文名不可为空");
+                    }
+                } else {
+                    throw new IllegalOperatorException("第" + (r+1) + "行品牌英文名不可为空");
+                }
+
+                // 供应商名称
+                if (row.getCell(1) != null) {
+                    row.getCell(1).setCellType(Cell.CELL_TYPE_STRING);
+                    String vendorName = row.getCell(1).getStringCellValue().trim();
+
+                    if (StringUtils.hasText(vendorName)) {
+                        vendorListSubmit.setVendorName(vendorName);
+                    } else {
+                        throw new IllegalOperatorException("第" + (r+1) + "行供应商名称不可为空");
+                    }
+                } else {
+                    throw new IllegalOperatorException("第" + (r+1) + "行供应商名称不可为空");
+                }
+
+                // 营业执照号
+                if (row.getCell(2) != null) {
+                    row.getCell(2).setCellType(Cell.CELL_TYPE_STRING);
+                    String license = row.getCell(2).getStringCellValue().trim();
+
+                    if (StringUtils.hasText(license))
+                        vendorListSubmit.setLicense(license);
+                }
+
+                // 地区
+                if (row.getCell(3) != null) {
+                    row.getCell(3).setCellType(Cell.CELL_TYPE_STRING);
+                    String area = row.getCell(3).getStringCellValue().trim();
+
+                    if (StringUtils.hasText(area)) {
+                        area.replace(",", ",");
+                        vendorListSubmit.setArea(area);
+                    } else {
+                        throw new IllegalOperatorException("第" + (r+1) + "行地区不可为空");
+                    }
+                } else {
+                    throw new IllegalOperatorException("第" + (r+1) + "行地区不可为空");
+                }
+
+                // 详细地址
+                if (row.getCell(4) != null) {
+                    row.getCell(4).setCellType(Cell.CELL_TYPE_STRING);
+                    String detailAddress = row.getCell(4).getStringCellValue().trim();
+
+                    if (StringUtils.hasText(detailAddress)) {
+                        vendorListSubmit.setDetailAddress(detailAddress);
+                    } else {
+                        throw new IllegalOperatorException("第" + (r+1) + "行详细地址不可为空");
+                    }
+                } else {
+                    throw new IllegalOperatorException("第" + (r+1) + "行详细地址不可为空");
+                }
+
+                // 电话
+                if (row.getCell(5) != null) {
+                    row.getCell(5).setCellType(Cell.CELL_TYPE_STRING);
+                    String tel = row.getCell(5).getStringCellValue().trim();
+
+                    if (StringUtils.hasText(tel)) {
+                        vendorListSubmit.setTel(tel);
+                    }
+                }
+
+                // 传真
+                if (row.getCell(6) != null) {
+                    row.getCell(6).setCellType(Cell.CELL_TYPE_STRING);
+                    String fax = row.getCell(6).getStringCellValue().trim();
+
+                    if (StringUtils.hasText(fax)) {
+                        vendorListSubmit.setFax(fax);
+                    }
+                }
+
+                // 网址
+                if (row.getCell(7) != null) {
+                    row.getCell(7).setCellType(Cell.CELL_TYPE_STRING);
+                    String website = row.getCell(7).getStringCellValue().trim();
+
+                    if (StringUtils.hasText(website)) {
+                        vendorListSubmit.setWebsite(website);
+                    }
+                }
+
+                // 关联企业名称
+                if (row.getCell(8) != null) {
+                    row.getCell(8).setCellType(Cell.CELL_TYPE_STRING);
+                    String enName = row.getCell(8).getStringCellValue().trim();
+
+                    if (StringUtils.hasText(enName)) {
+                        List<Long> enuu = enterpriseDao.findEnuuByName(enName);
+                        if (CollectionUtils.isNotEmpty(enuu)) {
+                            List<StoreIn> storeInExist = storeInDao.findByEnUU(enuu.get(0));
+                            if (CollectionUtils.isNotEmpty(storeInExist)) {
+                                StoreIn storeIn = storeInExist.get(0);
+                                if (StoreStatus.OPENED == storeIn.getStatus()) {
+                                    VendorList vendorLists = vendorListDao.findByBranduuidAndStoreuuid(vendorListSubmit.getBranduuid(), storeIn.getUuid());
+                                    if (vendorLists != null) {
+                                        throw new IllegalOperatorException("第" + (r+1) + "行企业:" + enName + " 店铺,在当前品牌下已关联供应商");
+                                    }
+                                    vendorListSubmit.setStoreuuid(storeIn.getUuid());
+                                } else {
+                                    throw new IllegalOperatorException("第" + (r+1) + "行企业:" + enName + " 店铺不为已开通状态");
+                                }
+                            } else {
+                                throw new IllegalOperatorException("第" + (r+1) + "行企业:" + enName + "未开通店铺");
+                            }
+                        } else {
+                            throw new IllegalOperatorException("第" + (r+1) + "行企业:" + enName + "不存在");
+                        }
+                    }
+                }
+                // 邮箱
+                if (row.getCell(9) != null) {
+                    row.getCell(9).setCellType(Cell.CELL_TYPE_STRING);
+                    String email = row.getCell(9).getStringCellValue().trim();
+
+                    if (StringUtils.hasText(email)) {
+                        vendorListSubmit.setEmail(email);
+                    }
+                }
+
+                vendorListSubmit.setUpdateruu(SystemSession.getUser().getUserUU());
+                vendorListSubmit.setUpdatetime(new Date());
+                vendorListSubmit.setStatus(Status.SUBMITTED.value());
+                // 设置操作类型为新增
+                vendorListSubmit.setType(Status.PRELIMINARY.value());
+                vendorListSubmitList.add(vendorListSubmit);
+            }
+        }
+        return vendorListSubmitDao.save(vendorListSubmitList);
+    }
+
+    @Override
+    public Page<VendorListSubmit> findByPage(final PageInfo pageInfo, String keywords, Integer status) {
+        if (Status.AVAILABLE.value() != status) {// 非全部时过滤状态
+            pageInfo.filter("status", status);
+        }
+
+        if (StringUtils.hasText(keywords)) {
+            SimpleExpression vendorName = new SimpleExpression("vendorName", keywords, CriterionExpression.Operator.LIKE, true);
+            pageInfo.expression(vendorName);
+        }
+
+        Page<VendorListSubmit> vendorListSubmitPage = vendorListSubmitDao.findAll(new Specification<VendorListSubmit>() {
+            @Override
+            public Predicate toPredicate(Root<VendorListSubmit> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                query.where(pageInfo.getPredicates(root, query, cb));
+                return null;
+            }
+        }, pageInfo);
+
+        List<VendorListSubmit> vendorListSubmits = vendorListSubmitPage.getContent();
+        for (VendorListSubmit vendorListSubmit : vendorListSubmits) {// 设置品牌信息、提交人、审核人
+            Brand brand = brandDao.findByUuid(vendorListSubmit.getBranduuid());
+            if (brand == null)
+                throw new IllegalOperatorException("供应商申请:" + vendorListSubmit.getVendorName() + " 所属品牌不存在");
+            vendorListSubmit.setBrand(new BrandInfo(brand));
+
+            UserBaseInfo updater = userBaseInfoDao.findUserByUserUU(vendorListSubmit.getUpdateruu());
+            if (updater == null)
+                throw new IllegalOperatorException("供应商申请:" + vendorListSubmit.getVendorName() + " 提交人不存在");
+            vendorListSubmit.setUpdater(updater);
+
+            if (vendorListSubmit.getAuditeruu() != null) {
+                UserBaseInfo auditer = userBaseInfoDao.findUserByUserUU(vendorListSubmit.getUpdateruu());
+                if (auditer == null)
+                    throw new IllegalOperatorException("供应商申请:" + vendorListSubmit.getVendorName() + " 审核人不存在");
+                vendorListSubmit.setAuditer(auditer);
+            }
+        }
+        return new PageImpl<VendorListSubmit>(vendorListSubmits, pageInfo, vendorListSubmitPage.getTotalElements());
+
+    }
+
+    /**
+     * 验证申请数据正确性
+     * @param vendorListSubmit
+     * @return
+     */
+    private void validition(VendorListSubmit vendorListSubmit) {
+        if (vendorListSubmit.getBranduuid() == null) {
+            throw new IllegalOperatorException("品牌信息为空,请确认信息后重新申请");
+        }
+
+        // 店铺id不为空时,验证同品牌下是否存在已关联该店铺的供应商(更新自身除外)
+        if (vendorListSubmit.getStoreuuid() != null) {
+            VendorList existsVendor = vendorListDao.findByBranduuidAndStoreuuid(vendorListSubmit.getBranduuid(), vendorListSubmit.getStoreuuid());
+            if (existsVendor != null && !existsVendor.getId().equals(vendorListSubmit.getVendorid())) {
+                throw new IllegalOperatorException("此店铺关联供应商已入驻,请确认信息后重新申请");
+            }
+        }
+    }
+}

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

@@ -42,33 +42,36 @@ public class CreateNumberServiceImpl implements CreateNumberService {
 		synchronized (tbname) {
 			// 1、找有没有用存这个表的
 			String timeNumber = "";
-			while (getDataFromRedis(tbname) == null) {
-				setDataToRedis(tbname);
-				String time = getTime();
-				int num;
-				CreateNumber createNumber = createNumberDao.findByTbname(tbname);
-				if (createNumber == null) {
-					createNumber = new CreateNumber();
-					createNumber.setTbname(tbname);
-					createNumber.setTime(time);
-					num = 1;
-				} else {
-					// 2、检查时间是不是今天
-					if (time.equals(createNumber.getTime())) {
-						num = createNumber.getNumber() + 1;
-					} else {
-						num = 1;
+			while (true) {
+				if (getDataFromRedis(tbname) == null) {
+					setDataToRedis(tbname);
+					String time = getTime();
+					int num;
+					CreateNumber createNumber = createNumberDao.findByTbname(tbname);
+					if (createNumber == null) {
+						createNumber = new CreateNumber();
+						createNumber.setTbname(tbname);
 						createNumber.setTime(time);
+						num = 1;
+					} else {
+						// 2、检查时间是不是今天
+						if (time.equals(createNumber.getTime())) {
+							num = createNumber.getNumber() + 1;
+						} else {
+							num = 1;
+							createNumber.setTime(time);
+						}
 					}
+					if (addNums.length > 0) {
+						createNumber.setNumber(num + addNums[0] - 1);
+					} else {
+						createNumber.setNumber(num);
+					}
+					createNumberDao.save(createNumber);
+					redisTemplate.delete(tbname);
+					timeNumber = createNumber.getTime() + formatIntToStr(num, digit);
+					break;
 				}
-				if (addNums.length > 0) {
-					createNumber.setNumber(num + addNums[0] - 1);
-				} else {
-					createNumber.setNumber(num);
-				}
-				createNumberDao.save(createNumber);
-				redisTemplate.delete(tbname);
-				timeNumber = createNumber.getTime() + formatIntToStr(num, digit);
 			}
 
 			return timeNumber;
@@ -132,7 +135,8 @@ public class CreateNumberServiceImpl implements CreateNumberService {
 				byte[] key = redisTemplate.getStringSerializer().serialize(keyVale);
 				if (!connection.exists(key)) {
 					byte[] value = "1".getBytes();
-					connection.set(key, value);
+					redisTemplate.opsForValue().setIfAbsent(key,value);
+//					connection.set(key, value);
 					connection.expire(key, expireTime);
 					return redisTemplate.getStringSerializer().deserialize(connection.get(key));
 				}

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

@@ -23,6 +23,15 @@ public interface ComponentDao extends JpaSpecificationExecutor<Component>, JpaRe
 	@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value = "true") })
 	public Component findByUuid(String uuid);
 
+	/**
+	 * 根据uuid查找器件
+	 *
+	 * @param uuid
+	 * @return 器件信息
+	 */
+	@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value = "true") })
+	public String findAttachByUuid(String uuid);
+
 	/**
 	 * 根据uuid查找id
 	 * 

+ 0 - 3
src/main/java/com/uas/platform/b2c/prod/store/api/CommodityController.java

@@ -85,9 +85,6 @@ public class CommodityController {
 	 */
 	@RequestMapping(value = "/component/{componentUuid}", method = RequestMethod.GET)
 	public Component findComponentByUuid(@PathVariable String componentUuid, HttpServletRequest request) {
-		HttpSession session = request.getSession(false);
-		if (session != null && session.getAttribute("user") != null)
-			SystemSession.setUser((User) session.getAttribute("user"));
 		logger.info(String.format("Find information of component by component uuid %s", componentUuid));
 		return componentService.findByUuid(componentUuid);
 	}

+ 11 - 0
src/main/java/com/uas/platform/b2c/prod/store/controller/StoreInController.java

@@ -60,6 +60,17 @@ public class StoreInController {
 		return storeService.findByEnUU(enUU);
 	}
 
+	/**
+	 * 根据所属公司获取店铺信息
+	 *
+	 * @param enUU	所属公司UU
+	 */
+	@RequestMapping(value = "/byEnUU/uuid", method = RequestMethod.GET)
+	public String findUUidByEnUU(Long enUU) {
+		logger.info(String.format("Find uuid of store by enUU %d.", enUU));
+		return storeService.findUUidByEnUU(enUU);
+	}
+
 	/**
 	 * 依据店铺编号UUID获取店铺信息
 	 *

+ 7 - 0
src/main/java/com/uas/platform/b2c/prod/store/service/StoreInService.java

@@ -38,6 +38,13 @@ public interface StoreInService {
 	 */
 	StoreIn findByEnUU(Long enUU);
 
+	/**
+	 * 根据enuu返回店铺的uuid
+	 * @param enUU	企业enuu
+	 * @return
+	 */
+	String findUUidByEnUU(Long enUU);
+
 	/**
 	 * 依据店铺编号UUID获取店铺信息
 	 *

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

@@ -184,6 +184,25 @@ public class StoreInServiceImpl implements StoreInService {
 		}
 	}
 
+	@Override
+	public String findUUidByEnUU(Long enUU) {
+		if (enUU == null) {
+			return sysConf.getStoreid();
+		}
+
+		List<StoreIn> storeIns = storeDao.findByEnUU(enUU);
+		if (CollectionUtils.isEmpty(storeIns)) {
+			return sysConf.getStoreid();
+		} else {
+			StoreIn store = storeIns.get(0);
+			if (StoreStatus.OPENED.equals(store.getStatus())) {
+				return store.getUuid();
+			} else {
+				return sysConf.getStoreid();
+			}
+		}
+	}
+
 	@Override
 	public StoreIn findByUuid(String uuid) {
 		logger.info("Start to execute find.");

+ 15 - 0
src/main/java/com/uas/platform/b2c/trade/order/model/Order.java

@@ -648,6 +648,12 @@ public class Order extends Document implements Serializable {
 	@Transient
 	private Installment installment;
 
+	/**
+	 * 临时保存收款名
+	 */
+	@Transient
+	private String receiveName;
+
 	/**
 	 * Gets expiration time.
 	 *
@@ -2469,6 +2475,7 @@ public class Order extends Document implements Serializable {
 		this.buyeruu = user.getUserUU();
 		this.buyerenuu = user.getEnterprise() != null ? user.getEnterprise().getUu() : null;
 		this.buyername = user.getUserName();
+		this.buyerentername = user.getEnterprise() != null ? user.getEnterprise().getEnName() : null;
 		this.buyerTel = user.getUserTel();
 		this.setStatusToBeConfirmed(user.getUserUU());
 		buyNow = false; // 默认不是立即购买,是则手动设置
@@ -2881,4 +2888,12 @@ public class Order extends Document implements Serializable {
 	public void setSpId(Long spId) {
 		this.spId = spId;
 	}
+
+	public String getReceiveName() {
+		return receiveName;
+	}
+
+	public void setReceiveName(String receiveName) {
+		this.receiveName = receiveName;
+	}
 }

+ 9 - 1
src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderServiceImpl.java

@@ -1668,7 +1668,15 @@ public class OrderServiceImpl implements OrderService {
 
     @Override
     public Order findOrderDetail(String orderid) {
-        return orderDao.findOrderByOrderid(orderid);
+        Order order = orderDao.findOrderByOrderid(orderid);
+        if (order.getBuyerenuu() != null && order.getBuyerentername() == null) {
+            Enterprise enterprise = enterpriseDao.findByUu(order.getBuyerenuu());
+            if (enterprise != null) {
+                order.setBuyerentername(enterprise.getEnName());
+            }
+        }
+        order.setReceiveName(sysConf.getEnName());
+        return order;
     }
 
     @Override

+ 1 - 1
src/main/java/com/uas/platform/b2c/trade/rate/model/RateBuyer.java

@@ -9,7 +9,7 @@ import java.util.Date;
  * 卖家对买家的评价
  */
 @Entity
-@Table(name = "b2c$rate$buyer")
+@Table(name = "b2c$rate_buyer")
 public class RateBuyer implements Serializable{
 
     private static final long serialVersionUID = 1L;

+ 1 - 1
src/main/java/com/uas/platform/b2c/trade/rate/model/RateGoods.java

@@ -11,7 +11,7 @@ import java.util.Date;
  * 买家对商品的评价
  */
 @Entity
-@Table(name = "b2c$rate$goods")
+@Table(name = "b2c$rate_goods")
 public class RateGoods implements Serializable{
 
     private static final long serialVersionUID = 1L;

+ 1 - 1
src/main/java/com/uas/platform/b2c/trade/rate/model/RateTemplate.java

@@ -13,7 +13,7 @@ import java.util.Date;
  * 卖家的评价模版
  */
 @Entity
-@Table(name = "b2c$rate$template")
+@Table(name = "b2c$rate_template")
 public class RateTemplate implements Serializable{
 
     private static final long serialVersionUID = 1L;

+ 1 - 1
src/main/java/com/uas/platform/b2c/trade/rate/model/RateVendor.java

@@ -9,7 +9,7 @@ import java.util.Date;
  * 买家对已购买店铺的评价
  */
 @Entity
-@Table(name = "b2c$rate$vendor")
+@Table(name = "b2c$rate_vendor")
 public class RateVendor implements Serializable{
 
     private static final long serialVersionUID = 1L;

+ 1 - 1
src/main/java/com/uas/platform/b2c/trade/rate/service/impl/RateServiceImpl.java

@@ -75,7 +75,7 @@ public class RateServiceImpl implements RateService {
             throw new RuntimeException();
         }
         for (RateGoods rateGoods : rateGoodsList) {
-            //默认匿名评价
+            // 默认匿名评价
             rateGoods.setIsAnony(rateGoods.getIsAnony() == null ? isAnony : rateGoods.getIsAnony());
             rateGoods.setUserUU(SystemSession.getUser().getUserUU());
             rateGoods.setUserEnuu(SystemSession.getUser().getEnterprise().getUu());

+ 11 - 6
src/main/java/com/uas/platform/b2c/trade/seek/controller/SeekPurchaseBomController.java

@@ -13,6 +13,7 @@ import com.uas.platform.b2c.trade.seek.model.SeekPurchaseByBatch;
 import com.uas.platform.b2c.trade.seek.service.SeekPurchaseBomService;
 import com.uas.platform.b2c.trade.support.CodeType;
 import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
@@ -29,7 +30,6 @@ import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.servlet.ModelAndView;
 
@@ -49,6 +49,9 @@ public class SeekPurchaseBomController {
     @Value("#{sys.inquiryServiceUrl}")
     private String inquiryServiceUrl;
 
+    @Value("#{sys.inquiryServiceInnerUrl}")
+    private String inquiryServiceInnerUrl;
+
     /**
      * 日志
      */
@@ -63,6 +66,10 @@ public class SeekPurchaseBomController {
      */
     @RequestMapping(value = "/importBom", method = RequestMethod.POST)
     public ResultMap importBom(FileUpload uploadItem) {
+        User user = SystemSession.getUser();
+        if (user == null) {
+            throw new IllegalOperatorException("请先登录");
+        }
         String fileName = uploadItem.getFile().getOriginalFilename();
         String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
         String bomName = fileName.substring(0, fileName.lastIndexOf("."));
@@ -103,12 +110,10 @@ public class SeekPurchaseBomController {
      * @return
      */
     @RequestMapping(value = "/confirmBom", method = RequestMethod.POST)
-    @ResponseBody
-    public ResultMap confirmBom(@RequestBody String json) {
-        JSONObject object = FastjsonUtils.parseObject(json);
-        logger.log("求购", "确认发布bom求购,bomId:" + object.get("bomId"));
+    public ResultMap confirmBom(Long bomId) {
+        logger.log("求购", "确认发布bom求购,bomId:" + bomId);
         User user = SystemSession.getUser();
-        return seekPurchaseBomService.confirmBom(Long.valueOf(object.get("bomId").toString()), user, inquiryServiceUrl);
+        return seekPurchaseBomService.confirmBom(bomId, user, inquiryServiceInnerUrl);
     }
 
     /**

+ 74 - 0
src/main/java/com/uas/platform/b2c/trade/seek/controller/SeekSalesmanInfoController.java

@@ -0,0 +1,74 @@
+package com.uas.platform.b2c.trade.seek.controller;
+
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
+import com.uas.platform.b2c.trade.seek.model.SeekSalesmanInfo;
+import com.uas.platform.b2c.trade.seek.model.SeekSalesmanMember;
+import com.uas.platform.b2c.trade.seek.service.SeekSalesmanInfoService;
+import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+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.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 求购-优质采购商操作接口类
+ *
+ * @author liusw
+ * @version 2017/12/13 10:38
+ */
+@RestController
+@RequestMapping("/seek/salesman")
+public class SeekSalesmanInfoController {
+
+    /**
+     * 日志
+     */
+    private static final UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+    @Autowired
+    private SeekSalesmanInfoService seekSalesmanInfoService;
+
+    /**
+     * 获取求购-业务员分配列表
+     * @param params
+     * @param status
+     * @param salesman
+     * @param keyword
+     * @return
+     */
+    @RequestMapping(value = "/getPageInfo", method = RequestMethod.GET)
+    public Page<SeekSalesmanInfo> getPageInfo(PageParams params, Integer status, String salesman, String keyword) {
+        PageInfo info = new PageInfo(params);
+        logger.log("求购", "获取求购-业务员分配列表");
+        return seekSalesmanInfoService.getPageInfo(info, status, salesman, keyword);
+    }
+
+    /**
+     * 业务员求购接单
+     * @param id
+     * @return
+     */
+    @RequestMapping(value = "/orders", method = RequestMethod.POST)
+    public ResultMap orders(Long id) {
+        User user = SystemSession.getUser();
+        logger.log("求购", "业务员求购接单,uu为" + user.getUserUU());
+        return seekSalesmanInfoService.orders(id, user);
+    }
+
+    /**
+     * 获取业务员列表
+     * @return
+     */
+    @RequestMapping(value = "/getMembers", method = RequestMethod.GET)
+    public List<SeekSalesmanMember> getMembers(){
+        logger.log("求购", "获取业务员列表");
+        return seekSalesmanInfoService.getMembers();
+    }
+
+}

+ 15 - 0
src/main/java/com/uas/platform/b2c/trade/seek/dao/SeekSalesmanDao.java

@@ -0,0 +1,15 @@
+package com.uas.platform.b2c.trade.seek.dao;
+
+import com.uas.platform.b2c.trade.seek.model.SeekSalesman;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+
+@Repository
+public interface SeekSalesmanDao extends JpaSpecificationExecutor<SeekSalesman>,
+        JpaRepository<SeekSalesman, Long> {
+
+    SeekSalesman  findByPublicId(Long publicId);
+}
+

+ 20 - 0
src/main/java/com/uas/platform/b2c/trade/seek/dao/SeekSalesmanInfoDao.java

@@ -0,0 +1,20 @@
+package com.uas.platform.b2c.trade.seek.dao;
+
+import com.uas.platform.b2c.trade.seek.model.SeekPurchaseBom;
+import com.uas.platform.b2c.trade.seek.model.SeekSalesmanInfo;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 求购业务Dao
+ *
+ * @author liusw
+ * @version 2017/12/12 16:48
+ */
+@Repository
+public interface SeekSalesmanInfoDao extends JpaSpecificationExecutor<SeekSalesmanInfo>,
+        JpaRepository<SeekSalesmanInfo, Long> {
+
+}
+

+ 15 - 0
src/main/java/com/uas/platform/b2c/trade/seek/dao/SeekSalesmanMemberDao.java

@@ -0,0 +1,15 @@
+package com.uas.platform.b2c.trade.seek.dao;
+
+import com.uas.platform.b2c.trade.seek.model.SeekSalesmanMember;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+
+@Repository
+public interface SeekSalesmanMemberDao extends JpaSpecificationExecutor<SeekSalesmanMember>,
+        JpaRepository<SeekSalesmanMember, Long> {
+
+    SeekSalesmanMember findByName(String name);
+}
+

+ 79 - 0
src/main/java/com/uas/platform/b2c/trade/seek/model/SeekSalesman.java

@@ -0,0 +1,79 @@
+package com.uas.platform.b2c.trade.seek.model;
+
+import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.account.model.User;
+
+import javax.persistence.*;
+import java.util.Date;
+
+/**
+ * 求购-业务员分配类
+ *
+ * @author liusw
+ * @version 2017/12/12 16:45
+ */
+@Entity(name = "trade.seekSalesman")
+@Table(name = "trade$seekSalesman")
+public class SeekSalesman {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @Id
+    @GeneratedValue
+    @Column(name = "ss_id")
+    private Long id;
+
+    /**
+     * 公共询价的id
+     */
+    @Column(name = "ss_publicid")
+    private Long publicId;
+
+    /**
+     * 业务员名字
+     */
+    @Column(name = "ss_salesman_name")
+    private String salesmanName;
+
+    /**
+     * 业务员操作时间
+     */
+    @Column(name = "ss_gettime")
+    private Date getTime;
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getPublicId() {
+        return publicId;
+    }
+
+    public void setPublicId(Long publicId) {
+        this.publicId = publicId;
+    }
+
+    public String getSalesmanName() {
+        return salesmanName;
+    }
+
+    public void setSalesmanName(String salesmanName) {
+        this.salesmanName = salesmanName;
+    }
+
+    public Date getGetTime() {
+        return getTime;
+    }
+
+    public void setGetTime(Date getTime) {
+        this.getTime = getTime;
+    }
+}

+ 166 - 0
src/main/java/com/uas/platform/b2c/trade/seek/model/SeekSalesmanInfo.java

@@ -0,0 +1,166 @@
+package com.uas.platform.b2c.trade.seek.model;
+
+import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.account.model.User;
+
+import javax.persistence.*;
+import java.util.Date;
+
+/**
+ * 求购-业务员分配视图获取详细信息
+ *
+ * @author liusw
+ * @version 2017/12/30 11:25
+ */
+@Entity
+@Table(name = "v$seek$seeksalesmaninfo")
+public class SeekSalesmanInfo {
+    /**
+     * ID
+     */
+    @Id
+    @Column(name = "publicid")
+    private Long id;
+
+    @Column(name = "id_source")
+    private String source;
+
+    @Column(name = "in_code")
+    private String code;
+
+    @Column(name = "id_date")
+    private Date publicDate;
+
+    @OneToOne(cascade = { CascadeType.REFRESH })
+    @JoinColumn(name = "id_useruu", insertable = false, updatable = false)
+    private User user;
+
+    @OneToOne(cascade = { CascadeType.REFRESH })
+    @JoinColumn(name = "in_enuu", insertable = false, updatable = false)
+    private Enterprise enterprise;
+
+    @Column(name = "id_cmpcode")
+    private String cmpCode;
+
+    @Column(name = "id_inbrand")
+    private String brand;
+
+    @Column(name = "id_prodspec")
+    private String spec;
+
+    @Column(name = "id_enddate")
+    private Date endDate;
+
+    @Column(name = "id_offeramount")
+    private Integer offerAmount;
+
+    @Column(name = "ss_salesman_name")
+    private String salesman;
+
+    @Column(name = "id_status")
+    private Integer status;
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getSource() {
+        return source;
+    }
+
+    public void setSource(String source) {
+        this.source = source;
+    }
+
+    public Date getPublicDate() {
+        return publicDate;
+    }
+
+    public void setPublicDate(Date publicDate) {
+        this.publicDate = publicDate;
+    }
+
+    public User getUser() {
+        return user;
+    }
+
+    public void setUser(User user) {
+        this.user = user;
+    }
+
+    public Enterprise getEnterprise() {
+        return enterprise;
+    }
+
+    public void setEnterprise(Enterprise enterprise) {
+        this.enterprise = enterprise;
+    }
+
+    public String getCmpCode() {
+        return cmpCode;
+    }
+
+    public void setCmpCode(String cmpCode) {
+        this.cmpCode = cmpCode;
+    }
+
+    public String getBrand() {
+        return brand;
+    }
+
+    public void setBrand(String brand) {
+        this.brand = brand;
+    }
+
+    public String getSpec() {
+        return spec;
+    }
+
+    public void setSpec(String spec) {
+        this.spec = spec;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
+
+    public Integer getOfferAmount() {
+        return offerAmount;
+    }
+
+    public void setOfferAmount(Integer offerAmount) {
+        this.offerAmount = offerAmount;
+    }
+
+    public String getSalesman() {
+        return salesman;
+    }
+
+    public void setSalesman(String salesman) {
+        this.salesman = salesman;
+    }
+}

+ 44 - 0
src/main/java/com/uas/platform/b2c/trade/seek/model/SeekSalesmanMember.java

@@ -0,0 +1,44 @@
+package com.uas.platform.b2c.trade.seek.model;
+
+import javax.persistence.*;
+import java.util.Date;
+
+/**
+ * 求购-业务员管理类
+ *
+ * @author liusw
+ * @version 2017/12/12 16:45
+ */
+@Entity(name = "trade.seekSalesmanMember")
+@Table(name = "trade$seekSalesmanMember")
+public class SeekSalesmanMember {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @Id
+    @GeneratedValue
+    @Column(name = "sm_id")
+    private Long id;
+
+    @Column(name = "sm_name")
+    private String name;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}

+ 18 - 0
src/main/java/com/uas/platform/b2c/trade/seek/service/SeekSalesmanInfoService.java

@@ -0,0 +1,18 @@
+package com.uas.platform.b2c.trade.seek.service;
+
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.trade.seek.model.SeekSalesmanInfo;
+import com.uas.platform.b2c.trade.seek.model.SeekSalesmanMember;
+import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.core.model.PageInfo;
+import org.springframework.data.domain.Page;
+
+import java.util.List;
+
+public interface SeekSalesmanInfoService {
+    Page<SeekSalesmanInfo> getPageInfo(PageInfo info, Integer status, String salesman, String keyword);
+
+    ResultMap orders(Long id, User user);
+
+    List<SeekSalesmanMember> getMembers();
+}

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

@@ -2,6 +2,7 @@ package com.uas.platform.b2c.trade.seek.service.impl;
 
 import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.search.service.SearcherService;
+import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
 import com.uas.platform.b2c.core.utils.StringUtilB2C;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
 import com.uas.platform.b2c.prod.commodity.model.Goods;
@@ -24,6 +25,7 @@ import com.uas.platform.b2c.trade.seek.utils.DateUtils;
 import com.uas.platform.b2c.trade.support.CodeType;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.exception.IllegalOperatorException;
+import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.util.HttpUtil;
@@ -107,6 +109,8 @@ public class SeekPurchaseBomServiceImpl implements SeekPurchaseBomService {
     @Autowired
     private SearcherService searcherService;
 
+    private static final UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
     private int mallColNum = 8;
     private int mallRowNum = 500;
 
@@ -266,6 +270,12 @@ public class SeekPurchaseBomServiceImpl implements SeekPurchaseBomService {
             result += 1;
         } else {
             String deadline = StringUtilB2C.replaceLineBreak(StringUtilB2C.getStr(deadlineValue));
+            if (deadline.contains(".")) {
+                deadline = deadline.replace(".", "-");
+            }
+            if (deadline.contains("/")) {
+                deadline = deadline.replace("/", "-");
+            }
             try {
                 deadline = com.uas.platform.b2c.fa.payment.utils.StringUtils.cutOutString(deadline, 10);
                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
@@ -510,7 +520,10 @@ public class SeekPurchaseBomServiceImpl implements SeekPurchaseBomService {
         String res = "";
         try {
             res = HttpUtil.doPost(url + "/inquiry/buyer/save",  FlexJsonUtils.toJsonDeep(inquiry));
+            logger.log("bom求购确认发布成功",user.getUserUU() + ",参数:" + FlexJsonUtils.toJsonDeep(inquiry));
         } catch (Exception e) {
+            logger.log("bom求购确认发布报错",user.getUserUU() + ",错误:" + e.getMessage() + "参数:" + FlexJsonUtils.toJsonDeep(inquiry));
+            e.printStackTrace();
             throw new IllegalOperatorException("发布失败");
         }
         // 删除bom的临时数据

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

@@ -0,0 +1,116 @@
+package com.uas.platform.b2c.trade.seek.service.impl;
+
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.trade.seek.dao.SeekSalesmanDao;
+import com.uas.platform.b2c.trade.seek.dao.SeekSalesmanInfoDao;
+import com.uas.platform.b2c.trade.seek.dao.SeekSalesmanMemberDao;
+import com.uas.platform.b2c.trade.seek.model.SeekSalesman;
+import com.uas.platform.b2c.trade.seek.model.SeekSalesmanInfo;
+import com.uas.platform.b2c.trade.seek.model.SeekSalesmanMember;
+import com.uas.platform.b2c.trade.seek.service.SeekSalesmanInfoService;
+import com.uas.platform.b2c.trade.support.CodeType;
+import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.persistence.criteria.CriterionExpression;
+import com.uas.platform.core.persistence.criteria.LogicalExpression;
+import com.uas.platform.core.persistence.criteria.PredicateUtils;
+import com.uas.platform.core.persistence.criteria.SimpleExpression;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Sort.Direction;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 求购-业务员分配实现类
+ *
+ * @author liusw
+ * @version 2017/12/13 10:45
+ */
+@Service
+public class SeekSalesmanInfoServiceImpl implements SeekSalesmanInfoService {
+
+    @Autowired
+    private SeekSalesmanInfoDao seekSalesmanInfoDao;
+
+    @Autowired
+    private SeekSalesmanDao seekSalesmanDao;
+
+    @Autowired
+    private SeekSalesmanMemberDao seekSalesmanMemberDao;
+
+    @Override
+    public Page<SeekSalesmanInfo> getPageInfo(final PageInfo info, Integer status, String salesman, String keyword) {
+        info.sorting("publicDate", Direction.DESC);
+        switch (status) {
+            case 0 :break;
+            case 1 :
+                info.filter("offerAmount", 0);
+                break;
+            case 2 :
+                // offerAmount > 0
+                SimpleExpression offerAmount = new SimpleExpression("offerAmount", 0, CriterionExpression.Operator.GT);
+                // agreed == 0
+                SimpleExpression agreed = new SimpleExpression("status", 1, CriterionExpression.Operator.NE);
+                SimpleExpression[] simpleExpressions = new SimpleExpression[]{offerAmount, agreed};
+                LogicalExpression logicalExpression = PredicateUtils.and(simpleExpressions);
+                info.expression(logicalExpression);
+                break;
+            case 3 :
+                SimpleExpression adopt = new SimpleExpression("status", 1, CriterionExpression.Operator.GTE);
+                info.expression(adopt);
+                break;
+        }
+        if (!StringUtils.isEmpty(salesman) && !salesman.equals("0")) {
+            info.filter("salesman", salesman);
+        }
+        if (!StringUtils.isEmpty(keyword)) {
+            SimpleExpression code = new SimpleExpression("cmpCode", keyword, CriterionExpression.Operator.LIKE);
+            SimpleExpression brand = new SimpleExpression("brand", keyword, CriterionExpression.Operator.LIKE);
+            SimpleExpression[] simpleExpressions = new SimpleExpression[]{code, brand};
+            LogicalExpression logicalExpression = PredicateUtils.or(simpleExpressions);
+            info.expression(logicalExpression);
+        }
+        Page<SeekSalesmanInfo> pageInfos = seekSalesmanInfoDao.findAll(new Specification<SeekSalesmanInfo>() {
+            public Predicate toPredicate(Root<SeekSalesmanInfo> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+                query.where(info.getPredicates(root, query, builder));
+                return null;
+            }
+        }, info);
+        return pageInfos;
+    }
+
+    @Override
+    public ResultMap orders(Long id, User user) {
+        if (StringUtils.isEmpty(id) || StringUtils.isEmpty(user)) {
+            return new ResultMap(CodeType.NO_INFO, "参数不完整!");
+        }
+        SeekSalesman oldSeekSalesman = seekSalesmanDao.findByPublicId(id);
+        if (!StringUtils.isEmpty(oldSeekSalesman)) {
+            return new ResultMap(CodeType.NOT_PERMIT, "该求购已有业务员跟进!");
+        }
+        SeekSalesmanMember seekSalesmanMember = seekSalesmanMemberDao.findByName(user.getUserName());
+        if (StringUtils.isEmpty(seekSalesmanMember)) {
+            return new ResultMap(CodeType.NOT_PERMIT, "您不是业务员,不允许操作!");
+        }
+        SeekSalesman seekSalesman = new SeekSalesman();
+        seekSalesman.setGetTime(new Date(System.currentTimeMillis()));
+        seekSalesman.setPublicId(id);
+        seekSalesman.setSalesmanName(user.getUserName());
+        seekSalesmanDao.save(seekSalesman);
+        return new ResultMap(CodeType.OK, "接单成功!");
+    }
+
+    @Override
+    public List<SeekSalesmanMember> getMembers() {
+        return seekSalesmanMemberDao.findAll();
+    }
+}

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

@@ -32,7 +32,7 @@ floorMicroServiceIp=10.10.100.23
 carouselMicroServiceIp=10.10.100.23
 storecmsMicroServiceIp=192.168.253.12
 endpointUri=10.10.100.23
-recommendPort=20100
+recommendPort=20102
 # upload file
 uploadFileUrl = http://10.10.100.200:9999
 # search file
@@ -46,4 +46,5 @@ productServiceIp=http://192.168.253.12:24000
 kafka-bootstrap-servers=10.10.100.11:9292,10.10.100.12:9292,10.10.100.13:9292,10.10.100.14:9292,10.10.100.15:9292,10.10.100.16:9292
 
 #inquiry service url
-inquiryServiceUrl=http://218.17.158.219:24000
+inquiryServiceUrl=http://218.17.158.219:24000
+inquiryServiceInnerUrl=http://218.17.158.219:24000

BIN
src/main/resources/jxls-tpl/product/brand-vendor.xls


BIN
src/main/resources/jxls-tpl/trade/releaseByBatch-rmb.xls


BIN
src/main/resources/jxls-tpl/trade/releaseByBatchError-rmb.xls


BIN
src/main/resources/jxls-tpl/trade/releaseByBatchError-usd.xls


BIN
src/main/resources/jxls-tpl/trade/releasebyBatch-usd.xls


BIN
src/main/resources/jxls-tpl/trade/seekPurchaseByBatch.xls


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

@@ -48,4 +48,5 @@ productServiceIp=http://10.10.0.197:8080
 kafka-bootstrap-servers=10.10.100.11:9292,10.10.100.12:9292,10.10.100.13:9292,10.10.100.14:9292,10.10.100.15:9292,10.10.100.16:9292
 
 #inquiry service url
-inquiryServiceUrl=https://api-inquiry.usoftmall.com
+inquiryServiceUrl=https://api-inquiry.usoftmall.com
+inquiryServiceInnerUrl=http://10.10.0.254:8080

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

@@ -32,7 +32,7 @@ floorMicroServiceIp=10.10.100.23
 carouselMicroServiceIp=10.10.100.23
 storecmsMicroServiceIp=192.168.253.12
 endpointUri=10.10.100.23
-recommendPort=20100
+recommendPort=20102
 # upload file
 uploadFileUrl = http://10.10.100.200:9999
 # search file
@@ -47,4 +47,5 @@ productServiceIp=http://192.168.253.12:24000
 kafka-bootstrap-servers=10.10.100.11:9292,10.10.100.12:9292,10.10.100.13:9292,10.10.100.14:9292,10.10.100.15:9292,10.10.100.16:9292
 
 #inquiry service url
-inquiryServiceUrl=http://218.17.158.219:24000
+inquiryServiceUrl=http://218.17.158.219:24000
+inquiryServiceInnerUrl=http://218.17.158.219:24000

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

@@ -115,8 +115,14 @@
 			<mvc:exclude-mapping path="/seek/qualityBuyer/getBuyerPageInfo"/>
 			<mvc:exclude-mapping path="/seek/getSeekPageInfo"/>
 			<mvc:exclude-mapping path="/seek/getSeekRanking"/>
+			<mvc:exclude-mapping path="/seek/release/template"/>
 			<bean class="com.uas.platform.b2c.core.filter.SSOInterceptor"></bean>
 		</mvc:interceptor>
+		<!-- 对所有的请求拦截,将Session中的User信息设置进SystemSession -->
+		<mvc:interceptor>
+			<mvc:mapping path="/**"></mvc:mapping>
+			<bean class="com.uas.platform.b2c.core.filter.SystemSessionInterceptor"></bean>
+		</mvc:interceptor>
 		<!-- 针对具体UAS用户,采用独立私钥签名、认证 -->
 		<mvc:interceptor>
 			<mvc:mapping path="/api/authed/**"></mvc:mapping>

+ 3 - 0
src/main/webapp/WEB-INF/views/normal/admin.html

@@ -19,6 +19,7 @@
 <link rel="stylesheet" href="static/lib/jquery/themes/summernote/css/summernote.css" />
 <link rel="stylesheet" href="static/css/common.css" />
 <link rel="stylesheet" href="static/css/admin.css" />
+<link rel="stylesheet" href="static/lib/quill/quill.snow.css" />
 </head>
 <body>
 	<!-- main content begin -->
@@ -67,6 +68,8 @@
 	</div>
 	<!-- Loading End -->
 </body>
+<script src="static/lib/quill/quill.core.js"></script>
+<script src="static/lib/quill/quill.min.js"></script>
 <script language="javascript" type="text/javascript" src="static/lib/datePicker/WdatePicker.js"></script>
 <script type="text/javascript" src="static/lib/require.js"
 	data-main="static/js/admin/main.js"></script>

+ 12 - 4
src/main/webapp/WEB-INF/views/normal/adminWithNav.html

@@ -124,15 +124,19 @@
 			<li class="nav-node"><a href="#billInfo/admin"><i
 					class="fa fa-fire"></i><span> 平台发票信息管理</span></a></li>
 			<li class="nav-node"><a href="#pay/available"><i
-					class="icon-fire"></i><span> 买家付款有效时间</span></a></li>
+					class="fa fa-fire"></i><span> 买家付款有效时间</span></a></li>
 			<li class="nav-node"><a href="#pay/exchangerate"><i
-					class="icon-fire"></i><span>汇率设置</span></a></li>
+					class="fa fa-fire"></i><span> 汇率设置</span></a></li>
+			<li class="nav-node"><a href="#fa/loanApply"><i
+					class="fa fa-fire"></i><span> 贷款申请列表</span></a></li>
 
 			<li class="nav-header">审批</li>
 			<li class="nav-node"><a href="#audit/brand"><i
 					class="fa fa-bullhorn"></i><span> 品牌</span></a></li>
-			<li class="nav-node"><a href="#brandmaintenance"><i
-					class="fa fa-bullhorn"></i><span> 品牌维护</span></a></li>
+			<li class="nav-node"><a href="#supplierSubmitList"><i
+					class="fa fa-bullhorn"></i><span> 品牌供应商</span></a></li>
+			<!--<li class="nav-node"><a href="#brandmaintenance"><i-->
+					<!--class="fa fa-bullhorn"></i><span> 品牌维护</span></a></li>-->
 			<li class="nav-node"><a href="#audit/component"><i
 					class="fa fa-shopping-cart"></i><span> 标准器件</span></a></li>
 			<li class="nav-node"><a href="#audit/componentBatchMaintenance"><i
@@ -152,6 +156,8 @@
 					class="fa fa-flag"></i><span> 品牌映射维护</span></a></li>
 			<li class="nav-node"><a href="#/store/company"><i
 					class="fa fa-flag"></i><span> 寄售管理</span></a></li>
+			<li class="nav-node"><a href="#brandmaintenance"><i
+					class="fa fa-bullhorn"></i><span> 品牌维护</span></a></li>
 			<li class="nav-node"><a href="#/store/list"><i
 					class="fa fa-flag"></i><span> 店铺管理</span></a></li>
 			<li class="nav-node"><a href="#/store/application"><i
@@ -174,6 +180,8 @@
 					class="fa fa-flag"></i><span>用户操作日志</span></a></li>
 			<li class="nav-node"><a href="#/seekQualityBuyer"><i
 					class="fa fa-flag"></i><span>优质采购商</span></a></li>
+			<li class="nav-node"><a href="#/seekSalesman"><i
+					class="fa fa-flag"></i><span>求购-业务员分配</span></a></li>
 
 			<li class="nav-header">禁用信息</li>
 			<li class="nav-node"><a href="#/disable/brand"><i

+ 1 - 0
src/main/webapp/WEB-INF/views/normal/erp/vendor_center.html

@@ -19,6 +19,7 @@
 <link rel="stylesheet" href="static/lib/calendar/calendar.css">
 <link rel="stylesheet" href="static/lib/angular/ng-table.css">
 <link rel="stylesheet" href="static/css/erp/align.css">
+<link rel="stylesheet" href="static/css/commonComponent.css" />
 </head>
 <body>
 	<!-- 消息提示框  Start-->

+ 1 - 1
src/main/webapp/resources/css/common.css

@@ -437,7 +437,7 @@ input.ng-invalid.ng-dirty,textarea.ng-invalid.ng-dirty {
 
 .loading.in {
 	display: block;
-	z-index: 99999;
+	z-index: 9999999999;
 }
 
 .loading.in>i {

BIN
src/main/webapp/resources/img/all/border_line.png


BIN
src/main/webapp/resources/img/icon/shop_icon.png


+ 61 - 36
src/main/webapp/resources/js/admin/app.js

@@ -1,4 +1,4 @@
- define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ui-form', 'ngLocal', 'ngTable', 'ngSanitize', 'ngDraggable', 'common/services', 'common/directives', 'common/query/brand', 'common/query/address', 'common/query/return' , 'common/query/change' ,'common/query/component', 'common/query/order', 'common/query/purchase', 'common/query/invoice', 'common/query/property', 'common/query/kind', 'common/query/property', 'common/query/receipt', 'common/query/logistics' ,'angular-toaster', 'ui-jquery', 'jquery-uploadify','common/query/dateParse' , 'common/query/bankTransfer' ,'common/query/bankInfo', 'common/query/urlencryption', 'common/query/bill', 'common/query/makerDemand', 'common/query/goods', 'common/query/validtime', 'file-upload','file-upload-shim', 'common/query/slideImage', 'common/query/kindAdvice', 'common/query/responseLogistics', 'common/query/search','common/directives/dynamicInput', 'common/query/auditorMail', 'common/query/tradeBasicProperties', 'common/query/exchangeRate', 'common/query/tradeDeliveryDelayTime', 'common/query/payment', 'common/query/kindContrast', 'common/query/crawlTask', 'common/query/afterSale', 'common/query/refund', 'common/query/messageBoard', 'common/query/logisticsPort', 'common/query/storeInfo', 'common/query/cms', 'common/query/help', 'common/query/commonCount', 'common/module/store_admin_violations_module', 'common/query/internalMessage','common/query/user','common/query/secQuestion','common/query/keyWord','common/query/logUsage','common/query/seekQualityBuyer'], function(angularAMD) {
+ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ui-form', 'ngLocal', 'ngTable', 'ngSanitize', 'ngDraggable', 'common/services', 'common/directives', 'common/query/brand', 'common/query/address', 'common/query/return' , 'common/query/change' ,'common/query/component', 'common/query/order', 'common/query/purchase', 'common/query/invoice', 'common/query/property', 'common/query/kind', 'common/query/property', 'common/query/receipt', 'common/query/logistics' ,'angular-toaster', 'ui-jquery', 'jquery-uploadify','common/query/dateParse' , 'common/query/bankTransfer' ,'common/query/bankInfo', 'common/query/urlencryption', 'common/query/bill', 'common/query/makerDemand', 'common/query/goods', 'common/query/validtime', 'file-upload','file-upload-shim', 'common/query/slideImage', 'common/query/kindAdvice', 'common/query/responseLogistics', 'common/query/search','common/directives/dynamicInput', 'common/query/auditorMail', 'common/query/tradeBasicProperties', 'common/query/exchangeRate', 'common/query/tradeDeliveryDelayTime', 'common/query/payment', 'common/query/kindContrast', 'common/query/crawlTask', 'common/query/afterSale', 'common/query/refund', 'common/query/messageBoard', 'common/query/logisticsPort', 'common/query/storeInfo', 'common/query/cms', 'common/query/help', 'common/query/commonCount', 'common/module/store_admin_violations_module', 'common/query/internalMessage','common/query/user','common/query/secQuestion','common/query/keyWord','common/query/logUsage','common/query/seekQualityBuyer','common/query/loanApply', 'common/query/supplier', 'common/query/seekSalesman'], function(angularAMD) {
 	'use strict';
 
 	 /**
@@ -8,7 +8,7 @@
 		 return this.length > 0 ? this[this.length - 1] : null;
 	 };
 
-	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ui.form', 'ng.local', 'ngTable', 'ngSanitize', 'ngDraggable', 'common.services', 'common.directives', 'brandServices', 'addressServices', 'returnServices', 'changeServices', 'componentServices', 'orderServices', 'purchaseServices', 'invoiceServices', 'propertyServices', 'receiptServices', 'logisticsServices', 'common.query.kind', 'toaster','ui.jquery' ,'dateparseServices', 'bankInfo' , 'bankTransfer', 'urlencryptionServices', 'billServices', 'makerDemand', 'goodsServices', 'validtimeServices', 'angularFileUpload', 'slideImageService', 'common.query.kindAdvice', 'responseLogisticsService', 'searchService', 'ngDynamicInput', 'ReviewerEmailInfoService', 'tradeBasicPropertiesServices', 'exchangeRateModule', 'tradeDeliveryDelayTimeModule', 'PaymentService', 'kindContrastServices', 'crawlTaskServices', 'afterSaleService', 'refundModule', 'messageBoardServices', 'logisticsPortService', 'storeInfoServices', 'cmsService', 'helpServices', 'commonCountServices', 'tool.directives', 'StoreAdminViolationsModule', 'internalMessageServices','common.query.user','secQuestionServices','keyWordServices','logUsageServices','seekQualityBuyerServices']);
+	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ui.form', 'ng.local', 'ngTable', 'ngSanitize', 'ngDraggable', 'common.services', 'common.directives', 'brandServices', 'addressServices', 'returnServices', 'changeServices', 'componentServices', 'orderServices', 'purchaseServices', 'invoiceServices', 'propertyServices', 'receiptServices', 'logisticsServices', 'common.query.kind', 'toaster','ui.jquery' ,'dateparseServices', 'bankInfo' , 'bankTransfer', 'urlencryptionServices', 'billServices', 'makerDemand', 'goodsServices', 'validtimeServices', 'angularFileUpload', 'slideImageService', 'common.query.kindAdvice', 'responseLogisticsService', 'searchService', 'ngDynamicInput', 'ReviewerEmailInfoService', 'tradeBasicPropertiesServices', 'exchangeRateModule', 'tradeDeliveryDelayTimeModule', 'PaymentService', 'kindContrastServices', 'crawlTaskServices', 'afterSaleService', 'refundModule', 'messageBoardServices', 'logisticsPortService', 'storeInfoServices', 'cmsService', 'helpServices', 'commonCountServices', 'tool.directives', 'StoreAdminViolationsModule', 'internalMessageServices','common.query.user','secQuestionServices','keyWordServices','logUsageServices','seekQualityBuyerServices', 'loanApplyService', 'supplierServices', 'seekSalesmanServices']);
 	app.init = function() {
 		angularAMD.bootstrap(app);
 	};
@@ -310,6 +310,24 @@
 			templateUrl : 'static/view/admin/brand_maintenance_detail.html',
 			controller : 'BrandMaintenanceDetailCtrl',
 			controllerUrl : 'app/controllers/BrandMaintenanceDetailCtrl'
+		})).state('suppliermaintenance', angularAMD.route({
+			// 供应商维护
+			url: '/suppliermaintenance/:uuid',
+			templateUrl : 'static/view/admin/supplier_maintenance.html',
+			controller : 'supplierMaintenanceCtrl',
+			controllerUrl : 'app/controllers/supplierMaintenanceCtrl'
+		})).state('supplierSubmitList', angularAMD.route({
+			// 供应商申请列表
+			url: '/supplierSubmitList',
+			templateUrl : 'static/view/admin/supplier_submit_list.html',
+			controller : 'SupplierSubmitListCtrl',
+			controllerUrl : 'app/controllers/SupplierSubmitListCtrl'
+		})).state('supplierSubmitDetail', angularAMD.route({
+			// 供应商申请详情
+			url: '/supplierSubmit/:id',
+			templateUrl : 'static/view/admin/supplier_submit_detail.html',
+			controller : 'SupplierSubmitDetailCtrl',
+			controllerUrl : 'app/controllers/SupplierSubmitDetailCtrl'
 		})).state('mgr', angularAMD.route({
 			// 类目审批
 			url: '/audit/kind',
@@ -395,12 +413,12 @@
 			controller: 'AuditBankInfoCtrl',
 			controllerUrl: 'app/controllers/bankInfo/AuditBankInfoCtrl'
 		})).state('audit_realAuth', angularAMD.route({
-      // 实名认证审核
-      url: '/audit/realAuth',
-      templateUrl: 'static/view/admin/audit_realAuth.html',
-      controller: 'AuditRealAuthCtrl',
-      controllerUrl: 'app/controllers/AuditRealAuthCtrl'
-    })).state('uploadComponentCrawl', angularAMD.route({
+			// 实名认证审核
+			url: '/audit/realAuth',
+			templateUrl: 'static/view/admin/audit_realAuth.html',
+			controller: 'AuditRealAuthCtrl',
+			controllerUrl: 'app/controllers/AuditRealAuthCtrl'
+		})).state('uploadComponentCrawl', angularAMD.route({
 			// 上传爬取数据页面
 			url: '/product/componentCrawl/upload',
 			templateUrl : 'static/view/admin/product/uploadComponentCrawl.html',
@@ -597,26 +615,26 @@
 			controllerUrl: 'app/controllers/product/KindAdviceCtrl',
 			title: '轮播图片管理'
 		})).state('logUsage', angularAMD.route({
-      //用户操作日志
-      url: '/logUsage',
-      templateUrl: 'static/view/admin/logUsage.html',
-      controller: 'LogUsageCtrl',
-      controllerUrl: 'app/controllers/LogUsageCtrl',
-      title: '用户操作日志'
-    })).state('seekQualityBuyer', angularAMD.route({
-      //用户操作日志
-      url: '/seekQualityBuyer',
-      templateUrl: 'static/view/admin/seekQualityBuyer.html',
-      controller: 'SeekQualityBuyerCtrl',
-      controllerUrl: 'app/controllers/SeekQualityBuyerCtrl',
-      title: '用户操作日志'
-    })).state('keyWord', angularAMD.route({
-      url: '/keyWord',
-      templateUrl: 'static/view/admin/keyword.html',
-      controller: 'KeyWordCtrl',
-      controllerUrl: 'app/controllers/KeyWordCtrl',
-      title: '非法关键词维护'
-    })).state('slideImage', angularAMD.route({
+			//用户操作日志
+			url: '/logUsage',
+			templateUrl: 'static/view/admin/logUsage.html',
+			controller: 'LogUsageCtrl',
+			controllerUrl: 'app/controllers/LogUsageCtrl',
+			title: '用户操作日志'
+		})).state('seekQualityBuyer', angularAMD.route({
+			//用户操作日志
+			url: '/seekQualityBuyer',
+			templateUrl: 'static/view/admin/seekQualityBuyer.html',
+			controller: 'SeekQualityBuyerCtrl',
+			controllerUrl: 'app/controllers/SeekQualityBuyerCtrl',
+			title: '用户操作日志'
+    	})).state('keyWord', angularAMD.route({
+			url: '/keyWord',
+			templateUrl: 'static/view/admin/keyword.html',
+			controller: 'KeyWordCtrl',
+			controllerUrl: 'app/controllers/KeyWordCtrl',
+			title: '非法关键词维护'
+    	})).state('slideImage', angularAMD.route({
 			// 首页展示(轮播图片管理)
 			url: '/operation/slideImage',
 			templateUrl: 'static/view/admin/operation/slideImage.html',
@@ -624,13 +642,13 @@
 			controllerUrl: 'app/controllers/operation/SlideImageCtrl',
 			title: '轮播图片管理'
 		})).state('secQuestion', angularAMD.route({
-      // 密保问题维护
-      url: '/secQuestion',
-      templateUrl: 'static/view/admin/sec_question.html',
-      controller: 'SecQuestionCtrl',
-      controllerUrl: 'app/controllers/SecQuestionCtrl',
-      title: '密保问题维护'
-    })).state('logisticsCompany', angularAMD.route({
+			// 密保问题维护
+			url: '/secQuestion',
+			templateUrl: 'static/view/admin/sec_question.html',
+			controller: 'SecQuestionCtrl',
+			controllerUrl: 'app/controllers/SecQuestionCtrl',
+			title: '密保问题维护'
+    	})).state('logisticsCompany', angularAMD.route({
 			// 首页展示(快递公司管理)
 			url: '/logistics/company',
 			templateUrl: 'static/view/admin/logistics/logistics_company.html',
@@ -762,7 +780,14 @@
 			controller: 'internalMessageListCtrl',
 			controllerUrl: 'app/controllers/common/message/internalMessageListCtrl',
 			title: '消息列表'
-		}));
+		})).state('loanApplyList', angularAMD.route({
+            // 消息列表
+            url: '/fa/loanApply',
+            templateUrl: 'static/view/admin/fa/loanApplyList.html',
+            controller: 'LoanApplyListCtrl',
+            controllerUrl: 'app/controllers/fa/LoanApplyListCtrl',
+            title: '贷款申请列表'
+        }));
 		
 		$httpProvider.interceptors.push(['Loading', '$q', function(Loading, $q) {
 			return {

+ 60 - 0
src/main/webapp/resources/js/admin/controllers/SeekSalesmanCtrl.js

@@ -0,0 +1,60 @@
+define(['app/app'], function (app) {
+  'use strict';
+  app.register.controller('SeekSalesmanCtrl', ['$scope', 'seekSalesman', 'toaster', 'BaseService','$modal','ngTableParams', '$http', function ($scope, seekSalesman, toaster, BaseService,$modal,ngTableParams, $http) {
+      $scope.seek_status = 0;
+      $scope.seek_salesman = 0;
+    $scope.seekSalesmanTableParams = new ngTableParams({
+      page : 1,
+      count : 10
+    }, {
+      total : 0,
+      getData : function ($defer, params) {
+        const param = BaseService.parseParams(params.url());
+          param.status = $scope.seek_status;
+          param.salesman = $scope.seek_salesman;
+          param.keyword = $scope.keyword;
+          seekSalesman.getPageInfo(param, function (data) {
+          params.total(data.totalElements);
+          $defer.resolve(data.content);
+        }, function(response) {
+          toaster.pop('error', response.data);
+        });
+      }
+    });
+
+    seekSalesman.getMembers(function(data){
+        $scope.members = data;
+    });
+
+
+    $scope.onSearchKeyWord = function() {
+      $scope.seekSalesmanTableParams.reload();
+   }
+
+    $scope.onSearchStatus = function(seek_status) {
+        $scope.seek_status = seek_status;
+        $scope.seekSalesmanTableParams.reload();
+    }
+
+    $scope.onSearchSalesman = function(seek_salesman) {
+        $scope.seek_salesman = seek_salesman;
+        $scope.seekSalesmanTableParams.reload();
+    }
+
+
+
+    $scope.orders = function(id){
+        seekSalesman.orders({id:id},{}, function(data) {
+           if (data.code == 1) {
+               toaster.pop('success', '提示', '接单成功!');
+               $scope.seekSalesmanTableParams.reload();
+           } else {
+               toaster.pop('error', '错误', data.message);
+           }
+        }, function(response) {
+            toaster.pop('error', response.data);
+        });
+    }
+
+  }]);
+});

+ 56 - 0
src/main/webapp/resources/js/admin/controllers/SeekSalesmanDetailCtrl.js

@@ -0,0 +1,56 @@
+define(['app/app'], function (app) {
+    'use strict';
+    app.register.controller('SeekSalesmanDetailCtrl', ['$scope', 'seekSalesman', 'toaster', 'BaseService', '$http', '$stateParams', function ($scope, seekSalesman, toaster, BaseService, $http, $stateParams) {
+        $scope.active = 'offer';
+        $scope.status = 101;
+        $scope.salesman_name = $stateParams.name;
+        //设置状态
+        $scope.setActive = function (active) {
+            if($scope.active != active) {
+                $scope.active = active;
+                switch ($scope.active) {
+                    case 'offer':
+                        $scope.status = 101;
+                        break;
+                    case 'goods':
+                        $scope.status = 104;
+                        break;
+                    case 'pricing':
+                        $scope.status = 103;
+                        break;
+                }
+                // $scope.bankInfoTableParams.page(1);
+                // $scope.bankInfoTableParams.reload();
+            }
+        };
+        seekSalesman.getSeekUrl({}, function(data1) {
+            var seekUrl = data1.url;
+            $http({
+                method: 'get',
+                dataType: 'json',
+                url: seekUrl + '/inquiry/buyer/quotation',
+                params: {id: $stateParams.uuid}
+            }).success(function (data) {
+                $scope.seek = data;
+                seekSalesman.getMallGoodsList({code: data.cmpCode, brand: data.inbrand}, function (data1) {
+                    $scope.goods = data1;
+                });
+            }).error(function (response) {
+
+            });
+        });
+
+        $scope.orders = function(){
+            seekSalesman.orders({id: $stateParams.uuid},{}, function(data) {
+                if (data.code == 1) {
+                    toaster.pop('success', '提示', '接单成功!');
+                    $scope.seekSalesmanTableParams.reload();
+                } else {
+                    toaster.pop('error', '错误', data.message);
+                }
+            }, function(response) {
+                toaster.pop('error', response.data);
+            });
+        }
+    }]);
+});

+ 153 - 0
src/main/webapp/resources/js/admin/controllers/SupplierSubmitDetailCtrl.js

@@ -0,0 +1,153 @@
+define([ 'app/app' ], function(app) {
+	//供应商维护
+	app.register.controller('SupplierSubmitDetailCtrl', ['$scope', 'ngTableParams', 'toaster', 'BrandActive', '$stateParams', 'SupplierSubmit', 'Supplier', 'BaseService', '$window', 'StoreInfo', function($scope, ngTableParams, toaster, BrandActive, $stateParams, SupplierSubmit, Supplier, BaseService, $window, StoreInfo) {
+
+		// 获取申请信息
+		var getData = function () {
+			SupplierSubmit.get({id: $stateParams.id}, function (data) {
+				$scope.supplier = data;
+				getBrand($scope.supplier.branduuid);
+			}, function (response) {
+				toaster.pop('数据获取失败,请刷新重试');
+			})
+		};
+		
+		// 获取品牌信息
+		var getBrand = function (uuid) {
+			BrandActive.get({uuid : uuid}, {}, function(data){
+				$scope.brand = data;
+			}, function(res){
+				toaster.pop('error', '品牌详情数据加载失败', res.data);
+			});
+		};
+
+		getData();
+
+		// 获取供应商列表
+		$scope.supplierTableParams = new ngTableParams({
+			page : 1,
+			count : 5,
+			sorting : {
+				nameEn : 'ASC'
+			}
+		}, {
+			total : 0,
+			getData : function($defer, params) {
+				var param = BaseService.parseParams(params.url());
+				param.keyword = $scope.keyword;
+				Supplier.getPage(param, function(page) {
+					if (page) {
+						params.total(page.totalElements);
+						$defer.resolve(page.content);
+					}
+				});
+			}
+		});
+
+		/**
+		 * 选择店铺类型
+		 *
+		 * @param type	店铺类型
+		 */
+		$scope.chooseStoreType = function (type) {
+			if (!type || type === '')
+				return 0;
+			$scope.storeType = type;
+			$scope.storeStatus = '';
+
+			$scope.storeTableParams.page(1);
+			$scope.storeTableParams.reload();
+		};
+
+		/**
+		 * 根据关键字进行搜索
+		 */
+		$scope.refreshTableData = function () {
+			$scope.storeTableParams.page(1);
+			$scope.storeTableParams.reload();
+		};
+
+		/**
+		 * 选择店铺
+		 * @param supplier 供应商
+		 * @param store 店铺
+		 */
+		$scope.chooseStore = function (supplier, store) {
+			supplier.storeIn = store;
+			supplier.chooseStoreAssociated = false;
+		};
+
+		/**
+		 * 获取店铺信息
+		 */
+		var getStoreData = function () {
+			$scope.storeTableParams = new ngTableParams({
+				page : 1,
+				count : 5,
+				sorting : {
+					updateTime : 'DESC'
+				}
+			}, {
+				total : 0,
+				getData : function($defer, params) {
+					$scope.loading = true;
+					var param = BaseService.parseParams(params.url());
+					// 过滤店铺类型
+					if ($scope.storeType && $scope.storeType !== '' && $scope.storeType !== 'ALL') {
+						param.type = $scope.storeType;
+					}
+					// 根据关键字进行搜索
+					if ($scope.keyword && $scope.keyword !== '') {
+						param.keyword = $scope.keyword;
+					}
+					StoreInfo.pageStoreInfoWhenAdminQuery(param, function (data) {
+						if (!data.content || !Array.isArray(data.content)) {
+							data.content = [];
+						}
+						angular.forEach(data.content, function (store) {
+							var tags = JSON.parse(store.tags || '[]');
+							store.tagsObject = {};
+							for (var i = 0; i < tags.length; i++) {
+								store.tagsObject[tags[i]] = true;
+							}
+						});
+						$defer.resolve(data.content);
+						params.total(data.totalElements);
+					});
+				}
+			});
+		};
+
+		/**
+		 * 开关关联店铺
+		 * @param supplier 供应商
+		 */
+		$scope.storeAssociated = function (supplier){
+			supplier.chooseStoreAssociated = typeof supplier.chooseStoreAssociated == 'undefined' ? true : !supplier.chooseStoreAssociated;
+			if (supplier.chooseStoreAssociated) {
+				getStoreData();
+			}
+		};
+
+		// 审核通过
+		$scope.audit = function () {
+			$scope.supplier.storeuuid = $scope.supplier.storeIn == null ? null : $scope.supplier.storeIn.uuid;
+			SupplierSubmit.audit({}, $scope.supplier, function (data) {
+				toaster.pop('success', '审核通过');
+				$window.location.reload();
+			}, function (response) {
+				toaster.pop('error', response.data);
+			});
+		};
+
+		// 审核不通过
+		$scope.unaudit = function () {
+			SupplierSubmit.unaudit({id: $scope.supplier.id}, {}, function (data) {
+				toaster.pop('success', '审核不通过');
+				$window.location.reload();
+			}, function (response) {
+				toaster.pop('error', response.data);
+			});
+		};
+	}]);
+});

+ 60 - 0
src/main/webapp/resources/js/admin/controllers/SupplierSubmitListCtrl.js

@@ -0,0 +1,60 @@
+define([ 'app/app' ], function(app) {
+    //品牌审批
+    app.register.controller('SupplierSubmitListCtrl', ['$scope', 'ngTableParams', 'SupplierSubmit', 'BaseService', function($scope, ngTableParams, SupplierSubmit, BaseService) {
+        BaseService.scrollBackToTop();
+
+        $scope.active = 'unAudited';
+
+        $scope.keyword = "";
+        $scope.setActive = function(state) {
+            if($scope.active != state) {
+                $scope.active = state;
+                if($scope.supplierTableParams.page() == 1)
+                    $scope.supplierTableParams.reload();
+                else
+                    $scope.supplierTableParams.page(1);
+            }
+        };
+
+        var getStatus = function() {
+            var status = 601;
+            switch($scope.active) {
+                case 'all' :
+                    break;
+                case 'unAudited' :
+                    status = 101; break;
+                case 'allow' :
+                    status = 102; break;
+                case 'notAllow' :
+                    status = 103; break;
+            }
+            return  status;
+        };
+
+        $scope.supplierTableParams = new ngTableParams({
+            page : 1,
+            count : 50,
+            sorting : {
+                updatetime: 'DESC'
+            }
+        }, {
+            total : 0,
+            getData : function($defer, params) {
+                var param = BaseService.parseParams(params.url());
+                param.keyword = $scope.keyword;
+                param.status = getStatus();
+                SupplierSubmit.getPage(param, function(page) {
+                    if (page) {
+                        params.total(page.totalElements);
+                        $defer.resolve(page.content);					}
+                });
+            }
+        });
+
+        $scope.onSearch = function() {
+            $scope.supplierTableParams.page(1);
+            $scope.supplierTableParams.reload();
+        }
+
+    }]);
+});

+ 20 - 12
src/main/webapp/resources/js/admin/controllers/ads/ads_brand.js

@@ -29,12 +29,16 @@ define([ 'app/app' ], function(app) {
         loadData();
 
         $scope.weight = function(brand){
-            BrandActive.setSimpleInfoWeight({weight: brand.inputWeight}, brand, function(data){
-                toaster.pop('success', '处理成功', '【' + data[0].nameCn + '】' + '禁用成功');
-                loadData();
-            }, function(res){
-                toaster.pop('error', '错误', res.data);
-            })
+            if (angular.isDefined(brand.inputWeight)) {
+                BrandActive.setSimpleInfoWeight({weight: brand.inputWeight}, brand, function(data){
+                    toaster.pop('success', '处理成功', '【' + data[0].nameCn + '】' + '禁用成功');
+                    loadData();
+                }, function(res){
+                    toaster.pop('error', '错误', res.data);
+                })
+            } else [
+                toaster.pop('warning', '请先在右侧输入权重值')
+            ]
         };
         $scope.disweight = function(brand){
             BrandActive.setSimpleInfoWeight({weight: 0}, brand, function(data){
@@ -49,12 +53,16 @@ define([ 'app/app' ], function(app) {
             })
         };
         $scope.updateweight = function(brand){
-            BrandActive.setSimpleInfoWeight({weight: brand.inputWeight}, brand, function(data){
-                toaster.pop('success', '处理成功', '【' + data.nameCn + '】' + '已修改推广');
-                $scope.load('weight');
-            }, function(res){
-                toaster.pop('error', '错误', res.data);
-            })
+            if (angular.isDefined(brand.inputWeight)) {
+                BrandActive.setSimpleInfoWeight({weight: brand.inputWeight}, brand, function(data){
+                    toaster.pop('success', '处理成功', '【' + data.nameCn + '】' + '已修改推广');
+                    $scope.load('weight');
+                }, function(res){
+                    toaster.pop('error', '错误', res.data);
+                })
+            } else {
+                toaster.pop('warning', '请先在右侧输入权重值')
+            }
         };
 
     }]);

+ 20 - 12
src/main/webapp/resources/js/admin/controllers/ads/ads_component.js

@@ -30,12 +30,16 @@ define([ 'app/app' ], function(app) {
         loadData();
 
         $scope.weight = function(brand){
-            ComponentActive.setSimpleInfoWeight({weight: brand.inputWeight}, brand, function(data){
-                toaster.pop('success', '处理成功', '【' + data[0].code + '】' + '禁用成功');
-                loadData();
-            }, function(res){
-                toaster.pop('error', '错误', res.data);
-            })
+            if (angular.isDefined(brand.inputWeight)) {
+                ComponentActive.setSimpleInfoWeight({weight: brand.inputWeight}, brand, function(data){
+                    toaster.pop('success', '处理成功', '【' + data[0].code + '】' + '禁用成功');
+                    loadData();
+                }, function(res){
+                    toaster.pop('error', '错误', res.data);
+                })
+            } else {
+                toaster.pop('warning', '请先在右侧输入权重值');
+            }
         };
         $scope.disweight = function(brand){
             ComponentActive.setSimpleInfoWeight({weight: 0}, brand, function(data){
@@ -50,12 +54,16 @@ define([ 'app/app' ], function(app) {
             })
         };
         $scope.updateweight = function(brand){
-            ComponentActive.setSimpleInfoWeight({weight: brand.inputWeight}, brand, function(data){
-                toaster.pop('success', '处理成功', '【' + data.code + '】' + '已修改推广');
-                $scope.load('weight');
-            }, function(res){
-                toaster.pop('error', '错误', res.data);
-            })
+            if (angular.isDefined(brand.inputWeight)) {
+                ComponentActive.setSimpleInfoWeight({weight: brand.inputWeight}, brand, function(data){
+                    toaster.pop('success', '处理成功', '【' + data.code + '】' + '已修改推广');
+                    $scope.load('weight');
+                }, function(res){
+                    toaster.pop('error', '错误', res.data);
+                })
+            } else {
+                toaster.pop('warning', '请先在右侧输入权重值');
+            }
         };
 
         $scope.searchComponent = function(keyword){

+ 24 - 0
src/main/webapp/resources/js/admin/controllers/fa/LoanApplyListCtrl.js

@@ -0,0 +1,24 @@
+define(['app/app'], function (app) {
+  'use strict';
+  app.register.controller('LoanApplyListCtrl', ['$scope', 'ngTableParams', 'LoanApply', 'toaster', 'BaseService', function ($scope, ngTableParams, LoanApply, toaster, BaseService) {
+    //table设置
+    $scope.logUsageTableParams = new ngTableParams({
+      page : 1,
+      count : 20
+    }, {
+      total : 0,
+      getData : function ($defer, params) {
+        $scope.paginationParams = params;
+        const param = BaseService.parseParams(params.url());
+          LoanApply.getAllByPage(param, function (data) {
+          params.total(data.totalElements);
+          $defer.resolve(data.content);
+        }, function (response) {
+          toaster.pop('error', '获取用户贷款申请列表失败');
+        });
+      }
+    });
+
+
+  }]);
+});

+ 53 - 13
src/main/webapp/resources/js/admin/controllers/help/HelpDetailCtrl.js

@@ -3,7 +3,7 @@
  */
 define(['app/app'], function(app) {
     'use strict';
-    app.register.controller('HelpDetailCtrl', ['$scope', '$modal', 'HelpIssue', 'toaster', '$stateParams', 'HelpAPI', '$state', function ($scope, $modal, HelpIssue, toaster, $stateParams, HelpAPI, $state) {
+    app.register.controller('HelpDetailCtrl', ['$scope', '$modal', 'HelpIssue', 'toaster', '$stateParams', 'HelpAPI', '$state', '$http', 'BaseService', 'HelpUpload', '$q', function ($scope, $modal, HelpIssue, toaster, $stateParams, HelpAPI, $state, $http, BaseService, HelpUpload, $q) {
 
         HelpIssue.get({id : $stateParams.id}, function (data) {
             $scope.issue = data;
@@ -31,6 +31,26 @@ define(['app/app'], function(app) {
             }
         });
 
+        $scope.rootPath = BaseService.getRootPath();
+        function switchBase64ToImg(el) {
+            var deferred = $q.defer();
+            var data = el.src;
+            var arr = data.split(','), mime = arr[0].match(/:(.*?);/)[1],
+                bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
+            while(n--){
+                u8arr[n] = bstr.charCodeAt(n);
+            }
+            var obj = new Blob([u8arr], {type:mime});
+            var fd = new FormData();
+            fd.append("upfile", obj, "image.png");
+            return HelpUpload.upload(fd, function (data) {
+                el.src = data[0].path;
+                // console.log(el);
+            }, function (err) {
+                toaster.pop('error', '上传失败');
+            })
+        }
+
         // 选择导航
         $scope.chooseNav = function() {
             var modalInstance = $modal.open({
@@ -52,12 +72,22 @@ define(['app/app'], function(app) {
         $scope.save = function () {
             $scope.issue.article = quill.container.innerHTML.replace('\<input type="text" data-formula="e=mc^2" data-link="https://quilljs.com" data-video="Embed URL">','').replace('contenteditable="true"', 'contenteditable="false"');
             $scope.issue.content = angular.toJson(quill.getContents());
-            HelpIssue.update({}, $scope.issue, function (data) {
-                toaster.pop('success', '保存成功');
-                $state.go('helpPublish');
-                window.location.href ='admin_n#/help/publish';// quilljs锁定了跳转 必须这样跳两次才有效
-            }, function(response) {
-                toaster.pop('error', response.data);
+            var els = $($scope.issue.article);
+            var imgs = els.find('img');
+            var promises = [];
+            angular.forEach(imgs, function (img) {
+                promises.push(switchBase64ToImg(img).$promise);
+            })
+            $q.all(promises).then(function () {
+                // console.log(els.html());
+                $scope.issue.article = els.html()
+                HelpIssue.update({}, $scope.issue, function (data) {
+                    toaster.pop('success', '保存成功');
+                    $state.go('helpPublish');
+                    window.location.href ='admin_n#/help/publish';// quilljs锁定了跳转 必须这样跳两次才有效
+                }, function(response) {
+                    toaster.pop('error', response.data);
+                });
             });
         };
 
@@ -65,12 +95,22 @@ define(['app/app'], function(app) {
         $scope.publish = function () {
             $scope.issue.article = quill.container.innerHTML.replace('\<input type="text" data-formula="e=mc^2" data-link="https://quilljs.com" data-video="Embed URL">','').replace('contenteditable="true"', 'contenteditable="false"');
             $scope.issue.content = angular.toJson(quill.getContents());
-            HelpIssue.publish({}, $scope.issue, function (data) {
-                toaster.pop('success', '发布成功');
-                $state.go('helpPublish');
-                window.location.href = 'admin_n#/help/publish';
-            }, function(response) {
-                toaster.pop('error', response.data);
+            var els = $($scope.issue.article);
+            var imgs = els.find('img');
+            var promises = [];
+            angular.forEach(imgs, function (img) {
+                promises.push(switchBase64ToImg(img).$promise);
+            })
+            $q.all(promises).then(function () {
+                // console.log(els.html());
+                $scope.issue.article = els.html()
+                HelpIssue.publish({}, $scope.issue, function (data) {
+                    toaster.pop('success', '发布成功');
+                    $state.go('helpPublish');
+                    window.location.href = 'admin_n#/help/publish';
+                }, function(response) {
+                    toaster.pop('error', response.data);
+                });
             });
         };
         

+ 37 - 7
src/main/webapp/resources/js/admin/controllers/help/HelpEditCtrl.js

@@ -1,6 +1,6 @@
 define(['app/app'], function(app) {
     'use strict';
-    app.register.controller('HelpEditCtrl', ['$scope', '$modal', 'HelpIssue', 'toaster', '$state', function ($scope, $modal, HelpIssue, toaster, $state) {
+    app.register.controller('HelpEditCtrl', ['$scope', '$modal', 'HelpIssue', 'toaster', '$state', '$http', 'BaseService', 'HelpUpload', '$q', function ($scope, $modal, HelpIssue, toaster, $state, $http, BaseService, HelpUpload, $q) {
 
         $scope.issue = {};
 
@@ -31,16 +31,46 @@ define(['app/app'], function(app) {
             });
         };
 
+        $scope.rootPath = BaseService.getRootPath();
+        function switchBase64ToImg(el) {
+            var deferred = $q.defer();
+            var data = el.src;
+            var arr = data.split(','), mime = arr[0].match(/:(.*?);/)[1],
+                bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
+            while(n--){
+                u8arr[n] = bstr.charCodeAt(n);
+            }
+            var obj = new Blob([u8arr], {type:mime});
+            var fd = new FormData();
+            fd.append("upfile", obj, "image.png");
+            return HelpUpload.upload(fd, function (data) {
+                el.src = data[0].path;
+                // console.log(el);
+            }, function (err) {
+                toaster.pop('error', '上传失败');
+            })
+        }
+        
         // 保存
         $scope.save = function () {
             $scope.issue.article = quill.container.innerHTML.replace('\<input type="text" data-formula="e=mc^2" data-link="https://quilljs.com" data-video="Embed URL">','').replace('contenteditable="true"', 'contenteditable="false"');
             $scope.issue.content = angular.toJson(quill.getContents());
-            HelpIssue.save({}, $scope.issue, function (data) {
-                toaster.pop('success', '保存成功');
-                $state.go('helpDetail',{id : data.id});
-                window.location.href = '#/help/issue/' + data.id;// quilljs锁定了跳转 必须这样跳两次才有效
-            }, function(response) {
-                toaster.pop('error', response.data);
+            var els = $($scope.issue.article);
+            var imgs = els.find('img');
+            var promises = [];
+            angular.forEach(imgs, function (img) {
+                promises.push(switchBase64ToImg(img).$promise);
+            })
+            $q.all(promises).then(function () {
+                // console.log(els.html());
+                $scope.issue.article = els.html()
+                HelpIssue.save({}, $scope.issue, function (data) {
+                    toaster.pop('success', '保存成功');
+                    $state.go('helpDetail',{id : data.id});
+                    window.location.href = '#/help/issue/' + data.id;// quilljs锁定了跳转 必须这样跳两次才有效
+                }, function(response) {
+                    toaster.pop('error', response.data);
+                });
             });
         };
 

+ 319 - 0
src/main/webapp/resources/js/admin/controllers/supplierMaintenanceCtrl.js

@@ -0,0 +1,319 @@
+define([ 'app/app' ], function(app) {
+	//供应商维护
+	app.register.controller('supplierMaintenanceCtrl', ['$scope', 'ngTableParams', 'toaster', 'BrandActive', '$stateParams', 'SupplierSubmit', 'Loading', 'BaseService', '$window', 'Supplier', 'StoreInfo', '$upload', function($scope, ngTableParams, toaster, BrandActive, $stateParams, SupplierSubmit, Loading, BaseService, $window, Supplier, StoreInfo, $upload) {
+		$scope.storeType = '';
+		$scope.addedSupplier = false;
+		$scope.brandKeyword = '';
+
+		// 根据路由地址获取品牌信息
+		var getBrand = function () {
+			BrandActive.get({uuid : $stateParams.uuid}, {}, function(data){
+				$scope.brand = data;
+			}, function(res){
+				toaster.pop('error', '品牌详情数据加载失败', res.data);
+			});
+		};
+		getBrand();
+
+        // 获取供应商信息
+		var loadSupplier = function () {
+			$scope.supplierTableParams = new ngTableParams({
+				page : 1,
+				count : 5,
+				sorting : {
+					submitTime : 'DESC'
+				}
+			}, {
+				total : 0,
+				getData : function($defer, params) {
+					$scope.loading = true;
+					var param = BaseService.parseParams(params.url());
+					param.uuid = $stateParams.uuid;
+					Supplier.getPage(param, function(data){
+						$defer.resolve(data.content);
+						params.total(data.totalElements);
+						$scope.suppliersData = data.content;
+						angular.forEach($scope.suppliersData, function (item) {
+							item.edit = false;
+						})
+						$scope.addedSupplier = false;
+					})
+				}
+			});
+		};
+        loadSupplier();
+
+		// 删除供应商信息
+		$scope.deleteSupplier = function(flag, supplier) {
+			SupplierSubmit.deleteById({id : flag}, function(){
+				toaster.pop('info', '提示', "删除申请已提交待审核");
+			});
+			supplier.edit = false;
+			$scope.supplierTableParams.page(1);
+			$scope.supplierTableParams.reload();
+		};
+
+		// 取消修改供应商信息
+		$scope.cancelSupplier = function (supplier) {
+			supplier.storeIn =supplier.oldStoreIn;
+			toaster.pop('info', '提示', "取消修改");
+			supplier.edit = false;
+		};
+
+		// 下载模板
+		$scope.download = function () {
+			Loading.show();
+			window.location.href = BaseService.getRootPath() + '/produce/vendorSubmit/template';
+			Loading.hide();
+		};
+
+		// 新增供应商信息
+		$scope.addSupplier = function() {
+			angular.forEach($scope.suppliersData, function (item) {
+				item.edit = false;
+			})
+			$scope.addedSupplier = !$scope.addedSupplier
+		};
+
+		// 保存新增供应商信息
+		$scope.sure = function(supplier) {
+			supplier.img = supplier.editImg;
+			supplier.branduuid = $stateParams.uuid;
+			supplier.storeuuid = supplier.storeIn == null ? null : supplier.storeIn.uuid;
+            if (!supplier.vendorName) {
+                toaster.pop('error', '代理商名称不能为空');
+                return;
+            }
+			SupplierSubmit.submit({},supplier,function(data){
+				toaster.pop('success', '提示', "申请成功");
+				data.isSubmited = '2';
+				$scope.supplierTableParams.data.push(data);
+				$scope.supplier = {};
+				$scope.addedSupplier = false;
+			},function(res){
+				toaster.pop('error', '警告', res.data);
+			});
+		};
+
+		// 取消保存新增供应商
+		$scope.cancelAddSupplier = function () {
+			toaster.pop('info', '提示', "取消新增");
+			$scope.supplier = {};
+			$scope.addedSupplier = false;
+		};
+
+		// 更改供应商信息
+		$scope.changeSupplier = function (supplier) {
+			angular.forEach($scope.suppliersData, function (item) {
+				item.edit = false;
+			})
+			supplier.oldStoreIn = supplier.storeIn;
+			supplier.edit = true;
+			supplier.editImg = supplier.img;
+			supplier.editVendorName = supplier.vendorName;
+			supplier.editLicense = supplier.license;
+			supplier.editDetailAddress = supplier.detailAddress;
+			supplier.editTel = supplier.tel;
+			supplier.editFax = supplier.fax;
+			supplier.editWebsite = supplier.website;
+			supplier.editEmail = supplier.email;
+			supplier.vendorid = supplier.id;
+			$scope.addedSupplier = false;
+		};
+
+		// 保存更改后的供应商信息
+		$scope.updateSupplier = function(supplier){
+			var updateSupplier = inverseSupplier(supplier)
+			if (!updateSupplier.vendorName) {
+				toaster.pop('error', '代理商名称不能为空');
+				return;
+			}
+			SupplierSubmit.updateSupplier({}, updateSupplier, function(data){
+				toaster.pop('success', '供应商信息申请成功');
+				supplier.edit = false;
+				$scope.supplierTableParams.page(1);
+				$scope.supplierTableParams.reload();
+			}, function(response){
+				toaster.pop('error', '申请失败', response.data);
+			});
+		};
+
+        /**
+         * 初始化修改的供应商信息
+         * @param supplier 供应商信息
+         */
+		var inverseSupplier = function (supplier) {
+			var a = {};
+            a.img = supplier.editImg;
+            a.vendorName = supplier.editVendorName;
+            a.license = supplier.editLicense;
+            a.detailAddress = supplier.editDetailAddress;
+            a.tel = supplier.editTel;
+            a.fax = supplier.editFax;
+            a.website = supplier.editWebsite;
+            a.email = supplier.editEmail;
+            a.vendorid = supplier.id != null ? supplier.id : null;
+            a.branduuid = $stateParams.uuid;
+            a.storeuuid = supplier.storeIn == null ? null : supplier.storeIn.uuid;
+            return a;
+		};
+
+		/**
+		 * 获取店铺信息
+		 */
+		var getStoreData = function () {
+            $scope.storeTableParams = new ngTableParams({
+                page : 1,
+                count : 5,
+                sorting : {
+                    updateTime : 'DESC'
+                }
+            }, {
+                total : 0,
+                getData : function($defer, params) {
+                    $scope.loading = true;
+                    var param = BaseService.parseParams(params.url());
+                    // 过滤店铺类型
+                    if ($scope.storeType && $scope.storeType !== '' && $scope.storeType !== 'ALL') {
+                        param.type = $scope.storeType;
+                    }
+                    // 根据关键字进行搜索
+                    if ($scope.brandKeyword && $scope.brandKeyword !== '') {
+                        param.keyword = $scope.brandKeyword;
+                    }
+					StoreInfo.pageStoreInfoWhenAdminQuery(param, function (data) {
+						if (!data.content || !Array.isArray(data.content)) {
+							data.content = [];
+						}
+						angular.forEach(data.content, function (store) {
+							var tags = JSON.parse(store.tags || '[]');
+							store.tagsObject = {};
+							for (var i = 0; i < tags.length; i++) {
+								store.tagsObject[tags[i]] = true;
+							}
+						});
+						$defer.resolve(data.content);
+						params.total(data.totalElements);
+					});
+                }
+            });
+        };
+
+		// 上传Excel批量申请(大量)
+		$scope.upload = function() {
+			var file = $scope.myFiles[0];
+			$upload.upload({
+				url: 'produce/vendorSubmit/upload',
+				file: file,
+				method: 'POST'
+			}).success(function(data) {
+				toaster.pop('success', '提示', '提交成功');
+			}).error(function(response) {
+				toaster.pop('error', '提示', response);
+			});
+		};
+
+		/**
+		 * 选择店铺类型
+		 *
+		 * @param type	店铺类型
+		 */
+		$scope.chooseStoreType = function (type) {
+			if (!type || type === '')
+				return 0;
+			$scope.storeType = type;
+			$scope.storeStatus = '';
+
+			$scope.storeTableParams.page(1);
+			$scope.storeTableParams.reload();
+		};
+
+		/**
+		 * 根据关键字进行搜索
+		 */
+		$scope.refreshTableData = function (keyword) {
+      $scope.brandKeyword = keyword;
+			$scope.storeTableParams.page(1);
+			$scope.storeTableParams.reload();
+		};
+
+		/**
+		 * 选择店铺
+		 * @param supplier 供应商
+		 * @param store 店铺
+		 */
+		$scope.chooseStore = function (supplier, store) {
+			supplier.storeIn = store;
+      $scope.brandKeyword = '';
+			supplier.chooseStoreAssociated = false;
+		};
+
+		/**
+		 * 开关关联店铺
+		 * @param supplier 供应商
+		 */
+		$scope.storeAssociated = function (supplier){
+      $scope.brandKeyword = '';
+			supplier.chooseStoreAssociated = typeof supplier.chooseStoreAssociated == 'undefined' ? true : !supplier.chooseStoreAssociated;
+			if (supplier.chooseStoreAssociated) {
+				getStoreData();
+			}
+		};
+
+		/**
+		 * 上传修改供应商图片
+		 */
+		$scope.supplier = {};
+		$scope.onUploadImage = function ($data, supplier) {
+			if (!$data || !$data.path) {
+				toaster.pop('error', '图片上传失败');
+				return ;
+			}
+			supplier.editImg = $data.path;
+		};
+
+		/**
+		 * 删除修改供应商图片
+		 */
+		$scope.deleteImage = function (supplier) {
+			delete supplier.editImg;
+		};
+
+		/**
+		 * 上传新增供应商图片
+		 */
+		$scope.addImg = '';
+		$scope.onUploadImg = function ($data) {
+			if (!$data || !$data.path) {
+				toaster.pop('error', '图片上传失败');
+				return ;
+			}
+			$scope.addImg = $data.path;
+		};
+
+		/**
+		 * 删除新增供应商图片
+		 */
+		$scope.deleteAddImg = function () {
+			delete $scope.addImg;
+		};
+
+		/**
+		 * 查看大图
+		 *
+		 * @param imgUrl		图片链接
+		 */
+		function showImg (imgUrl) {
+			var src = imgUrl, box = $('#image-box'), modal = $('.modal-content');
+			box.show();
+			box.find('img').attr('src', src);
+			box.find('a').click(function(){
+				box.hide();
+			});
+			box.dblclick(function(){
+				box.hide();
+			});
+		}
+
+	}]);
+});

+ 15 - 1
src/main/webapp/resources/js/common/controllers/commonCtrls.js

@@ -1,6 +1,5 @@
 define([ 'app/app' ], function(app) {
 	'use strict';
-
 	app.config(['$httpProvider', function($httpProvider) {
 		// 设置http拦截器
 		$httpProvider.interceptors.push('httpInterceptor');
@@ -962,6 +961,21 @@ define([ 'app/app' ], function(app) {
 		}
 	}]);
 
+	// 我的店铺侧边栏的Controller
+	app.controller('goCartCtrl', ['$scope', 'StoreInfo', 'AuthenticationService', function($scope, StoreInfo, AuthenticationService) {
+		$scope.uuid = false;
+    if(AuthenticationService.isAuthed()) {
+      StoreInfo.existStore({}, {}, function (result) {
+        $scope.uuid = result.uuid;
+      })
+    }
+		$scope.openMystore = function(){
+			var uuid = $scope.uuid;
+			window.open('store/' + uuid, '_self');
+		}
+	}])
+
+
 	// Web Chat侧边栏的Controller
 	app.controller('WebChatCtrl', ['$scope', '$interval', 'AuthenticationService', 'ChatBusinessLayer', 'toaster','$rootScope', function($scope, $interval, AuthenticationService, ChatBusinessLayer, toaster ,$rootScope) {
 		$scope.userInfo = null;

+ 1 - 1
src/main/webapp/resources/js/common/directives.js

@@ -847,7 +847,7 @@ define(['angular', 'showdown', 'angular-toaster'], function(angular) {
 				var errorSizeMsg = attr.errorSizeMsg;
 
 				// 设置图片预览
-				element.append('<img class=previewImage title="请上传附件"/>');
+				element.append('<img class=previewImage title=""/>');
 				var previewImage = $(element).find('.previewImage');
 				previewImage.attr('src', attr.src);
 

+ 15 - 1
src/main/webapp/resources/js/common/query/goods.js

@@ -133,9 +133,23 @@ define([ 'ngResource' ], function() {
 				url : 'trade/goods/putOn/:id',
 				method: 'PUT'
 			},
+			downNowEnterpriseGoods: {
+				url : 'trade/goods/down/enUU',
+				method: 'PUT'
+			},
+			// 删除列表
+			deleteGoodsByIdList: {
+				url : 'trade/goods/delete/batch',
+				method: 'PUT'
+			},
+			// 删除企业下在售
+			deleteGoodsByEnUU: {
+				url : 'trade/goods/delete/enUU',
+				method: 'PUT'
+			},
 			// 卖家下架已上架商品
 			offShelfGoodsByProvider : {
-				url : rootPath + '/trade/goods/provider/off/shelf',
+				url : 'trade/goods/provider/off/shelf',
 				method : 'PUT'
 			},
 			// 卖家下架已上架商品

+ 10 - 0
src/main/webapp/resources/js/common/query/help.js

@@ -115,5 +115,15 @@ define([ 'ngResource' ], function() {
                 method: 'GET'
             }
         })
+    }]).factory('HelpUpload', ['$resource', 'BaseService', function ($resource) {
+        //文章编辑图片处理
+        return $resource('file', {}, {
+            upload: {
+                url: 'file',
+                method: 'POST',
+                headers : {'Content-Type' : undefined},
+                isArray: true
+            }
+        })
     }]);
 });

+ 9 - 0
src/main/webapp/resources/js/common/query/loanApply.js

@@ -0,0 +1,9 @@
+define([ 'ngResource' ], function() {
+	angular.module('loanApplyService', [ 'ngResource' ]).factory('LoanApply', ['$resource', function($resource) {
+		return $resource('api/fa/loanApply', {}, {
+      		getAllByPage:{
+				method:'GET'
+			}
+		});
+	}])
+});

+ 25 - 0
src/main/webapp/resources/js/common/query/seekSalesman.js

@@ -0,0 +1,25 @@
+define([ 'ngResource' ], function() {
+	angular.module('seekSalesmanServices', [ 'ngResource' ]).factory('seekSalesman', ['$resource', 'BaseService', function($resource, BaseService) {
+		const rootPath = BaseService.getRootPath();
+		return $resource('seek/salesman', {}, {
+            getPageInfo: {
+                url: 'seek/salesman/getPageInfo',
+                method: 'GET'
+            }, orders: {
+                url: 'seek/salesman/orders',
+                method: 'POST'
+            }, getMallGoodsList: {
+                url: 'seek/getMallGoodsList',
+                method: 'GET',
+                isArray: true
+            }, getMembers: {
+                url: 'seek/salesman/getMembers',
+                method: 'GET',
+                isArray: true
+            }, getSeekUrl: {
+                url: 'seek/accessUrl',
+                method: 'GET'
+            }
+        });
+    }])
+});

+ 4 - 0
src/main/webapp/resources/js/common/query/storeInfo.js

@@ -88,6 +88,10 @@ define([ 'ngResource' ], function() {
                     filter : 'enUU'
                 }
             },
+			getUuidByEnuu: {
+				url: 'store-service/byEnUU/uuid',
+				method: 'GET'
+			},
             // 分页获取店铺信息
             findStoresByPage : {
                 url : 'api/store-service/stores',

Some files were not shown because too many files changed in this diff