Bläddra i källkod

Merge branch 'dev-mysql' into brandMap-hulh-1027

# Conflicts:
#	src/main/java/com/uas/platform/b2c/prod/store/controller/StoreInController.java
#	src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreInServiceImpl.java
hulh 8 år sedan
förälder
incheckning
cdff72a93c
100 ändrade filer med 3483 tillägg och 612 borttagningar
  1. 1 23
      pom.xml
  2. 1 1
      src/main/java/com/uas/platform/b2c/advertise/ad/service/impl/CarouselsServiceImpl.java
  3. 1 1
      src/main/java/com/uas/platform/b2c/advertise/ad/service/impl/FloorsServiceImpl.java
  4. 41 8
      src/main/java/com/uas/platform/b2c/advertise/news/service/impl/NewsServiceImpl.java
  5. 9 0
      src/main/java/com/uas/platform/b2c/common/account/controller/SecurityController.java
  6. 9 0
      src/main/java/com/uas/platform/b2c/common/account/service/EnterpriseService.java
  7. 11 0
      src/main/java/com/uas/platform/b2c/common/account/service/impl/EnterpriseServiceImpl.java
  8. 1 1
      src/main/java/com/uas/platform/b2c/common/base/api/FileUploadController.java
  9. 1 2
      src/main/java/com/uas/platform/b2c/common/base/api/UploadController.java
  10. 30 0
      src/main/java/com/uas/platform/b2c/common/base/constant/FileClientConstant.java
  11. 0 8
      src/main/java/com/uas/platform/b2c/common/base/service/FileService.java
  12. 0 9
      src/main/java/com/uas/platform/b2c/common/base/service/ImageService.java
  13. 18 28
      src/main/java/com/uas/platform/b2c/common/base/service/impl/DFSImageServiceImpl.java
  14. 110 0
      src/main/java/com/uas/platform/b2c/common/base/service/impl/FileClientImpl.java
  15. 2 31
      src/main/java/com/uas/platform/b2c/common/base/service/impl/FileServiceImpl.java
  16. 4 5
      src/main/java/com/uas/platform/b2c/common/search/api/SearchServiceImpl.java
  17. 118 0
      src/main/java/com/uas/platform/b2c/common/search/constant/SearchUrl.java
  18. 18 8
      src/main/java/com/uas/platform/b2c/common/search/controller/SearcherController.java
  19. 19 0
      src/main/java/com/uas/platform/b2c/common/search/rpc/Readme.md
  20. 60 0
      src/main/java/com/uas/platform/b2c/common/search/rpc/service/Impl/OrderSearchServiceImpl.java
  21. 381 0
      src/main/java/com/uas/platform/b2c/common/search/rpc/service/Impl/SearchServiceImpl.java
  22. 35 0
      src/main/java/com/uas/platform/b2c/common/search/rpc/service/OrderSearchService.java
  23. 53 0
      src/main/java/com/uas/platform/b2c/common/search/rpc/service/SearchService.java
  24. 2 1
      src/main/java/com/uas/platform/b2c/common/search/service/SearcherService.java
  25. 24 7
      src/main/java/com/uas/platform/b2c/common/search/service/impl/SearcherServiceImpl.java
  26. 54 0
      src/main/java/com/uas/platform/b2c/core/config/MicroServicesConf.java
  27. 4 1
      src/main/java/com/uas/platform/b2c/core/config/MicroServicesConfMulti.java
  28. 30 0
      src/main/java/com/uas/platform/b2c/core/config/SysConf.java
  29. 0 351
      src/main/java/com/uas/platform/b2c/core/utils/HttpUtils.java
  30. 1 1
      src/main/java/com/uas/platform/b2c/external/erp/order/api/OrderController.java
  31. 1 1
      src/main/java/com/uas/platform/b2c/fa/settlement/service/impl/BillSubmitServiceImpl.java
  32. 1 1
      src/main/java/com/uas/platform/b2c/logistics/model/DistributionRule.java
  33. 13 0
      src/main/java/com/uas/platform/b2c/logistics/model/UsableRuleInfo.java
  34. 14 1
      src/main/java/com/uas/platform/b2c/logistics/service/impl/DistributionRuleServiceImpl.java
  35. 1 1
      src/main/java/com/uas/platform/b2c/logistics/service/impl/LogisticsCompanyCodeServiceImpl.java
  36. 38 6
      src/main/java/com/uas/platform/b2c/prod/commodity/controller/GoodsController.java
  37. 17 0
      src/main/java/com/uas/platform/b2c/prod/commodity/controller/ProductController.java
  38. 10 0
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductDao.java
  39. 13 0
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/StockInOutHistDao.java
  40. 1 1
      src/main/java/com/uas/platform/b2c/prod/commodity/model/ReleaseProductByBatch.java
  41. 7 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java
  42. 6 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/StockInOutHistService.java
  43. 45 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductServiceImpl.java
  44. 5 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/StockInOutHistServiceImpl.java
  45. 19 0
      src/main/java/com/uas/platform/b2c/prod/commodity/type/ProductConstant.java
  46. 4 3
      src/main/java/com/uas/platform/b2c/prod/product/component/dao/ComponentGoodsDao.java
  47. 1 1
      src/main/java/com/uas/platform/b2c/prod/product/component/modal/ComponentCrawlTask.java
  48. 18 17
      src/main/java/com/uas/platform/b2c/prod/product/component/modal/ComponentGoods.java
  49. 46 0
      src/main/java/com/uas/platform/b2c/prod/product/component/modal/ComponentGoodsId.java
  50. 12 5
      src/main/java/com/uas/platform/b2c/prod/product/component/service/impl/ComponentGoodsServiceImpl.java
  51. 1 1
      src/main/java/com/uas/platform/b2c/prod/product/component/service/impl/ComponentServiceImpl.java
  52. 18 7
      src/main/java/com/uas/platform/b2c/prod/store/controller/StoreInController.java
  53. 8 0
      src/main/java/com/uas/platform/b2c/prod/store/dao/StoreInDao.java
  54. 10 0
      src/main/java/com/uas/platform/b2c/prod/store/service/StoreInService.java
  55. 38 1
      src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreInServiceImpl.java
  56. 3 3
      src/main/java/com/uas/platform/b2c/trade/order/controller/OrderController.java
  57. 31 0
      src/main/java/com/uas/platform/b2c/trade/order/dao/OrderDao.java
  58. 9 0
      src/main/java/com/uas/platform/b2c/trade/order/dao/PurchaseDao.java
  59. 41 0
      src/main/java/com/uas/platform/b2c/trade/order/model/Order.java
  60. 10 1
      src/main/java/com/uas/platform/b2c/trade/order/service/OrderService.java
  61. 16 0
      src/main/java/com/uas/platform/b2c/trade/order/service/PurchaseService.java
  62. 64 38
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderServiceImpl.java
  63. 10 0
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/PurchaseServiceImpl.java
  64. 6 2
      src/main/java/com/uas/platform/b2c/trade/order/status/OrderStatus.java
  65. 6 1
      src/main/java/com/uas/platform/b2c/trade/order/status/PurchaseStatus.java
  66. 1 1
      src/main/java/com/uas/platform/b2c/trade/presale/service/impl/CartServiceImpl.java
  67. 298 0
      src/main/java/com/uas/platform/b2c/trade/rate/controller/RateController.java
  68. 24 0
      src/main/java/com/uas/platform/b2c/trade/rate/dao/RateBuyerDao.java
  69. 39 0
      src/main/java/com/uas/platform/b2c/trade/rate/dao/RateGoodsDao.java
  70. 33 0
      src/main/java/com/uas/platform/b2c/trade/rate/dao/RateTemplateDao.java
  71. 23 0
      src/main/java/com/uas/platform/b2c/trade/rate/dao/RateVendorDao.java
  72. 194 0
      src/main/java/com/uas/platform/b2c/trade/rate/model/RateBuyer.java
  73. 260 0
      src/main/java/com/uas/platform/b2c/trade/rate/model/RateGoods.java
  74. 111 0
      src/main/java/com/uas/platform/b2c/trade/rate/model/RateTemplate.java
  75. 158 0
      src/main/java/com/uas/platform/b2c/trade/rate/model/RateVendor.java
  76. 125 0
      src/main/java/com/uas/platform/b2c/trade/rate/service/RateService.java
  77. 295 0
      src/main/java/com/uas/platform/b2c/trade/rate/service/impl/RateServiceImpl.java
  78. 36 0
      src/main/java/com/uas/platform/b2c/trade/rate/status/RateType.java
  79. 256 0
      src/main/java/com/uas/platform/b2c/trade/rate/task/RateTask.java
  80. 1 0
      src/main/resources/dev/account.properties
  81. 1 1
      src/main/resources/dev/redis.properties
  82. 9 0
      src/main/resources/dev/sys.properties
  83. 1 1
      src/main/resources/log4j.properties
  84. 1 0
      src/main/resources/prod/account.properties
  85. 3 3
      src/main/resources/prod/jdbc.properties
  86. 1 1
      src/main/resources/prod/redis.properties
  87. 9 1
      src/main/resources/prod/sys.properties
  88. 1 2
      src/main/resources/spring/context.xml
  89. 0 23
      src/main/resources/spring/dubbo-consumer.xml
  90. 10 1
      src/main/resources/spring/task.xml
  91. 1 0
      src/main/resources/test/account.properties
  92. 2 1
      src/main/resources/test/redis.properties
  93. 9 0
      src/main/resources/test/sys.properties
  94. BIN
      src/main/webapp/resources/img/user/images/rate1.png
  95. BIN
      src/main/webapp/resources/img/user/images/rate2.png
  96. BIN
      src/main/webapp/resources/img/user/images/rate3.png
  97. BIN
      src/main/webapp/resources/img/user/images/rateBad.png
  98. BIN
      src/main/webapp/resources/img/user/images/rateGood.png
  99. BIN
      src/main/webapp/resources/img/vendor/images/rate-add.png
  100. BIN
      src/main/webapp/resources/img/vendor/images/rate-box-del.png

+ 1 - 23
pom.xml

@@ -354,29 +354,7 @@
 			 <artifactId>spring-kafka</artifactId>
 			<version>1.2.2.RELEASE</version>
 		 </dependency>
-		<!-- dubbo -->
-		<dependency>
-			<groupId>com.alibaba</groupId>
-			<artifactId>dubbo</artifactId>
-			<exclusions>
-				<exclusion>
-					<groupId>javax.servlet</groupId>
-					<artifactId>javax.servlet-api</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>org.apache.httpcomponents</groupId>
-					<artifactId>httpcore</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.zookeeper</groupId>
-			<artifactId>zookeeper</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>com.github.sgroschupf</groupId>
-			<artifactId>zkclient</artifactId>
-		</dependency>
+
 		<!-- service on dubbo -->
 		<dependency>
 			<groupId>com.uas.dfs</groupId>

+ 1 - 1
src/main/java/com/uas/platform/b2c/advertise/ad/service/impl/CarouselsServiceImpl.java

@@ -31,7 +31,7 @@ public class CarouselsServiceImpl implements CarouselService{
 
 	@Override
 	public List<JSONObject> getCarousels(String usedFor) {
-		String url = conf.getRequestUrl(20030, "/carousels?usedFor=" + usedFor);
+		String url = conf.getRequestUrlForCarousel(20030, "/carousels?usedFor=" + usedFor);
 		String result = restTemplate.getForEntity(url, String.class).getBody();
 		List<JSONObject> r = JsonUtil.parseJsonToObject(result);
 		return r;

+ 1 - 1
src/main/java/com/uas/platform/b2c/advertise/ad/service/impl/FloorsServiceImpl.java

@@ -31,7 +31,7 @@ public class FloorsServiceImpl implements FloorsService {
 
 	@Override
 	public List<JSONObject> getFloorsByModule(String module) {
-		String url = conf.getRequestUrl(20040, "/floors?usedFor=" + module);
+		String url = conf.getRequestUrlForFloor(20040, "/floors?usedFor=" + module);
 		String result = restTemplate.getForEntity(url, String.class).getBody();
 		return JacksonUtils.fromJsonArray(result, JSONObject.class);
 	}

+ 41 - 8
src/main/java/com/uas/platform/b2c/advertise/news/service/impl/NewsServiceImpl.java

@@ -5,9 +5,16 @@ import com.uas.platform.b2c.advertise.news.service.NewsService;
 import com.uas.platform.b2c.core.config.MicroServicesConf;
 import com.uas.platform.b2c.core.utils.JacksonUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.dao.DataAccessException;
+import org.springframework.data.redis.connection.RedisConnection;
+import org.springframework.data.redis.core.RedisCallback;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
 
+import java.io.Serializable;
+
 /**
  * 新闻操作业务实现类
  *
@@ -17,37 +24,63 @@ import org.springframework.web.client.RestTemplate;
 @Service
 public class NewsServiceImpl implements NewsService {
 
+	private final RedisTemplate<Serializable,Serializable> redisTemplate;
+
 	private final MicroServicesConf conf;
 
 	private final RestTemplate restTemplate;
 
+	/**
+	 * 缓存刷新时间
+	 */
+	@Value("#{sys.newsRedisRefresh ?: 600}")
+	private long newsRedisRefresh;
+
 	@Autowired
-	public NewsServiceImpl(MicroServicesConf conf, RestTemplate restTemplate) {
+	public NewsServiceImpl(MicroServicesConf conf, RestTemplate restTemplate, RedisTemplate redisTemplate) {
 		this.conf = conf;
 		this.restTemplate = restTemplate;
+		this.redisTemplate = redisTemplate;
 	}
 
 	@Override
 	public JSONObject getNewsListByPage(int page, int pageSize) {
 		if (page <= 0) page = 1;
-		String url = conf.getRequestUrl(20210, "/news/created/v2?pagenumber=" + page +"&pagesize=" + pageSize + "&taxonomySlug=B2C");
-		String result = restTemplate.getForEntity(url, String.class).getBody();
-		return JacksonUtils.fromJson(result, JSONObject.class);
+		String url = conf.getRequestUrlForNews( "/news/created/v2?pagenumber=" + page +"&pagesize=" + pageSize + "&taxonomySlug=B2C");
+		return getDataFromRedisByUrl(url);
 	}
 
 	@Override
 	public JSONObject getNewsListOrderByViewCount(int page, int pageSize) {
 		if (page <= 0) page = 1;
-		String url = conf.getRequestUrl(20210, "/news/viewcount/v2?pagenumber=" + page +"&pagesize=" + pageSize + "&taxonomySlug=B2C");
-		String result = restTemplate.getForEntity(url, String.class).getBody();
-		return JacksonUtils.fromJson(result, JSONObject.class);
+		String url = conf.getRequestUrlForNews("/news/viewcount/v2?pagenumber=" + page +"&pagesize=" + pageSize + "&taxonomySlug=B2C");
+		return getDataFromRedisByUrl(url);
 	}
 
 	@Override
 	public JSONObject getNewsById(Long id) {
 		if (id == null) return null;
-		String url = conf.getRequestUrl(20210, "/news/" +  id);
+		String url = conf.getRequestUrlForNews( "/news/" +  id);
 		String result = restTemplate.getForEntity(url, String.class).getBody();
 		return JacksonUtils.fromJson(result, JSONObject.class);
 	}
+
+	private JSONObject getDataFromRedisByUrl(final String url){
+		Object result = redisTemplate.execute(new RedisCallback<Object>() {
+			@Override
+			public Object doInRedis(RedisConnection connection) throws DataAccessException {
+				byte[] key = redisTemplate.getStringSerializer().serialize(url);
+				if (connection.exists(key)) {
+					String value = redisTemplate.getStringSerializer().deserialize(connection.get(key));
+					return value;
+				}else {
+					byte[] value = redisTemplate.getStringSerializer().serialize(restTemplate.getForEntity(url, String.class).getBody());
+					connection.set(key, value);
+					connection.expire(key, newsRedisRefresh);
+					return redisTemplate.getStringSerializer().deserialize(connection.get(key));
+				}
+			}
+		});
+		return JacksonUtils.fromJson(result.toString(), JSONObject.class);
+	}
 }

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

@@ -205,6 +205,15 @@ public class SecurityController {
 		model.addAttribute("askUrl", config.getCrossAskOutUrl());
 		Object referer = request.getSession().getAttribute(SSOConfig.SSOReferer);
 		model.addAttribute("returnUrl", null == referer ? "/" : referer.toString());
+		// 未登录情况下,登录地址
+		Object logoutUrl = null;
+		boolean cross = SSOHelper.isCrossDomain(request);
+		if (cross) {
+			logoutUrl = SSOHelper.getRedirectRefererLogoutUrl(request);
+		} else {
+			logoutUrl = SSOHelper.getRedirectLogoutUrl(request, String.valueOf(request.getSession().getAttribute("SSOReferer")));
+		}
+		model.addAttribute("logoutUrl", logoutUrl);
 		return model;
 	}
 

+ 9 - 0
src/main/java/com/uas/platform/b2c/common/account/service/EnterpriseService.java

@@ -4,10 +4,19 @@ import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.trade.support.ResultMap;
 
+import java.util.List;
+
 public interface EnterpriseService {
 
 	// 根据企业uu获取企业信息
 	public Enterprise getEnterpriseInfo(Long uu);
+
+	/**
+	 * 批量获取企业的信息
+	 * @param enuus uu号
+	 * @return List<Enterprise>
+	 */
+	List<Enterprise> getEnterpriseInfos(List<Long> enuus);
 	
 	// 得到企业是否有需要结算单据状态
 	public Enterprise getReceiptStatus(Enterprise enter);

+ 11 - 0
src/main/java/com/uas/platform/b2c/common/account/service/impl/EnterpriseServiceImpl.java

@@ -42,6 +42,17 @@ public class EnterpriseServiceImpl implements EnterpriseService{
 		return enterpriseDao.findByUu(uu);
 	}
 
+	/**
+	 * 批量获取企业的信息
+	 *
+	 * @param enuus uu号
+	 * @return List<Enterprise>
+	 */
+	@Override
+	public List<Enterprise> getEnterpriseInfos(List<Long> enuus) {
+		return enterpriseDao.findByUus(enuus);
+	}
+
 	@Override
 	public Enterprise getReceiptStatus(Enterprise enter) {
 		List<Receipt> receipts = receiptDao.findBySellerenuu(enter.getUu());

+ 1 - 1
src/main/java/com/uas/platform/b2c/common/base/api/FileUploadController.java

@@ -49,7 +49,7 @@ public class FileUploadController {
 		for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
 			MultipartFile mf = entity.getValue();
 			try {
-				String path = fileService.save(mf);
+				String path = fileService.save(mf.getOriginalFilename(), mf.getBytes());
 				Map<String, Object> map = new HashMap<String, Object>();
 				map.put("path", path);
 				map.put("fileName", mf.getOriginalFilename());

+ 1 - 2
src/main/java/com/uas/platform/b2c/common/base/api/UploadController.java

@@ -12,7 +12,6 @@ import org.springframework.web.multipart.MultipartHttpServletRequest;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -43,7 +42,7 @@ public class UploadController {
         for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
             MultipartFile mf = entity.getValue();
             try {
-                IPicture picture = imageService.uploadFile(mf);
+                IPicture picture = imageService.save(mf.getOriginalFilename(), mf.getBytes());
                 pictures.add(picture);
             } catch (Exception e) {
                 e.printStackTrace();

+ 30 - 0
src/main/java/com/uas/platform/b2c/common/base/constant/FileClientConstant.java

@@ -0,0 +1,30 @@
+package com.uas.platform.b2c.common.base.constant;
+
+public class FileClientConstant {
+
+    /**
+     * 文件上传
+     */
+    public final static String FILE_UPLOAD = "/file/upload";
+
+
+    /**
+     * 文件下载
+     */
+    public final static String FILE_DOWNLOAD = "/file/download";
+
+    /**
+     * 文件删除
+     */
+    public final static String FILE_DELETE = "/file/delete";
+
+    /**
+     * 文件信息
+     */
+    public final static String FILE_INFO = "/file/info";
+
+    /**
+     * 文件额外属性
+     */
+    public final static String FILE_METADATA = "/file/metadata";
+}

+ 0 - 8
src/main/java/com/uas/platform/b2c/common/base/service/FileService.java

@@ -1,7 +1,6 @@
 package com.uas.platform.b2c.common.base.service;
 
 import com.uas.platform.b2c.common.base.model.FileUpload;
-import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 文件上传
@@ -17,13 +16,6 @@ public interface FileService {
      */
     public String save(FileUpload fileUpload);
 
-    /**
-     * 保存文件
-     * @param mf 需要上传的文件
-     * @return 文件路径
-     */
-    public String save(MultipartFile mf);
-
     /**
      * 用户上传文件
      * @param fileName 文件名

+ 0 - 9
src/main/java/com/uas/platform/b2c/common/base/service/ImageService.java

@@ -1,7 +1,6 @@
 package com.uas.platform.b2c.common.base.service;
 
 import com.uas.platform.b2c.common.base.model.IPicture;
-import org.springframework.web.multipart.MultipartFile;
 
 import java.io.File;
 import java.util.List;
@@ -38,12 +37,4 @@ public interface ImageService {
 	 * @return 文件
 	 */
 	public IPicture save(String fileName, byte[] fileBytes);
-
-	/**
-	 * 保存图片
-	 * @param mf MultipartFile 文件的信息
-	 * @return
-	 * @throws Exception
-	 */
-    IPicture uploadFile(MultipartFile mf) throws Exception;
 }

+ 18 - 28
src/main/java/com/uas/platform/b2c/common/base/service/impl/DFSImageServiceImpl.java

@@ -1,19 +1,14 @@
 package com.uas.platform.b2c.common.base.service.impl;
 
-import com.alibaba.fastjson.JSONObject;
 import com.uas.dfs.service.FileClient;
-import com.uas.platform.b2c.common.base.constant.FileUrl;
 import com.uas.platform.b2c.common.base.dao.DBPictureRepository;
 import com.uas.platform.b2c.common.base.model.DBPicture;
 import com.uas.platform.b2c.common.base.model.IPicture;
 import com.uas.platform.b2c.common.base.service.ImageService;
-import com.uas.platform.b2c.core.utils.FastjsonUtils;
-import com.uas.platform.b2c.core.utils.HttpUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.FilenameUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
 
 import java.io.File;
 import java.io.IOException;
@@ -34,14 +29,9 @@ public class DFSImageServiceImpl implements ImageService {
         List<DBPicture> pictures = new ArrayList<DBPicture>();
         for (File file : files) {
             try {
-                HttpUtils.Response response = HttpUtils.upload(FileUrl.FILE_UPLOAD, file, null);
-                if (response.getStatusCode() == 200) {
-                    JSONObject obj = FastjsonUtils.parseObject(response.getResponseText());
-                    String fileUrl = (String) obj.get("path");
-                    pictures.add(new DBPicture(file.getName(), fileUrl, com.uas.platform.core.util.FileUtils.getImagePixel(file)));
-                } else {
-                    throw new IllegalStateException(response.getResponseText());
-                }
+                String fileUrl = fileClient.upload(FileUtils.readFileToByteArray(file), file.length(),
+                        FilenameUtils.getExtension(file.getName()), null);
+                pictures.add(new DBPicture(file.getName(), fileUrl, com.uas.platform.core.util.FileUtils.getImagePixel(file)));
             } catch (Exception e) {
                 e.printStackTrace();
             }
@@ -52,7 +42,7 @@ public class DFSImageServiceImpl implements ImageService {
     @Override
     public DBPicture save(File file) {
         try {
-            String fileUrl = fileClient.uploadImage(FileUtils.readFileToByteArray(file), file.length(),
+            String fileUrl = fileClient.upload(FileUtils.readFileToByteArray(file), file.length(),
                     FilenameUtils.getExtension(file.getName()), null);
             return pictureRepository.save(new DBPicture(file.getName(), fileUrl, com.uas.platform.core.util.FileUtils.getImagePixel(file)));
         } catch (IOException e) {
@@ -63,22 +53,22 @@ public class DFSImageServiceImpl implements ImageService {
 
     @Override
     public IPicture save(String fileName, byte[] fileBytes) {
-        String fileUrl = fileClient.uploadImage(fileBytes, fileBytes.length, FilenameUtils.getExtension(fileName), null);
+        String fileUrl = fileClient.upload(fileBytes, fileBytes.length, FilenameUtils.getExtension(fileName), null);
         return pictureRepository.save(new DBPicture(fileName, fileUrl, com.uas.platform.core.util.FileUtils.getImagePixel(fileBytes)));
     }
 
-    @Override
-    public IPicture uploadFile(MultipartFile mf) throws Exception {
-        HttpUtils.Response response = HttpUtils.upload(FileUrl.FILE_UPLOAD, mf, null);
-        if (response.getStatusCode() == 200) {
-            JSONObject obj = FastjsonUtils.parseObject(response.getResponseText());
-
-            String fileName = mf.getOriginalFilename();
-            String fileUrl = (String) obj.get("path");
-            return pictureRepository.save(new DBPicture(fileName, fileUrl, com.uas.platform.core.util.FileUtils.getImagePixel(mf.getBytes())));
-        } else {
-            throw new IllegalStateException(response.getResponseText());
-        }
-    }
+//    @Override
+//    public IPicture uploadFile(MultipartFile mf) throws Exception {
+//        HttpUtils.Response response = HttpUtils.upload(FileUrl.FILE_UPLOAD, mf, null);
+//        if (response.getStatusCode() == 200) {
+//            JSONObject obj = FastjsonUtils.parseObject(response.getResponseText());
+//
+//            String fileName = mf.getOriginalFilename();
+//            String fileUrl = (String) obj.get("path");
+//            return pictureRepository.save(new DBPicture(fileName, fileUrl, com.uas.platform.core.util.FileUtils.getImagePixel(mf.getBytes())));
+//        } else {
+//            throw new IllegalStateException(response.getResponseText());
+//        }
+//    }
 
 }

+ 110 - 0
src/main/java/com/uas/platform/b2c/common/base/service/impl/FileClientImpl.java

@@ -0,0 +1,110 @@
+package com.uas.platform.b2c.common.base.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.uas.dfs.domain.FileInfo;
+import com.uas.dfs.domain.MetaData;
+import com.uas.dfs.service.FileClient;
+import com.uas.platform.b2c.common.base.constant.FileClientConstant;
+import com.uas.platform.b2c.core.config.SysConf;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ByteArrayResource;
+import org.springframework.http.*;
+import org.springframework.stereotype.Service;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+import java.io.*;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+@Service
+public class FileClientImpl implements FileClient {
+
+    private final RestTemplate restTemplate;
+
+    private final SysConf sysConf;
+
+    @Autowired
+    public FileClientImpl(RestTemplate restTemplate, SysConf sysConf) {
+        this.restTemplate = restTemplate;
+        this.sysConf = sysConf;
+    }
+
+    @Override
+    public String upload(byte[] bytes, long l, final String s, Set<MetaData> set) {
+        HttpHeaders headers = new HttpHeaders();
+        MediaType type = MediaType.parseMediaType("multipart/form-data;charset=UTF-8");
+        headers.setContentType(type);
+
+        File file = new File(s);
+        try {
+            OutputStream output = new FileOutputStream(file);
+            BufferedOutputStream bufferedOutput = new BufferedOutputStream(output);
+            bufferedOutput.write(bytes);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        MultiValueMap<String, Object> form = new LinkedMultiValueMap<String, Object>();
+        ByteArrayResource arrayResource = new ByteArrayResource(bytes){
+            @Override
+            public String getFilename() throws IllegalStateException {
+                return "test." + s;
+            }
+
+        };
+        form.add("file", arrayResource);
+
+        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(form, headers);
+        ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(sysConf.getUploadFileUrl() + FileClientConstant.FILE_UPLOAD, requestEntity, JSONObject.class);
+        return responseEntity.getBody().getString("path");
+    }
+
+    @Override
+    public byte[] download(String s) {
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("path", s);
+        HttpHeaders headers = new HttpHeaders();
+        ResponseEntity<byte[]> response = restTemplate.exchange(sysConf.getUploadFileUrl() + FileClientConstant.FILE_DOWNLOAD, HttpMethod.GET,
+                new HttpEntity<byte[]>(headers), byte[].class, params);
+        return response.getBody();
+    }
+
+    @Override
+    public void delete(String s) {
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("path", s);
+        restTemplate.delete(sysConf.getUploadFileUrl() + FileClientConstant.FILE_DELETE, params);
+    }
+
+    @Override
+    public String uploadImage(byte[] bytes, long l, String s, Set<MetaData> set) {
+        // 项目无用到,暂不实现
+        return null;
+    }
+
+    @Override
+    public FileInfo getInfo(String s) {
+        // 项目无用到,暂不实现
+        return null;
+    }
+
+    @Override
+    public Set<MetaData> getMetaData(String s) {
+        // 项目无用到,暂不实现
+        return null;
+    }
+
+    @Override
+    public void mergeMetaData(String s, Set<MetaData> set) {
+        // 项目无用到,暂不实现
+    }
+
+    @Override
+    public void overrideMetaData(String s, Set<MetaData> set) {
+        // 项目无用到,暂不实现
+    }
+
+}

+ 2 - 31
src/main/java/com/uas/platform/b2c/common/base/service/impl/FileServiceImpl.java

@@ -1,17 +1,12 @@
 package com.uas.platform.b2c.common.base.service.impl;
 
-import com.alibaba.fastjson.JSONObject;
 import com.uas.dfs.service.FileClient;
-import com.uas.platform.b2c.common.base.constant.FileUrl;
 import com.uas.platform.b2c.common.base.model.FileUpload;
 import com.uas.platform.b2c.common.base.service.FileService;
-import com.uas.platform.b2c.core.utils.FastjsonUtils;
-import com.uas.platform.b2c.core.utils.HttpUtils;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import org.apache.commons.io.FilenameUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
 @Service
@@ -25,32 +20,8 @@ public class FileServiceImpl implements FileService {
 		CommonsMultipartFile file = fileUpload.getFile();
 		try {
 			// 上传到文件系统
-			HttpUtils.Response response = HttpUtils.upload(FileUrl.FILE_UPLOAD, file, null);
-			if (response.getStatusCode() == 200) {
-				JSONObject obj = FastjsonUtils.parseObject(response.getResponseText());
-				String fileUrl = (String) obj.get("path");
-				return fileUrl;
-			} else {
-				throw new IllegalStateException(response.getResponseText());
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw new IllegalOperatorException("附件上传失败");
-		}
-	}
-
-	@Override
-	public String save(MultipartFile mf) {
-		try {
-            HttpUtils.Response response = HttpUtils.upload(FileUrl.FILE_UPLOAD, mf, null);
-            if (response.getStatusCode() == 200) {
-                JSONObject obj = FastjsonUtils.parseObject(response.getResponseText());
-
-                String fileUrl = (String) obj.get("path");
-                return fileUrl;
-            }else {
-                throw new IllegalStateException(response.getResponseText());
-            }
+			return fileClient.upload(file.getBytes(), file.getSize(),
+					FilenameUtils.getExtension(file.getOriginalFilename()), null);
 		} catch (Exception e) {
 			e.printStackTrace();
 			throw new IllegalOperatorException("附件上传失败");

+ 4 - 5
src/main/java/com/uas/platform/b2c/common/search/api/SearchServiceImpl.java

@@ -1,16 +1,15 @@
 package com.uas.platform.b2c.common.search.api;
 
-import java.util.List;
-import java.util.Map;
-
+import com.uas.api.b2c_erp.search.service.SearchService;
 import org.springframework.beans.factory.annotation.Autowired;
 
-import com.uas.api.b2c_erp.search.service.SearchService;
+import java.util.List;
+import java.util.Map;
 
 public class SearchServiceImpl implements SearchService {
 
 	@Autowired
-	private com.uas.search.service.SearchService searchService;
+	private com.uas.platform.b2c.common.search.rpc.service.SearchService searchService;
 
 	@Override
 	public List<Map<String, Object>> getAssociateBrands(String keyword) {

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

@@ -0,0 +1,118 @@
+package com.uas.platform.b2c.common.search.constant;
+
+/**
+ * 搜索对应的链接
+ *
+ * @author yuj 2017-10-19 19:35
+ */
+public class SearchUrl {
+
+    /**
+     * 获取类目id
+     */
+    public static final String KIND_ID_URL = "/search/kindIds/{keyword}";
+
+    /**
+     * 获取类目的数据
+     *
+     */
+    public static final String KIND_INFO_URL = "/search/kinds/{keyword}?page={page}&size={size}";
+
+    /**
+     * 搜索品牌的id
+     */
+    public static final String BRAND_ID_URL = "/search/brandIds/{keyword}?page={page}&size={size}";
+
+    /**
+     * 搜索品牌的具体信息
+     */
+    public static final String BRAND_INFO_URL = "/search/brands/{keyword}?page={page}&size={size}";
+
+
+    /**
+     * 搜索器件的id
+     */
+    public static final String COMPONENT_ID_URL = "/search/componentIds?keyword={keyword}&params={params}";
+
+    /**
+     * 根据品牌id后去类目的id
+     */
+    public static final String KIND_ID_COMPONENT_URL = "/search/kindIdsByComponent?keyword={keyword}&brandId={brandId}";
+
+    /**
+     * 根据品牌id后去类目信息
+     */
+    public static final String KIND_COMPONENT_URL = "/search/kindsByComponent?keyword={keyword}&brandId={brandId}";
+
+    /**
+     * 根据类目的id,获取品牌id信息
+     */
+    public static final String BREAND_ID_COMPONENT_URL = "/search/brandIdsByComponent?keyword={keyword}&kindId={kindId}";
+
+
+    /**
+     * 根据类目的id,获取品牌信息
+     */
+    public static final String BREAND_COMPONENT_URL = "/search/brandsByComponent?keyword={keyword}&kindId={kindId}";
+
+
+    /**
+     * 根据关键字联想
+     */
+    public static final String SIMILAR_KEYWORD_URL = "/search/similarKeywords/{keyword}";
+
+
+    /**
+     * 根据关键字联想器件
+     */
+    public static final String SIMILAR_COMPONENT_URL = "/search/similarComponents/{keyword}";
+
+
+    /**
+     * 根据关键字联想品牌
+     */
+    public static final String SIMILAR_BRAND_URL = "/search/similarBrands/{keyword}";
+
+
+    /**
+     * 根据关键字联想类目
+     */
+    public static final String SIMILAR_KIND_URL = "/search/similarKinds/{keyword}";
+
+
+
+    /**
+     * 获取某个信息的叶子节点
+     */
+    public static final String SIMILAR_LEAF_KIND_URL = "/search/similarLeafKinds/{keyword}";
+
+
+    /**
+     * 获取类目的层级
+     */
+    public static final String SIMILAR__KIND_LEVEL_URL = "/search/similarKindsByLevel?kindName={kindName}&level={level}";
+
+
+    /**
+     * 属性值搜索
+     */
+    public static final String PROPERTYVALUES_URL = "/search/similarPropertyValues?kindId={kindId}&propertyId={propertyId}&keyword={keyword}&topNum={topNum}";
+
+
+    /**
+     * 搜索库存信息
+     */
+    public static final String GOODIS_URL= "/search/goodsIds?keyword={keyword}&params={params}";
+
+
+    /**
+     * 搜索库存
+     */
+    public static final String GOODS_COLLECT_URL= "/search/collectBySearchGoods?keyword={keyword}&collectedField={collectedField}&filters={filters}";
+
+    /**
+     * 搜索订单
+     */
+    public static final String ORDER_SEARCH_URL = "/search/orderIds?tableName={tableName}&keyword={keyword}&page={page}&size={size}&status={status}&buyeruu={buyeruu}&buyerenuu={buyerenuu}&sellerenuu={sellerenuu}&mintime={mintime}&maxtime={maxtime}";
+
+}

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

@@ -4,6 +4,7 @@ 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.SystemSession;
 import com.uas.platform.b2c.prod.commodity.service.GoodsService;
+import com.uas.platform.b2c.prod.commodity.service.StockInOutHistService;
 import com.uas.platform.b2c.prod.store.model.StoreIn;
 import com.uas.platform.b2c.prod.store.service.StoreInService;
 import com.uas.platform.b2c.trade.presale.service.StoreFocusService;
@@ -57,6 +58,9 @@ public class SearcherController {
 	@Autowired
 	private GoodsService goodsService;
 
+	@Autowired
+	private StockInOutHistService stockInOutHistService;
+
 	/**
 	 * 作搜索展示跳转
 	 * 
@@ -81,7 +85,7 @@ public class SearcherController {
 		// 搜索类目
 		String type = request.getParameter("type");
 		if ("all".equals(type)) {
-			ModelMap results = new ModelMap();
+			/*ModelMap results = new ModelMap();
 			PageParams pageParams = new PageParams();
 			results = searcherService.searchComponentGoodsNums(w, pageParams);
 			if (((Integer)results.get("total")).intValue() == 0){
@@ -101,7 +105,10 @@ public class SearcherController {
                 // 跳转至器件搜索结果页
                 w = URLEncoder.encode(w, "UTF-8");
                 response.sendRedirect("commonSearch#/component?keyword=" + w);
-            }
+            }*/
+
+			w = URLEncoder.encode(w, "UTF-8");
+			response.sendRedirect("commonSearch#/component?keyword=" + w);
 			/*map = searcherService.searchKind(w, null);
 			int kindTotal = (int) map.get("total");
 			if (kindTotal > 1) {
@@ -231,8 +238,8 @@ public class SearcherController {
      */
     @RequestMapping(value = "/componentGoods/collect", method = RequestMethod.GET)
     @ResponseBody
-    public List<Map<String, Object>> searchCollectListByComponentGoodsSearch(String keyword, String collectList, String paramJSON) {
-        return searcherService.getCollectlistBySearchComponentGoods(keyword,collectList,paramJSON);
+    public List<Map<String, Object>> searchCollectListByComponentGoodsSearch(String keyword, String collectList, String paramJSON , HttpServletRequest request) {
+        return searcherService.getCollectlistBySearchComponentGoods(keyword,collectList,paramJSON,request);
     }
 
 
@@ -314,21 +321,24 @@ public class SearcherController {
 		PageInfo pageInfo = new PageInfo(params);
 		Page<StoreIn> stores = storeService.pageStoresByTypesAndKeyword(pageInfo, types, keyword);
 		List<Map<String, Object>> result = new ArrayList<>();
-		Map<String, Object> a = new HashedMap();
-		a.put("stores",stores);
-		result.add(a);
+		Map<String, Object> storesMap = new HashedMap();
+		storesMap.put("stores",stores);
+		result.add(storesMap);
 		Map<String, Object> b = new HashedMap();
 		ArrayList<String> flag = new ArrayList<>();
 		ArrayList<Object> flag2 = new ArrayList<>();
+		ArrayList<Object> flag3 = new ArrayList<>();
 		b.put("isFocus",flag);
 		b.put("image",flag2);
+		b.put("sales",flag3);
 		result.add(b);
 		for (StoreIn storeIn : stores){
 			flag.add(storeFocusService.storeIfFocus(storeIn.getId()));
-			PageInfo pageInfoCache = new PageInfo(1,4);
+			PageInfo pageInfoCache = new PageInfo(1,5);
 			//暂时只显示有图片的产品信息
 			pageInfoCache.expression(PredicateUtils.isNotNull("img"));
 			flag2.add(goodsService.pageCommoditiesByEnInfos(storeIn.getUuid(),null,null,pageInfoCache));
+			flag3.add(stockInOutHistService.getCountByenuuAndIoSellerType(storeIn.getEnUU(),1668));
 		}
 		return result;
 	}

+ 19 - 0
src/main/java/com/uas/platform/b2c/common/search/rpc/Readme.md

@@ -0,0 +1,19 @@
+## name
+
+rpc
+
+## 名称
+
+调用远程的搜索的接口
+
+## 创建人
+
+yujia
+
+## 创建时间
+
+2017年10月20日8:49:26
+
+## 说明
+
+使用Http协议调用远程的接口获取数据。

+ 60 - 0
src/main/java/com/uas/platform/b2c/common/search/rpc/service/Impl/OrderSearchServiceImpl.java

@@ -0,0 +1,60 @@
+package com.uas.platform.b2c.common.search.rpc.service.Impl;
+
+import com.uas.platform.b2c.common.search.constant.SearchUrl;
+import com.uas.platform.b2c.common.search.rpc.service.OrderSearchService;
+import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.search.exception.SearchException;
+import com.uas.search.model.BaseOrder;
+import com.uas.search.model.PageParams;
+import com.uas.search.model.SPage;
+import org.apache.commons.collections.map.HashedMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.Map;
+
+/**
+ * description
+ *
+ * @author yuj 2017-10-21 9:50
+ */
+@Service
+public class OrderSearchServiceImpl implements OrderSearchService {
+
+    private final RestTemplate restTemplate;
+
+    @Autowired
+    public OrderSearchServiceImpl(RestTemplate restTemplate) {
+        this.restTemplate = restTemplate;
+    }
+
+    @Override
+    public SPage<BaseOrder> getOrderIdsWithDetail(String keyword, Table_name tableName, PageParams var3) throws SearchException {
+        Map<String, Object> map = new HashedMap();
+        map.put("keyword", keyword);
+        map.put("tableName", tableName);
+        map.put("page", var3.getPage());
+        map.put("size", var3.getSize());
+        Map<PageParams.FilterField, Object> filters = var3.getFilters();
+        map.put("status", filters.get(PageParams.FilterField.ORDER_STATUS));
+        map.put("buyeruu", filters.get(PageParams.FilterField.ORDER_BUYER_UU));
+        map.put("buyerenuu", filters.get(PageParams.FilterField.ORDER_BUYER_EN_UU));
+        map.put("sellerenuu", filters.get(PageParams.FilterField.ORDER_SELLER_EN_UU));
+        map.put("mintime", filters.get(PageParams.FilterField.ORDER_MIN_TIME));
+        map.put("maxtime", filters.get(PageParams.FilterField.ORDER_MAX_TIME));
+        String str = restTemplate.getForObject(SearchUrl.ORDER_SEARCH_URL, String.class, map);
+        if(StringUtils.isEmpty(str)) {
+            return null;
+        }else {
+            try {
+                SPage<BaseOrder> reMap = FastjsonUtils.fromJson(str, SPage.class);
+                return reMap;
+            }catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+    }
+}

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

@@ -0,0 +1,381 @@
+package com.uas.platform.b2c.common.search.rpc.service.Impl;
+
+
+import com.uas.platform.b2c.common.search.constant.SearchUrl;
+import com.uas.platform.b2c.common.search.rpc.service.SearchService;
+import com.uas.platform.b2c.core.config.SysConf;
+import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.platform.core.util.serializer.FlexJsonUtils;
+import com.uas.search.exception.SearchException;
+import com.uas.search.model.CollectField;
+import com.uas.search.model.PageParams;
+import com.uas.search.model.SPage;
+import org.apache.commons.collections.map.HashedMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * 通过resttemplate调用搜索接口的实现方法
+ *
+ * @author yuj 2017-10-20 8:57
+ */
+@Service
+public class SearchServiceImpl implements SearchService{
+
+    private final RestTemplate restTemplate;
+
+    private final SysConf sysConf;
+
+    @Autowired
+    public SearchServiceImpl(RestTemplate restTemplate, SysConf sysConf) {
+        this.restTemplate = restTemplate;
+        this.sysConf = sysConf;
+    }
+
+    @Override
+    public SPage<Long> getKindIds(String keyword, Integer page, Integer size) throws SearchException {
+        Map<String, Object> map = initSearchMap(keyword, page, size);
+        String str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.KIND_ID_URL, String.class, map);
+        if(StringUtils.isEmpty(str)) {
+            return null;
+        }else {
+            try {
+                SPage<Long> sPage = FastjsonUtils.fromJson(str, SPage.class);
+                return sPage;
+            }catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+    }
+
+    @Override
+    public SPage<Map<String, Object>> getKinds(String keyword, Integer page, Integer size) throws SearchException {
+        Map<String, Object> map = initSearchMap(keyword, page, size);
+        String str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.KIND_INFO_URL, String.class, map);
+        if(StringUtils.isEmpty(str)) {
+            return null;
+        }else {
+            try {
+                SPage<Map<String, Object>> sPage = FastjsonUtils.fromJson(str, SPage.class);
+                return sPage;
+            }catch (Exception e) {
+                e.printStackTrace();
+              return null;
+            }
+        }
+    }
+
+    @Override
+    public SPage<Long> getBrandIds(String keyword, Integer page, Integer size) throws SearchException {
+        Map<String, Object> map = initSearchMap(keyword, page, size);
+        String str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.BRAND_ID_URL, String.class, map);
+        if(StringUtils.isEmpty(str)) {
+            return null;
+        }else {
+            try {
+                SPage<Long> sPage = FastjsonUtils.fromJson(str, SPage.class);
+                return sPage;
+            }catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+
+    }
+
+    @Override
+    public SPage<Map<String, List<Integer>>> getBrands(String keyword, Integer page, Integer size) throws SearchException {
+        Map<String, Object> map = initSearchMap(keyword, page, size);
+        String str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.BRAND_INFO_URL, String.class, map);
+        if(StringUtils.isEmpty(str)) {
+            return null;
+        }else {
+            try {
+                SPage<Map<String, List<Integer>>> sPage = FastjsonUtils.fromJson(str, SPage.class);
+                return sPage;
+            }catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+    }
+
+    @Override
+    public Map<String, Object> getComponentIds(String keyword, PageParams var2) throws SearchException {
+        Map<String, Object> map = new HashedMap();
+        map.put("keyword", keyword);
+        map.put("params", FlexJsonUtils.toJsonDeep(var2));
+        String str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.COMPONENT_ID_URL, String.class, map);
+        if(StringUtils.isEmpty(str)) {
+            return null;
+        }else {
+            try {
+                Map<String, Object> reMap = FastjsonUtils.fromJson(str, Map.class);
+                return reMap;
+            }catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+    }
+
+    @Override
+    public Set<Long> getKindIdsBySearchComponent(String keyword, String brandId) throws SearchException {
+        Map<String, Object> map = new HashedMap();
+        map.put("keyword", keyword);
+        map.put("brandId", brandId);
+        String str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.KIND_ID_COMPONENT_URL, String.class, map);
+        if(StringUtils.isEmpty(str)) {
+            return null;
+        }else {
+            try {
+                Set<Long> reMap = FastjsonUtils.fromJson(str, Set.class);
+                return reMap;
+            }catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+    }
+
+    @Override
+    public List<Map<String, Object>> getKindsBySearchComponent(String keyword, String brandId) throws SearchException {
+        Map<String, Object> map = new HashedMap();
+        map.put("keyword", keyword);
+        map.put("brandId", brandId);
+        String str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.KIND_COMPONENT_URL, String.class, map);
+        if(StringUtils.isEmpty(str)) {
+            return null;
+        }else {
+            try {
+                List<Map<String, Object>> reMap = FastjsonUtils.fromJson(str, List.class);
+                return reMap;
+            }catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+    }
+
+    @Override
+    public Set<Long> getBrandIdsBySearchComponent(String keyword, String kindId) throws SearchException {
+        Map<String, Object> map = new HashedMap();
+        map.put("keyword", keyword);
+        map.put("kindId", kindId);
+        String str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.BREAND_ID_COMPONENT_URL, String.class, map);
+        if(StringUtils.isEmpty(str)) {
+            return null;
+        }else {
+            try {
+                Set<Long> reMap = FastjsonUtils.fromJson(str, Set.class);
+                return reMap;
+            }catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+    }
+
+    @Override
+    public List<Map<String, Object>> getBrandsBySearchComponent(String keyword, String kindId) throws SearchException {
+        Map<String, Object> map = new HashedMap();
+        map.put("keyword", keyword);
+        map.put("kindId", kindId);
+        String str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.BREAND_COMPONENT_URL, String.class, map);
+        if(StringUtils.isEmpty(str)) {
+            return null;
+        }else {
+            try {
+                List<Map<String, Object>> reMap = FastjsonUtils.fromJson(str, List.class);
+                return reMap;
+            }catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+    }
+
+    @Override
+    public List<String> getSimilarKeywords(String keyword) throws SearchException {
+        Map<String, Object> map = new HashedMap();
+        map.put("keyword", keyword);
+        String str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.SIMILAR_KEYWORD_URL, String.class, map);
+        if(StringUtils.isEmpty(str)) {
+            return null;
+        }else {
+            try {
+                List<String> reMap = FastjsonUtils.fromJson(str, List.class);
+                return reMap;
+            }catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+    }
+
+    @Override
+    public List<Map<String, Object>> getSimilarComponents(String keyword) throws SearchException {
+        Map<String, Object> map = new HashedMap();
+        map.put("keyword", keyword);
+        String str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.SIMILAR_COMPONENT_URL, String.class, map);
+        if(StringUtils.isEmpty(str)) {
+            return null;
+        }else {
+            try {
+                List<Map<String, Object>> reMap = FastjsonUtils.fromJson(str, List.class);
+                return reMap;
+            }catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+    }
+
+    @Override
+    public List<Map<String, Object>> getSimilarBrands(String keyword) throws SearchException {
+        Map<String, Object> map = new HashedMap();
+        map.put("keyword", keyword);
+        String str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.SIMILAR_BRAND_URL, String.class, map);
+        if(StringUtils.isEmpty(str)) {
+            return null;
+        }else {
+            try {
+                List<Map<String, Object>> reMap = FastjsonUtils.fromJson(str, List.class);
+                return reMap;
+            }catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+    }
+
+    @Override
+    public List<Map<String, Object>> getSimilarKinds(String keyword) throws SearchException {
+        Map<String, Object> map = new HashedMap();
+        map.put("keyword", keyword);
+        String str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.SIMILAR_KIND_URL, String.class, map);
+        if(StringUtils.isEmpty(str)) {
+            return null;
+        }else {
+            try {
+                List<Map<String, Object>> reMap = FastjsonUtils.fromJson(str, List.class);
+                return reMap;
+            }catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+    }
+
+    @Override
+    public List<Map<String, Object>> getSimilarLeafKinds(String keyword) throws SearchException {
+        Map<String, Object> map = new HashedMap();
+        map.put("keyword", keyword);
+        String str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.SIMILAR_LEAF_KIND_URL, String.class, map);
+        if(StringUtils.isEmpty(str)) {
+            return null;
+        }else {
+            try {
+                List<Map<String, Object>> reMap = FastjsonUtils.fromJson(str, List.class);
+                return reMap;
+            }catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+    }
+
+    @Override
+    public List<Map<String, Object>> getSimilarKindsByLevel(String kindName, Short level) throws SearchException {
+        Map<String, Object> map = new HashedMap();
+        map.put("kindName", kindName);
+        map.put("level", level);
+        String str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.SIMILAR__KIND_LEVEL_URL, String.class, map);
+        if(StringUtils.isEmpty(str)) {
+            return null;
+        }else {
+            try {
+                List<Map<String, Object>> reMap = FastjsonUtils.fromJson(str, List.class);
+                return reMap;
+            }catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+    }
+
+    @Override
+    public List<Map<String, String>> getSimilarPropertyValues(Long kindId, Long propertyId, String keyword, Long topNum) throws SearchException {
+        Map<String, Object> map = new HashedMap();
+        map.put("kindId", kindId);
+        map.put("propertyId", propertyId);
+        map.put("keyword", keyword);
+        map.put("topNum", topNum);
+        String str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.PROPERTYVALUES_URL, String.class, map);
+        if(StringUtils.isEmpty(str)) {
+            return null;
+        }else {
+            try {
+                List<Map<String, String>> reMap = FastjsonUtils.fromJson(str, List.class);
+                return reMap;
+            }catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+    }
+
+    @Override
+    public Map<String, Object> getGoodsIds(String keyword, PageParams var2) throws SearchException {
+        Map<String, Object> map = new HashedMap();
+        map.put("keyword", keyword);
+        map.put("params", FlexJsonUtils.toJsonDeep(var2));
+        String str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.GOODIS_URL, String.class, map);
+        if(StringUtils.isEmpty(str)) {
+            return null;
+        }else {
+            try {
+                Map<String, Object> reMap = FastjsonUtils.fromJson(str, Map.class);
+                return reMap;
+            }catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+    }
+
+    @Override
+    public List<Map<String, Object>> collectBySearchGoods(String keyword, CollectField collectField, Map<PageParams.FilterField, Object> filters) {
+        Map<String, Object> map = new HashedMap();
+        map.put("keyword", keyword);
+        map.put("collectedField", collectField);
+        map.put("filters", FastjsonUtils.toJson(filters));
+        String str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.GOODS_COLLECT_URL, String.class, map);
+        if(StringUtils.isEmpty(str)) {
+            return null;
+        }else {
+            try {
+                List<Map<String, Object>> reMap = FastjsonUtils.fromJson(str, List.class);
+                return reMap;
+            }catch (Exception e) {
+                e.printStackTrace();
+                return null;
+            }
+        }
+    }
+
+    public Map<String , Object> initSearchMap(String keyword, Integer page, Integer size) {
+        Map<String, Object> map = new HashedMap();
+        map.put("keyword", keyword);
+        map.put("page", page);
+        map.put("size", size);
+        return map;
+    }
+}

+ 35 - 0
src/main/java/com/uas/platform/b2c/common/search/rpc/service/OrderSearchService.java

@@ -0,0 +1,35 @@
+package com.uas.platform.b2c.common.search.rpc.service;
+
+import com.uas.search.exception.SearchException;
+import com.uas.search.model.BaseOrder;
+import com.uas.search.model.PageParams;
+import com.uas.search.model.SPage;
+
+/**
+ * Created by yujia on 2017/10/21.
+ */
+public interface OrderSearchService {
+
+    SPage<BaseOrder> getOrderIdsWithDetail(String var1, OrderSearchService.Table_name var2, PageParams var3) throws SearchException;
+
+    public static enum Table_name {
+        ORDER("order"),
+        PURCHASE("purchase"),
+        ORDER_INVOICE("order_invoice"),
+        PURCHASE_INVOICE("purchase_invocie");
+
+        private String phrase;
+
+        private Table_name(String phrase) {
+            this.phrase = phrase;
+        }
+
+        public String value() {
+            return this.phrase;
+        }
+
+        public String toString() {
+            return this.phrase;
+        }
+    }
+}

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

@@ -0,0 +1,53 @@
+package com.uas.platform.b2c.common.search.rpc.service;
+
+/**
+ * Created by yujia on 2017/10/20.
+ *
+ * 通过http方式调用远端的搜索接口
+ */
+import com.uas.search.exception.SearchException;
+import com.uas.search.model.CollectField;
+import com.uas.search.model.PageParams;
+import com.uas.search.model.SPage;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public interface SearchService {
+    SPage<Long> getKindIds(String keyword, Integer page, Integer size) throws SearchException;
+
+    SPage<Map<String, Object>> getKinds(String keyword, Integer page, Integer size) throws SearchException;
+
+    SPage<Long> getBrandIds(String keyword, Integer page, Integer size) throws SearchException;
+
+    SPage<Map<String, List<Integer>>> getBrands(String keyword, Integer page, Integer size) throws SearchException;
+
+    Map<String, Object> getComponentIds(String keyword, PageParams var2) throws SearchException;
+
+    Set<Long> getKindIdsBySearchComponent(String keyword, String brandId) throws SearchException;
+
+    List<Map<String, Object>> getKindsBySearchComponent(String keyword, String brandId) throws SearchException;
+
+    Set<Long> getBrandIdsBySearchComponent(String keyword, String kindId) throws SearchException;
+
+    List<Map<String, Object>> getBrandsBySearchComponent(String keyword, String kindId) throws SearchException;
+
+    List<String> getSimilarKeywords(String keyword) throws SearchException;
+
+    List<Map<String, Object>> getSimilarComponents(String keyword) throws SearchException;
+
+    List<Map<String, Object>> getSimilarBrands(String keyword) throws SearchException;
+
+    List<Map<String, Object>> getSimilarKinds(String keyword) throws SearchException;
+
+    List<Map<String, Object>> getSimilarLeafKinds(String keyword) throws SearchException;
+
+    List<Map<String, Object>> getSimilarKindsByLevel(String kindName, Short level) throws SearchException;
+
+    List<Map<String, String>> getSimilarPropertyValues(Long kindId, Long propertyId, String keyword, Long topNum) throws SearchException;
+
+    Map<String, Object> getGoodsIds(String keyword, PageParams var2) throws SearchException;
+
+    List<Map<String, Object>> collectBySearchGoods(String keyword, CollectField collectField, Map<PageParams.FilterField, Object> filters);
+}

+ 2 - 1
src/main/java/com/uas/platform/b2c/common/search/service/SearcherService.java

@@ -4,6 +4,7 @@ import com.uas.platform.core.model.PageParams;
 import com.uas.search.exception.SearchException;
 import org.springframework.ui.ModelMap;
 
+import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
@@ -94,7 +95,7 @@ public interface SearcherService {
 	 * @param paramJSON 参数json
 	 * @return 类目,器件,店铺类型,货币类型统计
 	 */
-	public List<Map<String, Object>> getCollectlistBySearchComponentGoods(String keyword, String collectList,String paramJSON);
+	public List<Map<String, Object>> getCollectlistBySearchComponentGoods(String keyword, String collectList, String paramJSON, HttpServletRequest request);
 
 
 	/**

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

@@ -1,8 +1,10 @@
 package com.uas.platform.b2c.common.search.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.uas.platform.b2c.common.search.rpc.service.SearchService;
 import com.uas.platform.b2c.common.search.service.SearcherService;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.platform.b2c.prod.product.brand.dao.BrandDao;
 import com.uas.platform.b2c.prod.product.component.dao.ComponentGoodsDao;
 import com.uas.platform.b2c.prod.product.component.dao.ComponentInfoDao;
 import com.uas.platform.b2c.prod.product.component.modal.ComponentGoods;
@@ -15,15 +17,17 @@ import com.uas.search.model.CollectField;
 import com.uas.search.model.PageParams.FilterField;
 import com.uas.search.model.SPage;
 import com.uas.search.model.Sort;
-import com.uas.search.service.SearchService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.mobile.device.DeviceResolver;
+import org.springframework.mobile.device.LiteDeviceResolver;
 import org.springframework.stereotype.Service;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
+import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
 import java.util.*;
 import java.util.Map.Entry;
@@ -46,7 +50,11 @@ public class SearcherServiceImpl implements SearcherService {
 	@Autowired
 	private SearchService searchService;
 
+	@Autowired
+	private BrandDao brandDao;
+
 	private Logger logger = LoggerFactory.getLogger(getClass());
+	private final DeviceResolver deviceResolver = new LiteDeviceResolver();
 
 	/**
 	 * 智能搜索类目
@@ -83,7 +91,7 @@ public class SearcherServiceImpl implements SearcherService {
 	@Override
 	public ModelMap searchBrand(String keyword, String field) {
 		ModelMap map = new ModelMap();
-		SPage<Map<String, Object>> brands = null;
+		SPage<Map<String, List<Integer>>> brands = null;
 		try {
 			brands = searchService.getBrands(keyword,1,1024*1024*1024);
 		} catch (SearchException e) {
@@ -148,7 +156,7 @@ public class SearcherServiceImpl implements SearcherService {
 		List<Map<String, Object>> brands = (List)brandMap.get("brands");
 		if (!CollectionUtils.isEmpty(brands)) {
 			for (Map<String, Object> brand : brands){
-				if (keyword.equals(brand.get("nameCn").toString()) || keyword.equals(brand.get("nameEn").toString())){
+				if (keyword.equalsIgnoreCase(brand.get("nameCn").toString()) || keyword.equalsIgnoreCase(brand.get("nameEn").toString())){
 					map.put("brands",brand);
 				}
 			}
@@ -160,12 +168,14 @@ public class SearcherServiceImpl implements SearcherService {
 			map.put("components", new ArrayList<>());// 当前页器件内容
 			return map;
 		}
-		List<Long> componentIds = (List<Long>)results.get("componentIds");
-		List<Long> goodsIds = (List<Long>)results.get("goodsIds");
+		List<Integer> componentIds = (List<Integer>)results.get("componentIds");
+		List<Integer> goodsIds = (List<Integer>)results.get("goodsIds");
 		List<ComponentGoods> components = new ArrayList<>();
 		if (!CollectionUtils.isEmpty(componentIds)) {
 			for (int i = 0 ;i < componentIds.size() ; i++){
-				ComponentGoods componentGoods = componentGoodsDao.findByCmpIdAndGoId(componentIds.get(i),goodsIds.get(i));
+				Long cid = Long.valueOf(componentIds.get(i).toString());
+				Long gid = goodsIds.get(i) == null ? 0L : Long.valueOf(goodsIds.get(i).toString());
+				ComponentGoods componentGoods = componentGoodsDao.findByCmpIdAndGoId(cid, gid);
 				if (componentGoods != null){
 					components.add(componentGoods);
 				}
@@ -245,7 +255,7 @@ public class SearcherServiceImpl implements SearcherService {
 	 * @return
 	 */
 	@Override
-	public List<Map<String, Object>> getCollectlistBySearchComponentGoods(String keyword, String collectList, String paramJSON) {
+	public List<Map<String, Object>> getCollectlistBySearchComponentGoods(String keyword, String collectList, String paramJSON , HttpServletRequest request) {
 		List<Map<String, Object>> collectResult = new ArrayList<>();
 		JSONObject jsonObject = FastjsonUtils.parseObject(paramJSON);
 		Set<Entry<String,Object>> paramEntry = jsonObject.entrySet();
@@ -258,6 +268,13 @@ public class SearcherServiceImpl implements SearcherService {
 		} catch (SearchException e) {
 			throwSystemException(e);
 		}
+		if ("goods_brand".equals(collectList)) {
+			if (this.deviceResolver.resolveDevice(request).isMobile()) {
+				for (Map<String, Object> m : collectResult) {
+					m.put("logoUrl", brandDao.findOne(Long.parseLong(m.get("br_id").toString())).getLogoUrl());
+				}
+			}
+		}
 		return collectResult;
 	}
 

+ 54 - 0
src/main/java/com/uas/platform/b2c/core/config/MicroServicesConf.java

@@ -16,6 +16,24 @@ public class MicroServicesConf {
 	@Value("#{sys.microServiceIp ?: '10.10.101.23'}")
 	private String microServiceIp;
 
+	/**
+	 * 特殊:news用的是官网数据库
+	 */
+	@Value("#{sys.newsMicroServiceIp ?: 'news.usoftchina.com'}")
+	private String newsMicroServiceIp;
+
+	/**
+	 * floor
+	 */
+	@Value("#{sys.floorMicroServiceIp ?: '10.10.0.30'}")
+	private String floorMicroServiceIp;
+
+	/**
+	 * 轮播
+	 */
+	@Value("#{sys.carouselMicroServiceIp ?: '10.10.0.188'}")
+	private String carouselMicroServiceIp;
+
 	public String getMicroServiceIp() {
 		return microServiceIp;
 	}
@@ -24,10 +42,46 @@ public class MicroServicesConf {
 		this.microServiceIp = microServiceIp;
 	}
 
+	public String getNewsMicroServiceIp() {
+		return newsMicroServiceIp;
+	}
+
+	public void setNewsMicroServiceIp(String newsMicroServiceIp) {
+		this.newsMicroServiceIp = newsMicroServiceIp;
+	}
+
+	public String getFloorMicroServiceIp() {
+		return floorMicroServiceIp;
+	}
+
+	public void setFloorMicroServiceIp(String floorMicroServiceIp) {
+		this.floorMicroServiceIp = floorMicroServiceIp;
+	}
+
+	public String getCarouselMicroServiceIp() {
+		return carouselMicroServiceIp;
+	}
+
+	public void setCarouselMicroServiceIp(String carouselMicroServiceIp) {
+		this.carouselMicroServiceIp = carouselMicroServiceIp;
+	}
+
 	public String getRequestUrl(int port, String requestUrl) {
 		return String.format("http://%s:%d%s", this.microServiceIp, port, requestUrl);
 	}
 
+	public String getRequestUrlForNews(String requestUrl) {
+		return String.format("http://%s%s", this.newsMicroServiceIp, requestUrl);
+	}
+
+	public String getRequestUrlForFloor(int port, String requestUrl) {
+		return String.format("http://%s:%d%s", this.floorMicroServiceIp,port, requestUrl);
+	}
+
+	public String getRequestUrlForCarousel(int port, String requestUrl) {
+		return String.format("http://%s:%d%s", this.carouselMicroServiceIp,port, requestUrl);
+	}
+
 	public String getRequestUrl(int port, String requestUrl, PageParams pageable) {
 		return String.format("http://%s:%d%s%s", this.microServiceIp, port, requestUrl, "&count=" + pageable.getCount() + "&page=" + pageable.getPage() + "&filter=" + pageable.getFilter());
 	}

+ 4 - 1
src/main/java/com/uas/platform/b2c/core/config/MicroServicesConfMulti.java

@@ -16,6 +16,9 @@ public class MicroServicesConfMulti {
 	@Value("#{sys.endpointUri ?: '10.10.101.23'}")
 	private String microServiceIp;
 
+	@Value("#{sys.storecmsMicroServiceIp ?: '10.10.101.23'}")
+	private String storecmsMicroServiceIp;
+
 	@Value("#{sys.recommendPort ?: '20102'}")
 	private String recommendPort;
 
@@ -36,6 +39,6 @@ public class MicroServicesConfMulti {
 	}
 
 	public String getRecommendUrl(String requestUrl) {
-		return String.format("http://%s:%s%s", this.microServiceIp, this.recommendPort, requestUrl);
+		return String.format("http://%s:%s%s", this.storecmsMicroServiceIp, this.recommendPort, requestUrl);
 	}
 }

+ 30 - 0
src/main/java/com/uas/platform/b2c/core/config/SysConf.java

@@ -130,6 +130,18 @@ public class SysConf {
 	@Value("#{sys.reportUploadUrl}")
 	private String reportUploadUrl;
 
+	/**
+	 * 文件上传的地址
+	 */
+	@Value("#{sys.uploadFileUrl}")
+	private String uploadFileUrl;
+
+	/**
+	 * 搜索的地址
+	 */
+	@Value("#{sys.searchUrl}")
+	private String searchUrl;
+
 	public Boolean getRebuildIndexesOnRefresh() {
 		return rebuildIndexesOnRefresh;
 	}
@@ -275,4 +287,22 @@ public class SysConf {
 		this.adminName = adminName;
 		return this;
 	}
+
+	public String getUploadFileUrl() {
+		return uploadFileUrl;
+	}
+
+	public SysConf setUploadFileUrl(String uploadFileUrl) {
+		this.uploadFileUrl = uploadFileUrl;
+		return this;
+	}
+
+	public String getSearchUrl() {
+		return searchUrl;
+	}
+
+	public SysConf setSearchUrl(String searchUrl) {
+		this.searchUrl = searchUrl;
+		return this;
+	}
 }

+ 0 - 351
src/main/java/com/uas/platform/b2c/core/utils/HttpUtils.java

@@ -1,351 +0,0 @@
-package com.uas.platform.b2c.core.utils;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.http.Consts;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.NameValuePair;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.entity.UrlEncodedFormEntity;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.ContentType;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.entity.mime.MultipartEntityBuilder;
-import org.apache.http.entity.mime.content.FileBody;
-import org.apache.http.entity.mime.content.InputStreamBody;
-import org.apache.http.entity.mime.content.StringBody;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.message.BasicNameValuePair;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URLEncoder;
-import java.util.*;
-import java.util.Map.Entry;
-
-public class HttpUtils {
-
-	/**
-	 * 发起POST、PUT请求
-	 * 
-	 * @param params
-	 * @return
-	 * @throws Exception
-	 */
-	public static Response get(String url, Map<String, Object> params) throws Exception {
-		CloseableHttpClient httpClient = HttpClients.createDefault();
-		HttpEntityEnclosingRequestBase request = null;
-		CloseableHttpResponse response = null;
-		try {
-			StringBuilder buf = new StringBuilder(url);
-			if (params != null && !params.isEmpty()) {
-				if (url.indexOf("?") == -1)
-					buf.append("?");
-				else if (!url.endsWith("&"))
-					buf.append("&");
-				Set<Entry<String, Object>> entrys = params.entrySet();
-				for (Entry<String, Object> entry : entrys) {
-					buf.append(entry.getKey()).append("=").append(URLEncoder.encode(String.valueOf(entry.getValue()), "UTF-8")).append("&");
-				}
-			}
-			request = new HttpPost(buf.toString());
-			response = httpClient.execute(request);
-			return Response.getResponse(response);
-		} finally {
-			request.releaseConnection();
-			try {
-				httpClient.close();
-			} catch (IOException e) {
-			}
-			if (response != null) {
-				try {
-					response.close();
-				} catch (IOException e) {
-				}
-			}
-		}
-	}
-
-	/**
-	 * 发起POST、PUT请求
-	 *
-	 * @param datas
-	 * @return
-	 * @throws Exception
-	 */
-	public static Response post(String url, Collection<?> datas) throws Exception {
-		CloseableHttpClient httpClient = HttpClients.createDefault();
-		HttpEntityEnclosingRequestBase request = new HttpPost(url);
-		CloseableHttpResponse response = null;
-		try {
-			if (datas != null && !datas.isEmpty()) {
-				request.setEntity(new StringEntity(FastjsonUtils.toJson(datas), ContentType.create("text/plain", Consts.UTF_8)));
-			}
-			response = httpClient.execute(request);
-			return Response.getResponse(response);
-		} finally {
-			request.releaseConnection();
-			try {
-				httpClient.close();
-			} catch (IOException e) {
-			}
-			if (response != null) {
-				try {
-					response.close();
-				} catch (IOException e) {
-				}
-			}
-		}
-	}
-
-	/**
-	 * 发起POST、PUT请求
-	 *
-	 * @param params
-	 * @return
-	 * @throws Exception
-	 */
-	public static Response post(String url, Map<String, String> params) throws Exception {
-		CloseableHttpClient httpClient = HttpClients.createDefault();
-		HttpEntityEnclosingRequestBase request = new HttpPost(url);
-		CloseableHttpResponse response = null;
-		try {
-			List<NameValuePair> nvps = new ArrayList<NameValuePair>();
-			if (params != null && !params.isEmpty()) {
-				Set<Entry<String, String>> entrys = params.entrySet();
-				for (Entry<String, String> entry : entrys) {
-					nvps.add(new BasicNameValuePair(entry.getKey(), URLEncoder.encode(entry.getValue(), "UTF-8")));
-				}
-			}
-			request.setEntity(new UrlEncodedFormEntity(nvps));
-			response = httpClient.execute(request);
-			return Response.getResponse(response);
-		} finally {
-			request.releaseConnection();
-			try {
-				httpClient.close();
-			} catch (IOException e) {
-			}
-			if (response != null) {
-				try {
-					response.close();
-				} catch (IOException e) {
-				}
-			}
-		}
-	}
-
-	/**
-	 * http上传文件
-	 * 
-	 * @param url
-	 *            请求地址
-	 * @param filePath
-	 *            附件路径
-	 * @param params
-	 *            参数
-	 * @return
-	 * @throws Exception
-	 * @throws IOException
-	 * @throws IllegalStateException
-	 */
-	public static Response upload(String url, String filePath, Map<String, String> params) throws IllegalStateException, IOException,
-			Exception {
-		CloseableHttpClient httpClient = null;
-		CloseableHttpResponse response = null;
-		try {
-			httpClient = HttpClients.createDefault();
-			HttpPost httpPost = new HttpPost(url);
-			FileBody fileBody = new FileBody(new File(filePath));
-			MultipartEntityBuilder builder = MultipartEntityBuilder.create();
-			builder.addPart("file", fileBody);
-			if (params != null) {
-				for (String paramKey : params.keySet()) {
-					StringBody body = new StringBody(params.get(paramKey), ContentType.create("text/plain", Consts.UTF_8));
-					builder.addPart(paramKey, body);
-				}
-			}
-			HttpEntity reqEntity = builder.build();
-			httpPost.setEntity(reqEntity);
-			response = httpClient.execute(httpPost);
-			return Response.getResponse(response);
-		} finally {
-			try {
-				if (response != null) {
-					response.close();
-				}
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-			try {
-				if (httpClient != null) {
-					httpClient.close();
-				}
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		}
-	}
-
-
-	/**
-	 * http上传文件
-	 *
-	 * @param url
-	 *            请求地址
-	 * @param file
-	 *            文件
-	 * @param params
-	 *            参数
-	 * @return
-	 * @throws Exception
-	 * @throws IOException
-	 * @throws IllegalStateException
-	 */
-	public static Response upload(String url, File file, Map<String, String> params) throws IllegalStateException, IOException,
-			Exception {
-		CloseableHttpClient httpClient = null;
-		CloseableHttpResponse response = null;
-		try {
-			httpClient = HttpClients.createDefault();
-			HttpPost httpPost = new HttpPost(url);
-			FileBody fileBody = new FileBody(file);
-			MultipartEntityBuilder builder = MultipartEntityBuilder.create();
-			builder.addPart("file", fileBody);
-			if (params != null) {
-				for (String paramKey : params.keySet()) {
-					StringBody body = new StringBody(params.get(paramKey), ContentType.create("text/plain", Consts.UTF_8));
-					builder.addPart(paramKey, body);
-				}
-			}
-			HttpEntity reqEntity = builder.build();
-			httpPost.setEntity(reqEntity);
-			response = httpClient.execute(httpPost);
-			return Response.getResponse(response);
-		} finally {
-			try {
-				if (response != null) {
-					response.close();
-				}
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-			try {
-				if (httpClient != null) {
-					httpClient.close();
-				}
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		}
-	}
-
-	/**
-	 * http上传文件
-	 *
-	 * @param url
-	 *            请求地址
-	 * @param multipartFile
-	 *            附件路径
-	 * @param params
-	 *            参数
-	 * @return
-	 * @throws Exception
-	 * @throws IOException
-	 * @throws IllegalStateException
-	 */
-	public static Response upload(String url, MultipartFile multipartFile, Map<String, String> params) throws IllegalStateException, IOException,
-			Exception {
-		CloseableHttpClient httpClient = null;
-		CloseableHttpResponse response = null;
-		try {
-			httpClient = HttpClients.createDefault();
-			HttpPost httpPost = new HttpPost(url);
-			InputStreamBody streamBody = new InputStreamBody(multipartFile.getInputStream(),
-				multipartFile.getOriginalFilename());
-			MultipartEntityBuilder builder = MultipartEntityBuilder.create();
-			builder.addPart("file", streamBody);
-			if (params != null) {
-				for (String paramKey : params.keySet()) {
-					StringBody body = new StringBody(params.get(paramKey), ContentType.create("text/plain", Consts.UTF_8));
-					builder.addPart(paramKey, body);
-				}
-			}
-			HttpEntity reqEntity = builder.build();
-			httpPost.setEntity(reqEntity);
-			response = httpClient.execute(httpPost);
-			return Response.getResponse(response);
-		} finally {
-			try {
-				if (response != null) {
-					response.close();
-				}
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-			try {
-				if (httpClient != null) {
-					httpClient.close();
-				}
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		}
-	}
-
-	/**
-	 * 下载
-	 * 
-	 * @param url
-	 * @return
-	 * @throws ClientProtocolException
-	 * @throws IOException
-	 */
-	public static InputStream download(String url) throws ClientProtocolException, IOException {
-		CloseableHttpClient httpClient = HttpClients.createDefault();
-		HttpGet httpGet = new HttpGet(url);
-		CloseableHttpResponse response = httpClient.execute(httpGet);
-		return response.getEntity().getContent();
-	}
-
-	public static class Response {
-		private int statusCode;
-		private String responseText;
-
-		public int getStatusCode() {
-			return statusCode;
-		}
-
-		public void setStatusCode(int statusCode) {
-			this.statusCode = statusCode;
-		}
-
-		public String getResponseText() {
-			return responseText;
-		}
-
-		public void setResponseText(String responseText) {
-			this.responseText = responseText;
-		}
-
-		public Response() {
-		}
-
-		public Response(HttpResponse response) throws IllegalStateException, IOException, Exception {
-			this.statusCode = response.getStatusLine().getStatusCode();
-			this.responseText = IOUtils.toString(response.getEntity().getContent());
-		}
-
-		public static Response getResponse(HttpResponse response) throws IllegalStateException, IOException, Exception {
-			if (response != null)
-				return new Response(response);
-			return null;
-		}
-	}
-}

+ 1 - 1
src/main/java/com/uas/platform/b2c/external/erp/order/api/OrderController.java

@@ -1,6 +1,5 @@
 package com.uas.platform.b2c.external.erp.order.api;
 
-import com.alibaba.dubbo.common.utils.StringUtils;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2c.common.account.model.Enterprise;
@@ -22,6 +21,7 @@ import com.uas.platform.core.model.Status;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.ui.ModelMap;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.management.OperationsException;

+ 1 - 1
src/main/java/com/uas/platform/b2c/fa/settlement/service/impl/BillSubmitServiceImpl.java

@@ -81,7 +81,7 @@ public class BillSubmitServiceImpl implements BillSubmitService {
             }
             orderidList.removeAll(orderIds);
 
-            String errorIdStr = com.alibaba.dubbo.common.utils.StringUtils.join(orderids, SplitChar.COMMA);
+            String errorIdStr = org.apache.commons.lang3.StringUtils.join(orderids, SplitChar.COMMA);
             throw new IllegalOperatorException("订单号: " + errorIdStr + " 不存在,请重新确认订单信息");
         }
 

+ 1 - 1
src/main/java/com/uas/platform/b2c/logistics/model/DistributionRule.java

@@ -89,7 +89,7 @@ public class DistributionRule {
 
 	/**
 	 * 计费方式
-	 * 1-统一规定运费,2-按总金额计算
+	 * 1-统一规定运费,2-按总金额计算, 3-到付,到付设置为统一运费0
 	 */
 	@Column(name = "rule_fare_type")
 	private Short fareType;

+ 13 - 0
src/main/java/com/uas/platform/b2c/logistics/model/UsableRuleInfo.java

@@ -33,6 +33,10 @@ public class UsableRuleInfo {
 	 * 配送规则币别
 	 */
 	private String currencyName;
+	/**
+	 * 支付类型
+	 */
+	private Short fareType;
 
 	public UsableRuleInfo(){
 
@@ -44,6 +48,7 @@ public class UsableRuleInfo {
 		this.method = rule.getShippingMethod();
 		this.currencyName = rule.getCurrencyName();
 		this.enuu = rule.getEnuu();
+		this.fareType = rule.getFareType();
 	}
 
 	public Long getId() {
@@ -101,4 +106,12 @@ public class UsableRuleInfo {
 	public void setUuid(String uuid) {
 		this.uuid = uuid;
 	}
+
+	public Short getFareType() {
+		return fareType;
+	}
+
+	public void setFareType(Short fareType) {
+		this.fareType = fareType;
+	}
 }

+ 14 - 1
src/main/java/com/uas/platform/b2c/logistics/service/impl/DistributionRuleServiceImpl.java

@@ -84,6 +84,13 @@ public class DistributionRuleServiceImpl implements DistributionRuleService{
 		if (rule.getFareType() == 2 && CollectionUtils.isEmpty(rule.getFares())){
 			return new ResultMap(CodeType.NO_INFO, "请完善计费方式");
 		}
+		if (rule.getFareType() == 2){
+			rule.setUniformPrice(null);
+		}else {
+			if (CollectionUtils.isEmpty(rule.getFares())){
+				rule.setQtyFare(null);
+			}
+		}
 		if (rule.getId() == null){ //新增配送规则,初始化数据
 			Long uu = SystemSession.getUser().getUserUU();
 			Long enuu = SystemSession.getUser().getEnterprise().getUu();
@@ -101,6 +108,9 @@ public class DistributionRuleServiceImpl implements DistributionRuleService{
 		}else {
 			rule.setActive(ShortConstant.NO_SHORT);
 		}
+		if (rule.getFareType() == 3){ //到付类型
+			rule.setUniformPrice(0d);
+		}
 		if (!isAdd){ //若为另存为,则将主键id设为空
 			if (rule.getId() != null){
 				rule.setId(null);
@@ -397,9 +407,12 @@ public class DistributionRuleServiceImpl implements DistributionRuleService{
 	 */
 	public Double getFareOfRule(DistributionRule rule, Double price){
 		Double needFare = null;
-		if (rule.getFareType() == 1){
+		if (rule.getFareType() == 1 || rule.getFareType() == 3){
 			needFare = rule.getUniformPrice();
 		}else {
+			if (CollectionUtils.isEmpty(rule.getFares())){
+				throw new  IllegalOperatorException("配送规则信息丢失,刷新后重试");
+			}
 			for (RuleQtyFare fare : rule.getFares()){
 				if (fare.getStart() <= price){
 					if (fare.getEnd() != null){

+ 1 - 1
src/main/java/com/uas/platform/b2c/logistics/service/impl/LogisticsCompanyCodeServiceImpl.java

@@ -6,11 +6,11 @@ import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import com.alibaba.dubbo.common.utils.CollectionUtils;
 import com.uas.platform.b2c.logistics.dao.LogisticsCompanyCodeDao;
 import com.uas.platform.b2c.logistics.model.LogisticsCompanyCode;
 import com.uas.platform.b2c.logistics.service.LogisticsCompanyCodeService;
 import com.uas.platform.core.exception.IllegalOperatorException;
+import org.springframework.util.CollectionUtils;
 
 @Service
 public class LogisticsCompanyCodeServiceImpl implements LogisticsCompanyCodeService {

+ 38 - 6
src/main/java/com/uas/platform/b2c/prod/commodity/controller/GoodsController.java

@@ -1,5 +1,12 @@
 package com.uas.platform.b2c.prod.commodity.controller;
 
+import com.uas.platform.b2c.common.base.model.FileUpload;
+import com.uas.platform.b2c.common.search.rpc.service.SearchService;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
+import com.uas.platform.b2c.core.support.view.JxlsExcelView;
+import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.platform.b2c.core.utils.StringUtilB2C;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
 import com.uas.platform.b2c.prod.commodity.model.Goods;
 import com.uas.platform.b2c.prod.commodity.model.GoodsHistory;
@@ -7,20 +14,15 @@ 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.service.GoodsHistoryService;
 import com.uas.platform.b2c.prod.commodity.service.GoodsService;
-import com.uas.platform.b2c.common.base.model.FileUpload;
 import com.uas.platform.b2c.prod.product.component.modal.ComponentInfo;
 import com.uas.platform.b2c.prod.product.component.service.ComponentService;
-import com.uas.platform.b2c.core.support.SystemSession;
-import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
-import com.uas.platform.b2c.core.utils.FastjsonUtils;
-import com.uas.platform.b2c.core.utils.StringUtilB2C;
-import com.uas.platform.b2c.core.support.view.JxlsExcelView;
 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;
 import com.uas.platform.core.model.Status;
+import org.apache.commons.collections.map.HashedMap;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@@ -65,6 +67,9 @@ public class GoodsController {
 	@Autowired
 	private GoodsDao goodsDao;
 
+	@Autowired
+	private SearchService searchService;
+
     /**
      * 发布(上架)产品
      *
@@ -644,4 +649,31 @@ public class GoodsController {
 		logger.log("商品管理", "下架该公司所有商品");
 		return goodsService.downAllGoodsByEnterprise(eName);
 	}
+
+	@RequestMapping(value = "/test/str", method = RequestMethod.GET)
+	public void getTest() {
+		searchService.getKindIds("电阻", 1, 10);
+
+		searchService.getKinds("电阻", 1, 10);
+
+		searchService.getBrandIds("Panasonic", 1, 10);
+
+		searchService.getBrands("Panasonic", 1, 10);
+
+		com.uas.search.model.PageParams page = new com.uas.search.model.PageParams();
+		page.setPage(1);
+		page.setSize(10);
+		searchService.getComponentIds("ac", page);
+
+		Map<com.uas.search.model.PageParams.FilterField, Object> filters = new HashedMap();
+		filters.put(com.uas.search.model.PageParams.FilterField.GOODS_KINDID, "401,23");
+		filters.put(com.uas.search.model.PageParams.FilterField.GOODS_BRANDID, "45");
+		filters.put(com.uas.search.model.PageParams.FilterField.GOODS_STORE_TYPE, "DISTRIBUTION");
+		filters.put(com.uas.search.model.PageParams.FilterField.GOODS_CRNAME, "RMB-USD");
+		filters.put(com.uas.search.model.PageParams.FilterField.GOODS_MINPRICERMB, "0");
+		filters.put(com.uas.search.model.PageParams.FilterField.GOODS_MAXPRICERMB, "10");
+		filters.put(com.uas.search.model.PageParams.FilterField.GOODS_MINPRICEUSD, "0");
+		filters.put(com.uas.search.model.PageParams.FilterField.GOODS_MAXPRICEUSD, "10");
+		page.setFilters(filters);
+	}
 }

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

@@ -6,6 +6,7 @@ import com.uas.platform.b2c.prod.commodity.model.Product;
 import com.uas.platform.b2c.prod.commodity.service.ProductService;
 import com.uas.platform.b2c.core.constant.SplitChar;
 import com.uas.platform.b2c.core.support.view.JxlsExcelView;
+import com.uas.platform.b2c.prod.commodity.type.ProductConstant;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
@@ -195,4 +196,20 @@ public class ProductController {
 	private ResultMap updateMatch(@RequestBody String json) {
 		return productService.updateMatch(json);
 	}
+
+	/**
+	 * 批量删除所有的非标的产品
+	 */
+	@RequestMapping(value = "/unstandard", method = RequestMethod.DELETE)
+	private ResultMap deleteUnstandardByBatch() {
+		 return productService.deleteBatch(ProductConstant.NSTANDARD);
+	}
+
+	/**
+	 * 批量删除所有的标准的产品
+	 */
+	@RequestMapping(value = "/standard", method = RequestMethod.DELETE)
+	private ResultMap deleteStandardByBatch() {
+		return productService.deleteBatch(ProductConstant.STANDARD);
+	}
 }

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

@@ -70,4 +70,14 @@ public interface ProductDao extends JpaSpecificationExecutor<Product>, JpaReposi
      */
     @Query(value = "select p from Product p where p.pcmpcode=:pcmpcode and p.pbranden=:pbranden and p.enUU=:enUU and p.standard=:standard")
     List<Product> findProductByPcmpcodeAndPbrandenAndEnUUAndStandard(@Param("pcmpcode") String pcmpcode, @Param("pbranden") String pbranden, @Param("enUU") Long enUU, @Param("standard") Integer standard);
+
+    /**
+     * 获取该企业的产品信息
+     * @param enuu 企业的uu号
+     * @param standard 是否是标准的信息
+     * @return 返回所属该公司的产品信息
+     */
+    @Query(value = "select p from Product p where p.enUU = :enuu and p.standard = :standard")
+    List<Product> findProductByEnuuAndStandard(@Param("enuu") Long enuu, @Param("standard") Integer standard);
+
 }

+ 13 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/dao/StockInOutHistDao.java

@@ -3,6 +3,8 @@ package com.uas.platform.b2c.prod.commodity.dao;
 import com.uas.platform.b2c.prod.commodity.model.StockInOutHist;
 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;
 
 import java.util.List;
@@ -23,4 +25,15 @@ public interface StockInOutHistDao extends JpaRepository<StockInOutHist, Long>,
      * @return list
      */
     List<StockInOutHist> findStockInOutHistByProdidOrderByOperateDateDesc(Long prodid);
+
+    /**
+     * 根据企业和类型统计该类型下的总量
+     * @param sellerenuu
+     * @param status
+     * @param storeid
+     * @return
+     */
+    @Query(nativeQuery = true , value = "select count(stock_qty) from trade$stock_in_out where stock_enuu = :enuu and stock_ioseller_type = :type")
+    int getCountByenuuAndIoSellerType(@Param("enuu") Long enuu, @Param("type") Integer type);
+
 }

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

@@ -385,7 +385,7 @@ public class ReleaseProductByBatch implements Serializable {
 	/**
 	 * 错误的信息
 	 */
-	@Column(name = "rel_errmsg")
+	@Column(name = "rel_errmsg", length = 4000)
 	private String errmsg;
 
 	/**

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

@@ -41,6 +41,13 @@ public interface ProductService {
      */
     void deleteBatch(List<Long> ids);
 
+    /**
+     * 批量删除产品
+     *
+     * @param type 批量删除的类型
+     */
+    ResultMap deleteBatch(String type);
+
     /**
      * 单个匹配
      *

+ 6 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/service/StockInOutHistService.java

@@ -27,4 +27,10 @@ public interface StockInOutHistService {
      * @return List<StockInOutHist> stock in out hist by prod id
      */
     List<StockInOutHist> getStockInOutHistByProdId(Long prodId);
+
+    /**
+     * 根据企业和类型统计该类型下的总量
+     * @return
+     */
+    int getCountByenuuAndIoSellerType(long enuu,int type);
 }

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

@@ -11,6 +11,7 @@ import com.uas.platform.b2c.prod.commodity.dao.*;
 import com.uas.platform.b2c.prod.commodity.model.*;
 import com.uas.platform.b2c.prod.commodity.service.GoodsHistoryService;
 import com.uas.platform.b2c.prod.commodity.service.ProductService;
+import com.uas.platform.b2c.prod.commodity.type.ProductConstant;
 import com.uas.platform.b2c.prod.product.brand.dao.BrandDao;
 import com.uas.platform.b2c.prod.product.brand.modal.Brand;
 import com.uas.platform.b2c.prod.product.component.dao.ComponentDao;
@@ -206,6 +207,50 @@ public class ProductServiceImpl implements ProductService {
         }
     }
 
+    /**
+     * 批量删除产品
+     *
+     * @param type 批量删除的类型
+     */
+    @Override
+    public ResultMap deleteBatch(String type) {
+        Integer standard = null;
+        Integer fail = 0;
+        Integer success = 0;
+        Long uu = SystemSession.getUser().getEnterprise().getUu();
+        if(ProductConstant.STANDARD.equals(type)) {
+            standard = IntegerConstant.YES_SHORT;
+        }else {
+            standard = IntegerConstant.NO_SHORT;
+        }
+        List<Product> products = productDao.findProductByEnuuAndStandard(uu, standard);
+        for (Product product : products) {
+            try {
+                productDao.delete(product);
+                success++;
+            } catch (Exception e) {
+                fail++;
+            }
+        }
+
+        Integer status = CodeType.OK.code();
+        String message = "";
+        if(success != 0) {
+            message += "成功删除" + success + "条";
+        }
+        if(fail != 0) {
+            if(success != 0) {
+                message += ",";
+            }
+            message += "删除失败" + fail + "条,原因:该产品可能已经被其他单据引用,无法删除";
+        }
+        //如果是全部都不能删除,才能设置失败的状态码
+        if((products.size() != 0) && (products.size() ==  fail.intValue())) {
+            status = CodeType.ERROR_STATE.code();
+        }
+        return new ResultMap(status, message);
+    }
+
     @Override
     public Product match(Long id) {
         Product product = productDao.findOne(id);

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

@@ -44,4 +44,9 @@ public class StockInOutHistServiceImpl implements StockInOutHistService{
         }
         return stockInOutHistDao.findStockInOutHistByProdidOrderByOperateDateDesc(prodId);
     }
+
+    @Override
+    public int getCountByenuuAndIoSellerType(long enuu, int type) {
+        return stockInOutHistDao.getCountByenuuAndIoSellerType(enuu,type);
+    }
 }

+ 19 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/type/ProductConstant.java

@@ -0,0 +1,19 @@
+package com.uas.platform.b2c.prod.commodity.type;
+
+/**
+ * 产品库的常量
+ *
+ * @author yuj 2017-10-27 19:22
+ */
+public class ProductConstant {
+
+    /**
+     * 标准的产品信息
+     */
+    public final static String STANDARD = "standard";
+
+    /**
+     * 非标的标志
+     */
+    public final static String NSTANDARD = "nStandard";
+}

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

@@ -2,6 +2,7 @@ package com.uas.platform.b2c.prod.product.component.dao;
 
 import java.util.List;
 
+import com.uas.platform.b2c.prod.product.component.modal.ComponentGoodsId;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Query;
@@ -12,7 +13,7 @@ import com.uas.platform.b2c.prod.product.component.modal.ComponentGoods;
 
 @Repository
 public interface ComponentGoodsDao extends JpaSpecificationExecutor<ComponentGoods>,
-		JpaRepository<ComponentGoods, Long> {
+		JpaRepository<ComponentGoods, ComponentGoodsId> {
 
 	/**
 	 * 按id获取产品信息,并且按照给定的id的顺序
@@ -20,7 +21,7 @@ public interface ComponentGoodsDao extends JpaSpecificationExecutor<ComponentGoo
 	 * @param ids
 	 * @return 产品列表信息
 	 */
-	@Query("select cg from ComponentGoods cg where cg.cmpId in (:ids) order by instr(':ids', cg.id) , cg.reserve")
+	@Query("select cg from ComponentGoods cg where cg.cmpId in (:ids) order by instr(':ids', cg.cmpId) , cg.reserve")
 	public List<ComponentGoods> findByIdsInOrder(@Param("ids") Long[] ids);
 
 	/**
@@ -37,5 +38,5 @@ public interface ComponentGoodsDao extends JpaSpecificationExecutor<ComponentGoo
 	 * @param goID 批次id
 	 * @return 产品列表信息
 	 */
-	public ComponentGoods findByCmpIdAndGoId(Long cmpId,Long goID);
+	public ComponentGoods findByCmpIdAndGoId(Long cmpId, Long goID);
 }

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/product/component/modal/ComponentCrawlTask.java

@@ -121,7 +121,7 @@ public class ComponentCrawlTask implements Serializable {
 	 * 属性对应关系
 	 */
 	@Lob
-	@Column(name = "cct_contrastjson", columnDefinition = "LONGBLOB")
+	@Column(name = "cct_contrastjson", columnDefinition = "TEXT")
 	private String contrast;
 
 	/**

+ 18 - 17
src/main/java/com/uas/platform/b2c/prod/product/component/modal/ComponentGoods.java

@@ -23,26 +23,20 @@ import java.util.List;
  */
 @Entity
 @Table(name = "v$product$cmpgoods")
+@IdClass(ComponentGoodsId.class)
 public class ComponentGoods implements Serializable {
 
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 主键id 因为在视图中使用的rowid,所以这里id为String类型
-	 */
-	@Id
-	@Column(name = "id", unique = true, nullable = false, insertable = false, updatable = false)
-	private Long id;
-
 	/**
 	 * product$component的主键
 	 */
+	@Id
 	@Column(name = "cmp_id")
 	private Long cmpId;
 
 	/**
 	 * trade$goods的主键
 	 */
+	@Id
 	@Column(name = "go_id")
 	private Long goId;
 
@@ -106,6 +100,13 @@ public class ComponentGoods implements Serializable {
 	@Column(name = "cmp_brid")
 	private Long brandid;
 
+	/**
+	 * 器件描述
+	 */
+	@Column(name = "cmp_description", length = 4000)
+	private String description;
+
+
 	/**
 	 * 器件的品牌
 	 */
@@ -253,14 +254,6 @@ public class ComponentGoods implements Serializable {
 	@Column(name = "go_storename")
 	private String storeName;
 
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
 	public Long getCmpId() {
 		return cmpId;
 	}
@@ -503,6 +496,14 @@ public class ComponentGoods implements Serializable {
 		this.packaging = packaging;
 	}
 
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
 	public String getEncapsulation() {
 		return encapsulation;
 	}

+ 46 - 0
src/main/java/com/uas/platform/b2c/prod/product/component/modal/ComponentGoodsId.java

@@ -0,0 +1,46 @@
+package com.uas.platform.b2c.prod.product.component.modal;
+
+import java.io.Serializable;
+
+public class ComponentGoodsId implements Serializable{
+
+    private Long cmpId;
+    private Long goId;
+
+    public Long getCmpId() {
+        return cmpId;
+    }
+
+    public void setCmpId(Long cmpId) {
+        this.cmpId = cmpId;
+    }
+
+    public Long getGoId() {
+        return goId;
+    }
+
+    public void setGoId(Long goId) {
+        this.goId = goId;
+    }
+
+    public ComponentGoodsId() {
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ComponentGoodsId that = (ComponentGoodsId) o;
+
+        if (cmpId != null ? !cmpId.equals(that.cmpId) : that.cmpId != null) return false;
+        return goId != null ? goId.equals(that.goId) : that.goId == null;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = cmpId != null ? cmpId.hashCode() : 0;
+        result = 31 * result + (goId != null ? goId.hashCode() : 0);
+        return result;
+    }
+}

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

@@ -1,5 +1,7 @@
 package com.uas.platform.b2c.prod.product.component.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.uas.platform.b2c.common.search.rpc.service.SearchService;
 import com.uas.platform.b2c.prod.product.component.dao.ComponentGoodsDao;
 import com.uas.platform.b2c.prod.product.component.modal.ComponentGoods;
 import com.uas.platform.b2c.prod.product.component.service.ComponentGoodsService;
@@ -9,7 +11,6 @@ import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.search.model.PageParams;
 import com.uas.search.model.PageParams.FilterField;
-import com.uas.search.service.SearchService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
@@ -47,7 +48,7 @@ public class ComponentGoodsServiceImpl implements ComponentGoodsService {
 		}
 		//将有库存的先排序
 		String [] properties = {"cmpReserve", "cmpId", "reserve"};
-		info.sorting(Direction.ASC, properties);
+		info.sorting(Direction.DESC, properties);
 		if(filter != null) {
 			if(filter.get("properties") != null) {
 				String property = filter.get("properties").toString();
@@ -65,11 +66,15 @@ public class ComponentGoodsServiceImpl implements ComponentGoodsService {
 				}
 				searchResult = searchService.getComponentIds(code, pageParams);
 				@SuppressWarnings("unchecked")
-				List<Long> componentIds = (List<Long>) searchResult.get("componentIds");
+				List<Integer> componentIds = (List<Integer>) searchResult.get("componentIds");
+				List<Long> componentIdsLong = new ArrayList<>();
+				for (Integer cid:componentIds) {
+					componentIdsLong.add(cid.longValue());
+				}
 				List<ComponentGoods> componentGoods = new ArrayList<>();
 				if (componentIds.size() > 0) {
-					Long[] idArr = new Long[componentIds.size()];
-					componentGoods = componentGoodsDao.findByIdsInOrder(componentIds.toArray(idArr));
+					Long[] idArr = new Long[componentIdsLong.size()];
+					componentGoods = componentGoodsDao.findByIdsInOrder(componentIdsLong.toArray(idArr));
 				}
 				int length = (int)searchResult.get("total");
 				if(length < componentGoods.size()) {
@@ -101,6 +106,8 @@ public class ComponentGoodsServiceImpl implements ComponentGoodsService {
 		if(totalElements > new Long(maxExposeInfo).longValue()) {
 			totalElements = maxExposeInfo;
 		}
+		System.out.println(JSON.toJSON(info));
+		System.out.println(JSON.toJSON(page.getContent()));
 		page = new PageImpl<>(page.getContent(), info, totalElements);
 		return page;
 	}

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

@@ -1,6 +1,7 @@
 package com.uas.platform.b2c.prod.product.component.service.impl;
 
 import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.common.search.rpc.service.SearchService;
 import com.uas.platform.b2c.core.config.SysConf;
 import com.uas.platform.b2c.core.constant.SplitChar;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
@@ -31,7 +32,6 @@ import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.persistence.criteria.SimpleExpression;
 import com.uas.search.model.PageParams;
 import com.uas.search.model.PageParams.FilterField;
-import com.uas.search.service.SearchService;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;

+ 18 - 7
src/main/java/com/uas/platform/b2c/prod/store/controller/StoreInController.java

@@ -1,13 +1,14 @@
 package com.uas.platform.b2c.prod.store.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2c.core.config.SysConf;
 import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.core.utils.FastjsonUtils;
 import com.uas.platform.b2c.prod.store.facade.StoreInFacade;
 import com.uas.platform.b2c.prod.store.model.StoreIn;
 import com.uas.platform.b2c.prod.store.model.StoreStatus;
 import com.uas.platform.b2c.prod.store.model.StoreType;
 import com.uas.platform.b2c.prod.store.service.StoreInService;
-import com.uas.platform.b2c.trade.presale.model.ValidTime;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
@@ -18,12 +19,10 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.web.PageableDefault;
-import org.springframework.web.bind.annotation.PathVariable;
-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.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * 受限店铺操作接口类
@@ -171,4 +170,16 @@ public class StoreInController {
 		PageInfo pageInfo = new PageInfo(params);
 		return storeService.getStorePage(pageInfo, keyword, storeType);
 	}
+
+
+	/**
+	 * 获取店铺的联系信息(电话,邮箱,地址信息)
+	 * @param storeids 店铺的数组
+	 * @return
+	 */
+	@RequestMapping(value = "/storeids", method = RequestMethod.GET)
+	public Map<String, JSONObject> getEnterpriseInfo(String storeids) {
+		List<String> storeidArray = FastjsonUtils.fromJsonArray(storeids, String.class);
+		return storeService.getContactInfo(storeidArray);
+	}
 }

+ 8 - 0
src/main/java/com/uas/platform/b2c/prod/store/dao/StoreInDao.java

@@ -34,6 +34,14 @@ public interface StoreInDao extends JpaSpecificationExecutor<StoreIn>, JpaReposi
 	 */
 	StoreIn findByUuid(String uuid);
 
+	/**
+	 * 获取店铺的信息
+	 * @param storeids 店铺的uuids
+	 * @return 店铺的信息
+	 */
+	@Query(value = "select s from StoreIn s where s.uuid in (:storeids)")
+	List<StoreIn> findByUuids(@Param("storeids") List<String> storeids);
+
 	/**
 	 * 根据店铺名称获取店铺信息
 	 *

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

@@ -1,5 +1,6 @@
 package com.uas.platform.b2c.prod.store.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2c.advertise.ad.model.StoreAdsType;
 import com.uas.platform.b2c.prod.store.model.StoreApply;
 import com.uas.platform.b2c.prod.store.model.StoreIn;
@@ -11,6 +12,7 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
 import java.util.List;
+import java.util.Map;
 
 public interface StoreInService {
 
@@ -173,4 +175,12 @@ public interface StoreInService {
 
 	@Deprecated
     void syncStoreEnterpriseInfo();
+
+
+	/**
+	 * 获取店铺的联系信息
+	 * @param storeids 店铺信息
+	 * @return
+	 */
+	Map<String, JSONObject> getContactInfo(List<String> storeids);
 }

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

@@ -1,10 +1,12 @@
 package com.uas.platform.b2c.prod.store.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2c.advertise.ad.model.StoreAds;
 import com.uas.platform.b2c.advertise.ad.model.StoreAdsType;
 import com.uas.platform.b2c.advertise.ad.service.StoreAdsService;
 import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
 import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.account.service.EnterpriseService;
 import com.uas.platform.b2c.core.config.SysConf;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.JacksonUtils;
@@ -72,8 +74,10 @@ public class StoreInServiceImpl implements StoreInService {
 
 	private final SysConf sysConf;
 
+	private final EnterpriseService enterpriseService;
+
 	@Autowired
-	public StoreInServiceImpl(StoreInDao storeDao, QualificationDao qualificationDao, GoodsDao goodsDao, ComponentDao componentDao, PurchaseDao purchaseDao, StoreBrandInfoDao brandInfoDao, StoreAdsService adsService, SysConf sysConf) {
+	public StoreInServiceImpl(StoreInDao storeDao, QualificationDao qualificationDao, GoodsDao goodsDao, ComponentDao componentDao, PurchaseDao purchaseDao, StoreBrandInfoDao brandInfoDao, StoreAdsService adsService, SysConf sysConf, EnterpriseService enterpriseService) {
 		this.storeDao = storeDao;
 		this.qualificationDao = qualificationDao;
 		this.goodsDao = goodsDao;
@@ -82,6 +86,7 @@ public class StoreInServiceImpl implements StoreInService {
 		this.brandInfoDao = brandInfoDao;
 		this.adsService = adsService;
 		this.sysConf = sysConf;
+		this.enterpriseService = enterpriseService;
 	}
 
 	@Override
@@ -544,4 +549,36 @@ public class StoreInServiceImpl implements StoreInService {
 			}
 		}, pageInfo);
 	}
+
+	/**
+	 * 获取店铺的联系信息
+	 *
+	 * @param storeids 店铺信息
+	 * @return
+	 */
+	@Override
+	public Map<String, JSONObject> getContactInfo(List<String> storeids) {
+		Map<String ,JSONObject> map = new HashMap<>();
+		List<StoreIn> storeIns = storeDao.findByUuids(storeids);
+		List<Long> uus = new ArrayList<>();
+		for (StoreIn storeIn : storeIns) {
+			uus.add(storeIn.getEnUU());
+		}
+		List<Enterprise> enterpriseInfos = enterpriseService.getEnterpriseInfos(uus);
+		for (StoreIn storeIn : storeIns) {
+			for (Enterprise enterpriseInfo : enterpriseInfos) {
+				if(storeIn.getEnUU().longValue() == enterpriseInfo.getUu().longValue()) {
+					JSONObject object = new JSONObject();
+					object.put("sellername", enterpriseInfo.getEnName());
+					object.put("sellPhone", enterpriseInfo.getEnTel());
+					object.put("sellEmail", enterpriseInfo.getEnEmail());
+					object.put("sellCompanyAddress", enterpriseInfo.getEnAddress());
+					object.put("sellCompanyArea", enterpriseInfo.getEnArea());
+					map.put(storeIn.getStoreName(), object);
+				}
+			}
+
+		}
+		return map;
+	}
 }

+ 3 - 3
src/main/java/com/uas/platform/b2c/trade/order/controller/OrderController.java

@@ -1,6 +1,5 @@
 package com.uas.platform.b2c.trade.order.controller;
 
-import com.alibaba.dubbo.common.utils.StringUtils;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2c.common.account.model.Enterprise;
@@ -28,6 +27,7 @@ import com.uas.platform.core.model.Status;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.ui.ModelMap;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -460,14 +460,14 @@ public class OrderController {
 	 * @return model map
 	 */
 	@RequestMapping(value = "/individual", method = RequestMethod.GET)
-	public ModelMap findIndividualOrders(PageParams params, String keyword, String status, Integer available, Long startDate, Long endDate, String exType) {
+	public ModelMap findIndividualOrders(PageParams params, String keyword, String status,Boolean isRate, Integer available, Long startDate, Long endDate, String exType) {
 		PageInfo pageInfo = new PageInfo(params);
 		Date start = startDate != null ? new Date(startDate) : null;
 		Date end = endDate != null ? new Date(endDate) : null;
 
 		assert logger != null;
 		logger.log("买家订单管理", "买家获取买家订单信息");
-		return orderService.findOrdersByInternal(pageInfo, keyword, status, available, false, start, end, exType);
+		return orderService.findOrdersByInternal(pageInfo, keyword, status, available, false, start, end, exType,isRate);
 	}
 
 	/**

+ 31 - 0
src/main/java/com/uas/platform/b2c/trade/order/dao/OrderDao.java

@@ -68,6 +68,15 @@ public interface OrderDao extends JpaSpecificationExecutor<Order>, JpaRepository
 	@Query("select o from trade.Order o where o.orderid in (:orderids)")
 	List<Order> findByOrderIds(@Param("orderids") List<String> orderids);
 
+	/**
+	 * 根据某个状态之后的订单
+	 *
+	 * @param status the status
+	 * @return  orders
+	 */
+	@Query(nativeQuery = true, value="selcet * from trade$order a where a.or_status >=:status ")
+	List<Order> findByAfterStatus(@Param("status") Integer status);
+
 	/**
 	 * Gets count by buyeruu and status.
 	 *
@@ -79,6 +88,17 @@ public interface OrderDao extends JpaSpecificationExecutor<Order>, JpaRepository
 	@Query(value="select count(*) from trade.Order a where a.buyeruu=:buyeruu and a.buyerenuu = :buyerenuu and a.used = 1 and a.status=:status and a.proofingid is null and a.orderids is null")
 	int getCountByBuyeruuAndStatus(@Param("buyeruu") Long buyeruu, @Param("buyerenuu") Long buyerenuu, @Param("status") Integer status);
 
+	/**
+	 * Gets count by buyeruu and status.
+	 *
+	 * @param buyeruu   the buyeruu
+	 * @param buyerenuu the buyerenuu
+	 * @param status    the status
+	 * @return the count by buyeruu and status
+	 */
+	@Query(value="select count(*) from trade.Order a where a.buyeruu=:buyeruu and a.buyerenuu = :buyerenuu and a.used = 1 and a.status=:status and a.proofingid is null and a.orderids is null and a.rateStatus is null")
+	int getCountByBuyeruuAndStatusAndRate(@Param("buyeruu") Long buyeruu, @Param("buyerenuu") Long buyerenuu, @Param("status") Integer status);
+
 	/**
 	 * Gets count by buyeruu and status and dissociative.
 	 *
@@ -90,6 +110,17 @@ public interface OrderDao extends JpaSpecificationExecutor<Order>, JpaRepository
 	@Query(value="select count(1) from trade.Order a where a.buyeruu=:buyeruu and a.used = 1 and a.dissociative = :dissociative and a.status=:status and a.proofingid is null and a.orderids is null")
 	int getCountByBuyeruuAndStatusAndDissociative(@Param("buyeruu") Long buyeruu, @Param("dissociative") Integer dissociative, @Param("status") Integer status);
 
+	/**
+	 * Gets count by buyeruu and status and dissociative.
+	 *
+	 * @param buyeruu      the buyeruu
+	 * @param dissociative the dissociative
+	 * @param status       the status
+	 * @return the count by buyeruu and status and dissociative
+	 */
+	@Query(value="select count(1) from trade.Order a where a.buyeruu=:buyeruu and a.used = 1 and a.dissociative = :dissociative and a.status=:status and a.proofingid is null and a.orderids is null and a.rateStatus is null")
+	int getCountByBuyeruuAndStatusAndDissociativeAndRate(@Param("buyeruu") Long buyeruu, @Param("dissociative") Integer dissociative, @Param("status") Integer status);
+
 	/**
 	 * Gets count by buyeruu.
 	 *

+ 9 - 0
src/main/java/com/uas/platform/b2c/trade/order/dao/PurchaseDao.java

@@ -29,6 +29,15 @@ public interface PurchaseDao extends JpaSpecificationExecutor<Purchase>, JpaRepo
 	 */
 	List<Purchase> findByStatus(Integer status);
 
+	/**
+	 * 根据之后的状态查找采购单
+	 *
+	 * @param status the status
+	 * @return list
+	 */
+	@Query(nativeQuery = true, value = "select * from trade$purchase where pu_status >= :status")
+	List<Purchase> findByAfterStatus(@Param("status") Integer status);
+
 	/**
 	 * 根据状态和企业UU查询采购单
 	 *

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

@@ -278,6 +278,12 @@ public class Order extends Document implements Serializable {
 	@StatusColumn
 	private Integer status;
 
+	/**
+	 * 评论状态
+	 */
+	@Column(name = "or_ratestatus")
+	private Integer rateStatus;
+
 	/**
 	 * 付款时间
 	 */
@@ -1120,6 +1126,14 @@ public class Order extends Document implements Serializable {
 		this.status = status;
 	}
 
+	public Integer getRateStatus() {
+		return rateStatus;
+	}
+
+	public void setRateStatus(Integer rateStatus) {
+		this.rateStatus = rateStatus;
+	}
+
 	/**
 	 * Gets return status.
 	 *
@@ -1339,6 +1353,33 @@ public class Order extends Document implements Serializable {
 		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
 	}
 
+	/**
+	 * Sets status TO_BE_REVIEWED.
+	 * 被初评的记录
+	 *
+	 * @param uu the uu
+	 */
+	public void setStatusToBeReviewed(Long uu) {
+		this.rateStatus = Status.TO_BE_REVIEWED.value();
+	}
+	/**
+	 * Sets status TO_BE_AFTERREVIEWED.
+	 * 被追平的记录
+	 *
+	 * @param uu the uu
+	 */
+	public void setStatusToBeAfterReviewed(Long uu) {
+		this.rateStatus = Status.TO_BE_AFTERREVIEWED.value();
+	}
+	/**
+	 * Sets status REVIEWED.
+	 *
+	 * @param uu the uu
+	 */
+	public void setStatusReviewed(Long uu) {
+		this.rateStatus = Status.REVIEWED.value();
+	}
+
 	/**
 	 * Sets status un available.
 	 *

+ 10 - 1
src/main/java/com/uas/platform/b2c/trade/order/service/OrderService.java

@@ -287,6 +287,15 @@ public interface OrderService {
 	 */
 	List<Order> findByStatus(Integer status);
 
+	/**
+	 * 根据类别查找
+	 *
+	 * @param status the status
+	 * @return list list
+	 * @TODO 查找某个状态之后的订单
+	 */
+	List<Order> findByAfterStatus(Integer status);
+
 	/**
 	 * 通过批次号查询到对应商品
 	 *
@@ -359,7 +368,7 @@ public interface OrderService {
 	 * @param exType    异常类型
 	 * @return model map
 	 */
-	ModelMap findOrdersByInternal(PageInfo pageInfo, String keyword, String status, Integer available, boolean isProof, Date startDate, Date endDate, String exType);
+	ModelMap findOrdersByInternal(PageInfo pageInfo, String keyword, String status, Integer available, boolean isProof, Date startDate, Date endDate, String exType, Boolean isRate);
 
 	/**
 	 * 买家根据订单状态查看订单

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

@@ -131,6 +131,22 @@ public interface PurchaseService {
 	 */
 	Page<Purchase> findPageByStatus(PageInfo pageInfo, String keyword);
 
+	/**
+	 * 根据状态查找采购单
+	 *
+	 * @param status the status
+	 * @return list
+	 */
+	List<Purchase> findByStatus(Integer status);
+
+	/**
+	 * 根据之后的状态查找采购单
+	 *
+	 * @param status the status
+	 * @return list
+	 */
+	List<Purchase> findByAfterStatus(Integer status);
+
 	/**
 	 * 平台管理员获取采购单
 	 *

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

@@ -1,9 +1,9 @@
 package com.uas.platform.b2c.trade.order.service.impl;
 
-import com.alibaba.dubbo.common.json.JSON;
-import com.alibaba.dubbo.common.json.ParseException;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.sun.org.apache.xpath.internal.operations.Bool;
 import com.uas.api.b2c_erp.buyer.model.B2cOrder;
 import com.uas.api.exception.B2CException;
 import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
@@ -12,6 +12,7 @@ import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.platform.b2c.common.account.model.TradeLog;
 import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.base.service.SendMessageService;
+import com.uas.platform.b2c.common.search.rpc.service.OrderSearchService;
 import com.uas.platform.b2c.core.config.SysConf;
 import com.uas.platform.b2c.core.constant.SplitChar;
 import com.uas.platform.b2c.core.support.SystemSession;
@@ -84,7 +85,6 @@ import com.uas.platform.core.util.serializer.FlexJsonUtils;
 import com.uas.search.model.BaseOrder;
 import com.uas.search.model.PageParams;
 import com.uas.search.model.SPage;
-import com.uas.search.service.OrderSearchService;
 import org.apache.commons.collections.map.HashedMap;
 import org.apache.commons.lang.time.DateUtils;
 import org.springframework.beans.BeanUtils;
@@ -648,7 +648,6 @@ public class OrderServiceImpl implements OrderService {
         JSONObject orderInfo  = ordersInfos[0];
 
         JSONObject splitObject = orderInfo.getJSONObject("splitInfo");
-        System.out.println(splitObject);
 
         if(resultMap1.getCode() != ResultMapType.OK.getCode()) {
             return resultMap1;
@@ -960,18 +959,10 @@ public class OrderServiceImpl implements OrderService {
         String jsonAddress = null;
         if (Type.Delivery_ByUU_Code.value() == deliveryType) {
             Address address = addressDao.findOne(id);
-            try {
-                jsonAddress = JSON.json(address);
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
+            jsonAddress = FastjsonUtils.toJson(address);
         } else if (Type.Delivery_BySelf_Code.value() == deliveryType) { // 1302:上门自提
             PickUpAddress address = pickUpAddressDao.findOne(id);
-            try {
-                jsonAddress = JSON.json(address);
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
+            jsonAddress = FastjsonUtils.toJson(address);
         }
         return jsonAddress;
     }
@@ -1123,14 +1114,14 @@ public class OrderServiceImpl implements OrderService {
             throw new IllegalOperatorException("收货地址有误,请重新输入收货地址");
         }
         try {
-            Address address = JSON.parse(jsonAddress, Address.class);
+            Address address = FastjsonUtils.fromJson(jsonAddress, Address.class);
             if (address.getArea().startsWith("香港") && order.getCurrency().equalsIgnoreCase("RMB")) {// area包含:省市区
                 throw new IllegalOperatorException("币别与收货地址不一致,香港只能以美元购买商品,不能是人民币,请刷新页面重新确认订单");
             }
             if (!address.getArea().startsWith("香港") && order.getCurrency().equalsIgnoreCase("USD")) {
                 throw new IllegalOperatorException("币别与收货地址不一致,大陆只能以人民币购买商品,不能是美元,请刷新页面重新确认订单");
             }
-        } catch (ParseException e) {
+        } catch (Exception e) {
             throw new IllegalOperatorException("收货地址有误,请重新输入收货地址");
         }
     }
@@ -1541,6 +1532,11 @@ public class OrderServiceImpl implements OrderService {
         return orderDao.findByStatus(status);
     }
 
+    @Override
+    public List<Order> findByAfterStatus(Integer status) {
+        return orderDao.findByAfterStatus(status);
+    }
+
     @Override
     public List<Order> findOnes() {
         Long uu = SystemSession.getUser().getUserUU();
@@ -1861,7 +1857,7 @@ public class OrderServiceImpl implements OrderService {
     }
 
     @Override
-    public ModelMap findOrdersByInternal(final PageInfo pageInfo, String keyword, String status, Integer available, boolean isProof, Date startDate, Date endDate, String exType) {
+    public ModelMap findOrdersByInternal(final PageInfo pageInfo, String keyword, String status, Integer available, boolean isProof, Date startDate, Date endDate, String exType, Boolean isRate) {
         ModelMap modelMap = new ModelMap();
         final Long userUU = SystemSession.getUser().getUserUU();
         final Long enUU = SystemSession.getUser().getEnterprise() != null ? SystemSession.getUser().getEnterprise().getUu() : null;
@@ -1948,6 +1944,9 @@ public class OrderServiceImpl implements OrderService {
                 pageInfo.filter("status", Short.parseShort(status));
             }
         }
+        if (null != isRate && isRate == true) {
+            pageInfo.expression(PredicateUtils.isNull("rateStatus"));
+        }
         Page<Order> pageOrders = orderDao.findAll(new Specification<Order>() {
             @Override
             public Predicate toPredicate(Root<Order> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
@@ -2531,29 +2530,56 @@ public class OrderServiceImpl implements OrderService {
             totalCount = 0;
             // 各种异常类型的订单总数
             int normal = 0, notify = 0, apply = 0, returnCount = 0, exchange = 0, refund = 0;
-            for (String statusStr : statusArr) {
-                if (enUU != null) {
-                    int count = orderDao.getCountByBuyeruuAndStatus(userUU, enUU, Integer.parseInt(statusStr));
-                    totalCount += count;
-
-                    normal += orderDao.getNormalCountByBuyeruuAndStatus(userUU, enUU, Integer.parseInt(statusStr));
-                    notify += orderDao.getNotifyCountByBuyeruuAndStatus(userUU, enUU, Integer.parseInt(statusStr));
-                    apply += orderDao.getApplyCountByBuyeruuAndStatus(userUU, enUU, Integer.parseInt(statusStr));
-                    returnCount += orderDao.getReturnCountByBuyeruuAndStatus(userUU, enUU, Integer.parseInt(statusStr));
-                    exchange += orderDao.getExchangeCountByBuyeruuAndStatus(userUU, enUU, Integer.parseInt(statusStr));
-                    refund += orderDao.getRefundCountByBuyeruuAndStatus(userUU, enUU, Integer.parseInt(statusStr));
-                } else {
-                    int count = orderDao.getCountByBuyeruuAndStatusAndDissociative(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
-                    totalCount += count;
-
-                    normal += orderDao.getNormalCountByBuyeruuAndStatusAndDissociative(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
-                    notify += orderDao.getNotifyCountByBuyeruuAndStatusAndDissociative(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
-                    apply += orderDao.getApplyCountByBuyeruuAndStatusAndDissociative(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
-                    returnCount += orderDao.getReturnCountByBuyeruuAndStatusAndDissociative(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
-                    exchange += orderDao.getExchangeCountByBuyeruuAndStatusAndDissociative(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
-                    refund += orderDao.getRefundCountByBuyeruuAndStatusAndDissociative(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
+            if (orderStatus.equals(OrderStatus.TOBECOMMENT)){     //如果是评论的话,特殊处理
+                for (String statusStr : statusArr) {
+                    if (enUU != null) {
+                        int count = orderDao.getCountByBuyeruuAndStatusAndRate(userUU, enUU, Integer.parseInt(statusStr));
+                        totalCount += count;
+
+                        normal += orderDao.getNormalCountByBuyeruuAndStatus(userUU, enUU, Integer.parseInt(statusStr));
+                        notify += orderDao.getNotifyCountByBuyeruuAndStatus(userUU, enUU, Integer.parseInt(statusStr));
+                        apply += orderDao.getApplyCountByBuyeruuAndStatus(userUU, enUU, Integer.parseInt(statusStr));
+                        returnCount += orderDao.getReturnCountByBuyeruuAndStatus(userUU, enUU, Integer.parseInt(statusStr));
+                        exchange += orderDao.getExchangeCountByBuyeruuAndStatus(userUU, enUU, Integer.parseInt(statusStr));
+                        refund += orderDao.getRefundCountByBuyeruuAndStatus(userUU, enUU, Integer.parseInt(statusStr));
+                    } else {
+                        int count = orderDao.getCountByBuyeruuAndStatusAndDissociativeAndRate(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
+                        totalCount += count;
+
+                        normal += orderDao.getNormalCountByBuyeruuAndStatusAndDissociative(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
+                        notify += orderDao.getNotifyCountByBuyeruuAndStatusAndDissociative(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
+                        apply += orderDao.getApplyCountByBuyeruuAndStatusAndDissociative(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
+                        returnCount += orderDao.getReturnCountByBuyeruuAndStatusAndDissociative(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
+                        exchange += orderDao.getExchangeCountByBuyeruuAndStatusAndDissociative(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
+                        refund += orderDao.getRefundCountByBuyeruuAndStatusAndDissociative(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
+                    }
+                }
+            }else{
+                for (String statusStr : statusArr) {
+                    if (enUU != null) {
+                        int count = orderDao.getCountByBuyeruuAndStatus(userUU, enUU, Integer.parseInt(statusStr));
+                        totalCount += count;
+
+                        normal += orderDao.getNormalCountByBuyeruuAndStatus(userUU, enUU, Integer.parseInt(statusStr));
+                        notify += orderDao.getNotifyCountByBuyeruuAndStatus(userUU, enUU, Integer.parseInt(statusStr));
+                        apply += orderDao.getApplyCountByBuyeruuAndStatus(userUU, enUU, Integer.parseInt(statusStr));
+                        returnCount += orderDao.getReturnCountByBuyeruuAndStatus(userUU, enUU, Integer.parseInt(statusStr));
+                        exchange += orderDao.getExchangeCountByBuyeruuAndStatus(userUU, enUU, Integer.parseInt(statusStr));
+                        refund += orderDao.getRefundCountByBuyeruuAndStatus(userUU, enUU, Integer.parseInt(statusStr));
+                    } else {
+                        int count = orderDao.getCountByBuyeruuAndStatusAndDissociative(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
+                        totalCount += count;
+
+                        normal += orderDao.getNormalCountByBuyeruuAndStatusAndDissociative(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
+                        notify += orderDao.getNotifyCountByBuyeruuAndStatusAndDissociative(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
+                        apply += orderDao.getApplyCountByBuyeruuAndStatusAndDissociative(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
+                        returnCount += orderDao.getReturnCountByBuyeruuAndStatusAndDissociative(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
+                        exchange += orderDao.getExchangeCountByBuyeruuAndStatusAndDissociative(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
+                        refund += orderDao.getRefundCountByBuyeruuAndStatusAndDissociative(userUU, Type.PERSONAL.value(), Integer.parseInt(statusStr));
+                    }
                 }
             }
+
             map.put(orderStatus.status(), totalCount);
 
             if (!"unavailable".equals(orderStatus.status()) && !"success".equals(orderStatus.status())) {

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

@@ -658,6 +658,16 @@ public class PurchaseServiceImpl implements PurchaseService {
 		}, pageInfo);
 	}
 
+	@Override
+	public List<Purchase> findByStatus(Integer status) {
+		return purchaseDao.findByStatus(status);
+	}
+
+	@Override
+	public List<Purchase> findByAfterStatus(Integer status) {
+		return purchaseDao.findByAfterStatus(status);
+	}
+
 	@Override
 	public Purchase findByPurchaseid(String purchaseid) {
 		Purchase purchase = purchaseDao.findByPurchaseid(purchaseid);

+ 6 - 2
src/main/java/com/uas/platform/b2c/trade/order/status/OrderStatus.java

@@ -10,7 +10,7 @@ public enum OrderStatus {
 	/**
 	 * {@code all 所有状态}
 	 */
-	ALL("all", "503-504-505-406-407-403-408-404-405-520-602-603-315-604-605-606"),
+	ALL("all", "503-504-505-406-407-403-408-404-405-520-523-522-602-603-315-604-605-606"),
 	/**
 	 * {@code tobepaid 待付款}
 	 */
@@ -35,7 +35,11 @@ public enum OrderStatus {
 	/**
 	 * {@code unavailable 已失效}
 	 */
-	UNAVAILABLE("unavailable", "602-603-315-604-605-606");
+	UNAVAILABLE("unavailable", "602-603-315-604-605-606"),
+	/**
+	 * {@code unavailable 待评价}
+	 */
+	TOBECOMMENT("tobecomment", "520-405");
 
 	/**
 	 * 状态名称

+ 6 - 1
src/main/java/com/uas/platform/b2c/trade/order/status/PurchaseStatus.java

@@ -34,7 +34,12 @@ public enum PurchaseStatus {
 	/**
 	 * {@code unavailable 售后中}
 	 */
-	TOBEREVIEWED("toBeReviewed","404-503");
+	TOBEREVIEWED("toBeReviewed","404-503"),
+
+	/**
+	 * {@code unavailable 待评价}
+	 */
+	TOBERATE("toBeRate","520");
 
 	/**
 	 * 状态名称

+ 1 - 1
src/main/java/com/uas/platform/b2c/trade/presale/service/impl/CartServiceImpl.java

@@ -1,6 +1,5 @@
 package com.uas.platform.b2c.trade.presale.service.impl;
 
-import com.alibaba.dubbo.common.utils.StringUtils;
 import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
 import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.platform.b2c.common.account.model.User;
@@ -35,6 +34,7 @@ import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;

+ 298 - 0
src/main/java/com/uas/platform/b2c/trade/rate/controller/RateController.java

@@ -0,0 +1,298 @@
+package com.uas.platform.b2c.trade.rate.controller;
+
+
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.platform.b2c.fa.payment.utils.StringUtils;
+import com.uas.platform.b2c.trade.order.dao.OrderDao;
+import com.uas.platform.b2c.trade.order.dao.PurchaseDao;
+import com.uas.platform.b2c.trade.order.model.Order;
+import com.uas.platform.b2c.trade.order.model.OrderDetail;
+import com.uas.platform.b2c.trade.order.model.Purchase;
+import com.uas.platform.b2c.trade.rate.model.RateBuyer;
+import com.uas.platform.b2c.trade.rate.model.RateGoods;
+import com.uas.platform.b2c.trade.rate.model.RateTemplate;
+import com.uas.platform.b2c.trade.rate.model.RateVendor;
+import com.uas.platform.b2c.trade.rate.service.RateService;
+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.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import com.uas.platform.core.model.Status;
+import com.uas.platform.core.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 评价接口类
+ * Created by wangdy on 2017-08-30.
+ */
+@RestController
+@RequestMapping("/rate")
+public class RateController {
+
+    @Autowired
+    private RateService rateService;
+
+    @Autowired
+    private OrderDao   orderDao;
+
+    @Autowired
+    private PurchaseDao purchaseDao;
+
+    /**
+     * 买家评价卖家店铺
+     *
+     * @param json storeid,enuu,3个星级
+     * @return the result map
+     */
+    @RequestMapping(value = "/rateVendor/{orderId}", method = RequestMethod.POST)
+    public ResultMap saveRateVendor(@PathVariable("orderId") String orderId, @RequestBody String json) {
+        RateVendor rateVendor = FastjsonUtils.fromJson(json, RateVendor.class);
+        if(null == rateVendor.getStoreId() || null == rateVendor.getEnuu() || null== rateVendor.getVendorLevel()){
+            return new ResultMap(CodeType.ERROR_STATE.code(),"参数有误");
+        }
+        RateVendor result = rateService.saveRateVendor(orderId,rateVendor);
+        return new ResultMap(CodeType.OK.code(), "评价成功", result);
+
+    }
+
+
+    /**
+     * 买家评价商品
+     *
+     * @param json 匿名,
+     * @return the result map
+     */
+    @RequestMapping(value = "/rateGoods/{orderId}", method = RequestMethod.POST)
+    public ResultMap saveRateGoods(@PathVariable("orderId") String orderId, @RequestBody String json) {
+        List<RateGoods> rateGoodsList = FastjsonUtils.fromJsonArray(json, RateGoods.class);
+        rateService.saveRateGoods(orderId,rateGoodsList);
+        return new ResultMap(CodeType.OK.code(), "评价成功");
+
+    }
+    /**
+     * 买家初评
+     *
+     * @param json 匿名,
+     * @return the result map
+     */
+    @RequestMapping(value = "/buyerRate/{orderId}", method = RequestMethod.POST)
+    public ResultMap savebuyerRate(@PathVariable("orderId") String orderId, @RequestBody String json) {
+        List<RateGoods> rateGoodsList = FastjsonUtils.fromJsonArray(FastjsonUtils.parseObject(json).get("goodsRate").toString(),RateGoods.class);
+        RateVendor rateVendor = FastjsonUtils.fromJson(FastjsonUtils.parseObject(json).get("vendorRate").toString(),RateVendor.class);
+        if(null == rateVendor.getStoreId() || null == rateVendor.getEnuu() || null == rateVendor.getVendorLevel()){
+            return new ResultMap(CodeType.ERROR_STATE.code(),"参数有误");
+        }
+        rateService.savebuyerRate(orderId,rateVendor,rateGoodsList);
+        return new ResultMap(CodeType.OK.code(), "评价成功");
+    }
+    /**
+     * 买家追评评价商品
+     *
+     * @param json 匿名,
+     * @return the result map
+     */
+    @RequestMapping(value = "/afterRateGoods/{orderId}", method = RequestMethod.POST)
+    public ResultMap saveAfterRateGoods(@PathVariable("orderId") String orderId, @RequestBody String json) {
+        List<RateGoods> rateGoodsList = FastjsonUtils.fromJsonArray(json, RateGoods.class);
+        for (RateGoods rateGoods : rateGoodsList){
+            //默认匿名评价
+            rateGoods.setIsAnony(rateGoods.getIsAnony() == null ? 1 : rateGoods.getIsAnony());
+            rateGoods.setUserUU(SystemSession.getUser().getUserUU());
+            rateGoods.setUserEnuu(SystemSession.getUser().getEnterprise().getUu());
+            rateGoods.setOrderId(orderId);
+            rateGoods.setBuyerAfterRateTime(new Date(System.currentTimeMillis()));
+
+        }
+        //订单状态变更
+        Order order = orderDao.findByOrderid(orderId);
+        if (order.getRateStatus().intValue() != Status.TO_BE_AFTERREVIEWED.value()) {
+            throw new IllegalOperatorException("当前订单未完成初评,不能追评!");
+        }
+        rateService.saveAfterRateGoods(rateGoodsList);
+        order.setStatusReviewed(SystemSession.getUser().getUserUU());
+        orderDao.save(order);
+        return new ResultMap(CodeType.OK.code(), "追评成功");
+
+    }
+
+    /**
+     * 卖家评价买家
+     *
+     * @param json 匿名,
+     * @return the result map
+     */
+    @RequestMapping(value = "/rateBuyer/{purchaseId}", method = RequestMethod.POST)
+    public ResultMap saveRateBuyer(@PathVariable("purchaseId") String purchaseId, @RequestBody String json) {
+        Purchase purchase = purchaseDao.findByPurchaseid(purchaseId);
+        Order order = orderDao.findByOrderid(purchase.getOrderid());
+        if (order.getStatus() < Status.RECEIVED.value()){
+            throw new IllegalOperatorException("当前订单未完成,不能评价");
+        }
+        RateBuyer rateBuyer = FastjsonUtils.fromJson(json, RateBuyer.class);
+        rateBuyer.setVendorUseruu(SystemSession.getUser().getUserUU());
+        rateBuyer.setEnuu(SystemSession.getUser().getEnterprise().getUu());
+        rateBuyer.setPurchaseId(purchaseId);
+        rateBuyer.setVendorRateTime(new Date(System.currentTimeMillis()));
+        RateBuyer result = rateService.saveRateBuyer(rateBuyer);
+        //TODO 改变采购单状态 //不用改变
+        /*Purchase purchase = purchaseDao.findByPurchaseid(purchaseId);
+        if (purchase.getStatus().intValue() != Status.COMPLETED.value()) {
+            throw new IllegalOperatorException("当前订单未完成,不能评价");
+        }
+        purchase.setTobeRate(SystemSession.getUser().getUserUU());
+        purchaseDao.save(purchase);*/
+        return new ResultMap(CodeType.OK.code(), "评价成功",result);
+
+    }
+
+    /**
+     * 卖家追评价买家
+     *
+     * @param json 匿名,
+     * @return the result map
+     */
+    @RequestMapping(value = "/afterRateBuyer/{purchaseId}", method = RequestMethod.POST)
+    public ResultMap saveAfterRateBuyer(@PathVariable("purchaseId") String purchaseId, @RequestBody String json) {
+        Purchase purchase = purchaseDao.findByPurchaseid(purchaseId);
+        Order order = orderDao.findByOrderid(purchase.getOrderid());
+        RateBuyer rateBuyer0 = rateService.getRateBuyerByOrderId(order.getOrderid());
+        if (null == rateBuyer0) {
+            throw new IllegalOperatorException("当前订单未初评,不能追评");
+        }
+        RateBuyer rateBuyerlater = rateService.getRateBuyerByOrderId(purchase.getOrderid());
+        RateBuyer rateBuyer = FastjsonUtils.fromJson(json, RateBuyer.class);
+        rateBuyerlater.setVendorAfterRate(rateBuyer.getVendorAfterRate());
+        rateBuyerlater.setVendorAfterRateTime(new Date(System.currentTimeMillis()));
+        RateBuyer result = rateService.saveRateBuyer(rateBuyerlater);
+
+        return new ResultMap(CodeType.OK.code(), "追评成功",result);
+
+    }
+
+    /**
+     * 保存或修改评价模版
+     *
+     * @param json 匿名,
+     * @return the result map
+     */
+    @RequestMapping(value = "/rateTemplate/{storeuuid}", method = RequestMethod.POST)
+    public ResultMap saveRateTemplate(@PathVariable("storeuuid") String storeuuid, @RequestBody String json) {
+        RateTemplate rateTemplate = FastjsonUtils.fromJson(json, RateTemplate.class);
+        rateTemplate.setUserUU(SystemSession.getUser().getUserUU());
+        rateTemplate.setStoreId(storeuuid);
+
+        rateTemplate.setCreateTime(new Date(System.currentTimeMillis()));
+        RateTemplate result = rateService.saveRateTemplate(rateTemplate);
+
+        return new ResultMap(CodeType.OK.code(), "创建成功",result);
+    }
+
+    /**
+     * 卖家为商品评价添加回复(初评)
+     *
+     * @param  returnMeg
+     * @return the result map
+     */
+    @RequestMapping(value = "/rateReply/{orderId}", method = RequestMethod.POST)
+    public ResultMap saveReply(@PathVariable("orderId") String orderId, @RequestParam Long goodsId, @RequestParam String returnMeg) {
+        RateGoods result = rateService.saveReply(orderId,goodsId,returnMeg);
+        return new ResultMap(CodeType.OK.code(), "回复成功",result);
+    }
+
+    /**
+     * 卖家为商品评价添加回复(追评)
+     *
+     * @param  returnMeg
+     * @return the result map
+     */
+    @RequestMapping(value = "/afterRateReply/{orderId}", method = RequestMethod.POST)
+    public ResultMap saveAfterReply(@PathVariable("orderId") String orderId, @RequestParam Long goodsId, @RequestParam String returnMeg) {
+        RateGoods result = rateService.saveAfterReply(orderId,goodsId,returnMeg);
+        return new ResultMap(CodeType.OK.code(), "回复成功",result);
+    }
+    /**
+     * 卖家为商品评价添加回复(批量回复)
+     *
+     * @param  orderId
+     * @return the result map
+     */
+    @RequestMapping(value = "/allRateReply/{orderId}", method = RequestMethod.POST)
+    public ResultMap saveAllReply(@PathVariable("orderId") String orderId, @RequestBody String json) {
+        List<RateGoods> rateGoodsList = FastjsonUtils.fromJsonArray(json, RateGoods.class);
+        for (RateGoods rateGoods : rateGoodsList){
+            if (!StringUtils.isEmpty(rateGoods.getAfterReturnMeg())){
+                rateGoods.setAfterReturnMegTime(new Date(System.currentTimeMillis()));
+            }
+            if (!StringUtils.isEmpty(rateGoods.getReturnMeg())){
+                rateGoods.setReturnMegTime(new Date(System.currentTimeMillis()));
+            }
+        }
+        rateService.saveAfterRateGoods(rateGoodsList);
+        return new ResultMap(CodeType.OK.code(), "批量回复成功");
+    }
+
+    /***************************查询操作******************************************/
+
+    /**
+     * 查询该企业下的所有模版信息
+     * @param storeuuid
+     * @return
+     */
+    @RequestMapping(value = "/rateTemplate/{storeuuid}", method = RequestMethod.GET)
+    public ResultMap getRateTemplate(@PathVariable("storeuuid") String storeuuid){
+        List<RateTemplate> result = rateService.getRateTempalteByStoreId(storeuuid);
+        return new ResultMap(CodeType.OK.code(), "查询成功",result);
+    }
+
+    /**
+     * 查询该订单的买家评价卖家
+     * @param orderId
+     * @return
+     */
+    @RequestMapping(value = "/rateVendor/{orderId}", method = RequestMethod.GET)
+    public ResultMap getRateVendor(@PathVariable("orderId")String orderId){
+        RateVendor result = rateService.getRateVendorByOrderId(orderId);
+        return new ResultMap(CodeType.OK.code(), "查询成功",result);
+    }
+
+    /**
+     * 查询该订单的买家评价商品(根据订单id)
+     * @param orderId
+     * @return
+     */
+    @RequestMapping(value = "/rateGoodsByOrderId/{orderId}", method = RequestMethod.GET)
+    public ResultMap getRateGoodsByOrderId(@PathVariable("orderId")String orderId,PageParams params){
+        PageInfo pageInfo = new PageInfo(params);
+        Page<RateGoods> result = rateService.getRateGoodsByOrderId(orderId,pageInfo);
+        return new ResultMap(CodeType.OK.code(), "查询成功",result);
+    }
+    /**
+     * 查询该订单的买家评价商品(根据goodsId)
+     * @param goodsId
+     * @return
+     */
+    @RequestMapping(value = "/rateGoodsByGoodsId/{goodsId}", method = RequestMethod.GET)
+    public ResultMap getRateGoodsByGoodsId(@PathVariable("goodsId")Long goodsId){
+        RateGoods result = rateService.getRateGoodsByGoodsId(goodsId);
+        return new ResultMap(CodeType.OK.code(), "查询成功",result);
+    }
+
+    /**
+     * 查询该订单的卖家评价买家
+     * @param orderId
+     * @return
+     */
+    @RequestMapping(value = "/rateBuyer/{orderId}", method = RequestMethod.GET)
+    public ResultMap getRateBuyer(@PathVariable("orderId")String orderId){
+        RateBuyer result = rateService.getRateBuyerByOrderId(orderId);
+        return new ResultMap(CodeType.OK.code(), "查询成功",result);
+    }
+
+}

+ 24 - 0
src/main/java/com/uas/platform/b2c/trade/rate/dao/RateBuyerDao.java

@@ -0,0 +1,24 @@
+package com.uas.platform.b2c.trade.rate.dao;
+
+import com.uas.platform.b2c.trade.rate.model.RateBuyer;
+import com.uas.platform.b2c.trade.rate.model.RateVendor;
+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 wangdy on 2017-08-30.
+ */
+
+@Repository
+public interface RateBuyerDao extends JpaSpecificationExecutor<RateBuyer>, JpaRepository<RateBuyer, Long> {
+
+    /**
+     * 根据订单id获取
+     * @param orderId
+     * @return
+     */
+    List<RateBuyer> findByOrderId(String orderId);
+}

+ 39 - 0
src/main/java/com/uas/platform/b2c/trade/rate/dao/RateGoodsDao.java

@@ -0,0 +1,39 @@
+package com.uas.platform.b2c.trade.rate.dao;
+
+import com.uas.platform.b2c.trade.rate.model.RateGoods;
+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 wangdy on 2017-08-30.
+ */
+
+@Repository
+public interface RateGoodsDao extends JpaSpecificationExecutor<RateGoods>, JpaRepository<RateGoods, Long> {
+
+    /**
+     * 根据商品id获取
+     * @param goodsId
+     * @return
+     */
+    List<RateGoods> findByGoodsId(Long goodsId);
+
+    /**
+     * 根据订单id获取
+     * @param orderId
+     * @return
+     */
+    List<RateGoods> findByOrderId(String orderId);
+
+
+    /**
+     * 根据订单和商品id定位唯一的一条商品评价
+     * @param orderId
+     * @param goodsId
+     * @return
+     */
+    List<RateGoods> findByOrderIdAndGoodsId(String orderId,Long goodsId);
+}

+ 33 - 0
src/main/java/com/uas/platform/b2c/trade/rate/dao/RateTemplateDao.java

@@ -0,0 +1,33 @@
+package com.uas.platform.b2c.trade.rate.dao;
+
+import com.uas.platform.b2c.trade.rate.model.RateTemplate;
+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;
+
+import java.util.List;
+
+/**
+ * Created by wangdy on 2017-08-30.
+ */
+
+@Repository
+public interface RateTemplateDao extends JpaSpecificationExecutor<RateTemplate>, JpaRepository<RateTemplate, Long> {
+
+    /**
+     * 根据创建者uu获取
+     * @param userUU
+     * @return
+     */
+    List<RateTemplate> findByUserUU(Long userUU);
+
+    /**
+     * 根据店铺id获取
+     * @param storeId
+     * @return
+     */
+    @Query("select r from RateTemplate r where r.storeId = :storeId order by r.createTime desc")
+    List<RateTemplate> findByStoreId(@Param("storeId") String storeId);
+}

+ 23 - 0
src/main/java/com/uas/platform/b2c/trade/rate/dao/RateVendorDao.java

@@ -0,0 +1,23 @@
+package com.uas.platform.b2c.trade.rate.dao;
+
+import com.uas.platform.b2c.trade.rate.model.RateVendor;
+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 wangdy on 2017-08-30.
+ */
+
+@Repository
+public interface RateVendorDao extends JpaSpecificationExecutor<RateVendor>, JpaRepository<RateVendor, Long> {
+
+    /**
+     * 根据订单id获取
+     * @param orderId
+     * @return
+     */
+    List<RateVendor> findByOrderId(String orderId);
+}

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

@@ -0,0 +1,194 @@
+package com.uas.platform.b2c.trade.rate.model;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Created by wangdy on 2017-08-29.
+ * 卖家对买家的评价
+ */
+@Entity
+@Table(name = "b2c$rate$buyer")
+public class RateBuyer implements Serializable{
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @Id
+    @GeneratedValue
+    @Column(name = "id")
+    private Long id;
+
+    /**
+     * 买家uu
+     */
+    @Column(name = "user_uu")
+    private Long userUU;
+
+    /**
+     * 买家企业uu
+     */
+    @Column(name = "user_enuu")
+    private Long userEnuu;
+
+    /**
+     * 订单id
+     */
+    @Column(name = "order_id")
+    private String orderId;
+
+    /**
+     * 采购单id
+     */
+    @Column(name = "purchase_id")
+    private String purchaseId;
+
+    /**
+     * 卖家企业uu
+     */
+    @Column(name = "enuu")
+    private Long enuu;
+
+    /**
+     * 评价人uu
+     */
+    @Column(name = "vendor_useruu")
+    private Long vendorUseruu;
+    /**
+     * 卖家店铺id
+     */
+    @Column(name = "store_id")
+    private String storeId;
+
+    /**
+     * 评价等级
+     */
+    @Column(name = "ratelevel")
+    private Short level;
+
+    /**
+     * 卖家初评
+     */
+    @Column(name = "vendor_rate", length = 400)
+    private String vendorRate;
+
+    /**
+     * 卖家追评
+     */
+    @Column(name = "Vendor_afterrate", length = 400)
+    private String vendorAfterRate;
+
+
+    @Column(name = "vendor_ratetime")
+    private Date vendorRateTime;
+
+    @Column(name = "Vendor_afterrateTime")
+    private Date vendorAfterRateTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getUserUU() {
+        return userUU;
+    }
+
+    public void setUserUU(Long userUU) {
+        this.userUU = userUU;
+    }
+
+    public Long getUserEnuu() {
+        return userEnuu;
+    }
+
+    public void setUserEnuu(Long userEnuu) {
+        this.userEnuu = userEnuu;
+    }
+
+    public String getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(String orderId) {
+        this.orderId = orderId;
+    }
+
+    public Long getEnuu() {
+        return enuu;
+    }
+
+    public void setEnuu(Long enuu) {
+        this.enuu = enuu;
+    }
+
+    public String getStoreId() {
+        return storeId;
+    }
+
+    public void setStoreId(String storeId) {
+        this.storeId = storeId;
+    }
+
+    public Short getLevel() {
+        return level;
+    }
+
+    public void setLevel(Short level) {
+        this.level = level;
+    }
+
+    public String getVendorRate() {
+        return vendorRate;
+    }
+
+    public void setVendorRate(String vendorRate) {
+        this.vendorRate = vendorRate;
+    }
+
+    public String getVendorAfterRate() {
+        return vendorAfterRate;
+    }
+
+    public void setVendorAfterRate(String vendorAfterRate) {
+        this.vendorAfterRate = vendorAfterRate;
+    }
+
+    public Date getVendorRateTime() {
+        return vendorRateTime;
+    }
+
+    public void setVendorRateTime(Date vendorRateTime) {
+        this.vendorRateTime = vendorRateTime;
+    }
+
+    public Date getVendorAfterRateTime() {
+        return vendorAfterRateTime;
+    }
+
+    public void setVendorAfterRateTime(Date vendorAfterRateTime) {
+        this.vendorAfterRateTime = vendorAfterRateTime;
+    }
+
+    public String getPurchaseId() {
+        return purchaseId;
+    }
+
+    public void setPurchaseId(String purchaseId) {
+        this.purchaseId = purchaseId;
+    }
+
+    public Long getVendorUseruu() {
+        return vendorUseruu;
+    }
+
+    public void setVendorUseruu(Long vendorUseruu) {
+        this.vendorUseruu = vendorUseruu;
+    }
+}

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

@@ -0,0 +1,260 @@
+package com.uas.platform.b2c.trade.rate.model;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 商品评价
+ *
+ * Created by wangdy on 2017-08-29.
+ * 买家对商品的评价
+ */
+@Entity
+@Table(name = "b2c$rate$goods")
+public class RateGoods implements Serializable{
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @Id
+    @GeneratedValue
+    @Column(name = "id")
+    private Long id;
+
+    /**
+     * 买家uu
+     */
+    @Column(name = "user_uu")
+    private Long userUU;
+
+    /**
+     * 买家企业uu
+     */
+    @Column(name = "user_enuu")
+    private Long userEnuu;
+
+    /**
+     * 商品id
+     */
+    @Column(name = "goods_id")
+    private Long goodsId;
+
+    /**
+     * 订单id
+     */
+    @Column(name = "order_id")
+    private String orderId;
+
+    /**
+     * 卖家企业uu
+     */
+    @Column(name = "enuu")
+    private Long enuu;
+
+    /**
+     * 卖家店铺id
+     */
+    @Column(name = "store_id")
+    private String storeId;
+
+    /**
+     * 评价等级
+     */
+    @Column(name = "ratelevel")
+    private Short level;
+
+    /**
+     * 买家是否匿名评价
+     */
+    @Column(name = "is_anony")
+    private Short isAnony;
+
+    /**
+     * 买家初评
+     */
+    @Column(name = "buyer_rate", length = 400)
+    private String buyerRate;
+
+
+
+    /**
+     * 买家追评
+     */
+    @Column(name = "buyer_afterrate", length = 400)
+    private String buyerAfterRate;
+
+    /**
+     * 初评卖家回复
+     */
+    @Column(name = "return_meg", length = 400)
+    private String returnMeg;
+
+    /**
+     * 追评卖家回复
+     */
+    @Column(name = "afterreturn_meg", length = 400)
+    private String afterReturnMeg;
+
+
+
+    /**********买家初评追评时间*************/
+
+    @Column(name = "buyer_ratetime")
+    private Date buyerRateTime;
+
+
+    @Column(name = "buyer_afterratetime")
+    private Date buyerAfterRateTime;
+
+    @Column(name = "return_megtime")
+    private Date returnMegTime;
+
+
+    @Column(name = "afterreturn_megtime")
+    private Date afterReturnMegTime;
+
+
+    /****************************************/
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getUserUU() {
+        return userUU;
+    }
+
+    public void setUserUU(Long userUU) {
+        this.userUU = userUU;
+    }
+
+    public Long getUserEnuu() {
+        return userEnuu;
+    }
+
+    public void setUserEnuu(Long userEnuu) {
+        this.userEnuu = userEnuu;
+    }
+
+    public Long getGoodsId() {
+        return goodsId;
+    }
+
+    public void setGoodsId(Long goodsId) {
+        this.goodsId = goodsId;
+    }
+
+    public String getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(String orderId) {
+        this.orderId = orderId;
+    }
+
+    public Long getEnuu() {
+        return enuu;
+    }
+
+    public void setEnuu(Long enuu) {
+        this.enuu = enuu;
+    }
+
+    public String getStoreId() {
+        return storeId;
+    }
+
+    public void setStoreId(String storeId) {
+        this.storeId = storeId;
+    }
+
+    public Short getLevel() {
+        return level;
+    }
+
+    public void setLevel(Short level) {
+        this.level = level;
+    }
+
+    public Short getIsAnony() {
+        return isAnony;
+    }
+
+    public void setIsAnony(Short isAnony) {
+        this.isAnony = isAnony;
+    }
+
+    public String getBuyerRate() {
+        return buyerRate;
+    }
+
+    public void setBuyerRate(String buyerRate) {
+        this.buyerRate = buyerRate;
+    }
+
+
+    public String getBuyerAfterRate() {
+        return buyerAfterRate;
+    }
+
+    public void setBuyerAfterRate(String buyerAfterRate) {
+        this.buyerAfterRate = buyerAfterRate;
+    }
+
+
+    public Date getBuyerRateTime() {
+        return buyerRateTime;
+    }
+
+    public void setBuyerRateTime(Date buyerRateTime) {
+        this.buyerRateTime = buyerRateTime;
+    }
+
+
+    public Date getBuyerAfterRateTime() {
+        return buyerAfterRateTime;
+    }
+
+    public void setBuyerAfterRateTime(Date buyerAfterRateTime) {
+        this.buyerAfterRateTime = buyerAfterRateTime;
+    }
+
+    public String getReturnMeg() {
+        return returnMeg;
+    }
+
+    public void setReturnMeg(String returnMeg) {
+        this.returnMeg = returnMeg;
+    }
+
+    public String getAfterReturnMeg() {
+        return afterReturnMeg;
+    }
+
+    public void setAfterReturnMeg(String afterReturnMeg) {
+        this.afterReturnMeg = afterReturnMeg;
+    }
+
+    public Date getReturnMegTime() {
+        return returnMegTime;
+    }
+
+    public void setReturnMegTime(Date returnMegTime) {
+        this.returnMegTime = returnMegTime;
+    }
+
+    public Date getAfterReturnMegTime() {
+        return afterReturnMegTime;
+    }
+
+    public void setAfterReturnMegTime(Date afterReturnMegTime) {
+        this.afterReturnMegTime = afterReturnMegTime;
+    }
+}

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

@@ -0,0 +1,111 @@
+package com.uas.platform.b2c.trade.rate.model;
+
+import com.uas.platform.b2c.prod.store.model.StoreIn;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 评价模版
+ *
+ * Created by wangdy on 2017-08-29.
+ * 卖家的评价模版
+ */
+@Entity
+@Table(name = "b2c$rate$template")
+public class RateTemplate implements Serializable{
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @Id
+    @GeneratedValue
+    @Column(name = "id")
+    private Long id;
+
+    /**
+     * 创建人uu
+     */
+    @Column(name = "rate_templateuser")
+    private Long userUU;
+
+    /**
+     * 模版名称
+     */
+    @Column(name = "rate_templatename")
+    private String rateTemplateName;
+
+    /**
+     * 模版内容
+     */
+    @Column(name = "rate_templatecontent")
+    private String rateTemplateContent;
+
+    /**
+     * 所属店铺id
+     */
+    @Column(name = "storeid")
+    private String storeId;
+
+
+    /**
+     * 创建的时间
+     */
+    @Column(name = "createtime")
+    private Date createTime;
+
+    public Long getUserUU() {
+        return userUU;
+    }
+
+    public void setUserUU(Long userUU) {
+        this.userUU = userUU;
+    }
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getRateTemplateName() {
+        return rateTemplateName;
+    }
+
+    public void setRateTemplateName(String rateTemplateName) {
+        this.rateTemplateName = rateTemplateName;
+    }
+
+    public String getRateTemplateContent() {
+        return rateTemplateContent;
+    }
+
+    public void setRateTemplateContent(String rateTemplateContent) {
+        this.rateTemplateContent = rateTemplateContent;
+    }
+
+    public String getStoreId() {
+        return storeId;
+    }
+
+    public void setStoreId(String storeId) {
+        this.storeId = storeId;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}

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

@@ -0,0 +1,158 @@
+package com.uas.platform.b2c.trade.rate.model;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Created by wangdy on 2017-08-29.
+ * 买家对已购买店铺的评价
+ */
+@Entity
+@Table(name = "b2c$rate$vendor")
+public class RateVendor implements Serializable{
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @Id
+    @GeneratedValue
+    @Column(name = "id")
+    private Long id;
+
+    /**
+     * 买家uu
+     */
+    @Column(name = "user_uu")
+    private Long userUU;
+
+    /**
+     * 买家企业uu
+     */
+    @Column(name = "user_enuu")
+    private Long userEnuu;
+
+    /**
+     * 订单id
+     */
+    @Column(name = "order_id")
+    private String orderId;
+
+    /**
+     * 卖家企业uu
+     */
+    @Column(name = "enuu")
+    private Long enuu;
+
+    /**
+     * 卖家店铺id
+     */
+    @Column(name = "store_id")
+    private String storeId;
+
+    /**
+     * 评价星级 (描述相符)
+     */
+    @Column(name = "describe_level")
+    private Short describeLevel;
+
+    /**
+     * 评价星级 (卖家服务)
+     */
+    @Column(name = "vendor_level")
+    private Short vendorLevel;
+
+    /**
+     * 评价星级 (物流服务)
+     */
+    @Column(name = "logistics_level")
+    private Short logisticsLevel;
+
+    /**
+     * 评价时间
+     */
+    @Column(name = "createtime")
+    private Date time;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getUserUU() {
+        return userUU;
+    }
+
+    public void setUserUU(Long userUU) {
+        this.userUU = userUU;
+    }
+
+    public Long getUserEnuu() {
+        return userEnuu;
+    }
+
+    public void setUserEnuu(Long userEnuu) {
+        this.userEnuu = userEnuu;
+    }
+
+    public String getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(String orderId) {
+        this.orderId = orderId;
+    }
+
+    public Long getEnuu() {
+        return enuu;
+    }
+
+    public void setEnuu(Long enuu) {
+        this.enuu = enuu;
+    }
+
+    public String getStoreId() {
+        return storeId;
+    }
+
+    public void setStoreId(String storeId) {
+        this.storeId = storeId;
+    }
+
+    public Short getDescribeLevel() {
+        return describeLevel;
+    }
+
+    public void setDescribeLevel(Short describeLevel) {
+        this.describeLevel = describeLevel;
+    }
+
+    public Short getVendorLevel() {
+        return vendorLevel;
+    }
+
+    public void setVendorLevel(Short vendorLevel) {
+        this.vendorLevel = vendorLevel;
+    }
+
+    public Short getLogisticsLevel() {
+        return logisticsLevel;
+    }
+
+    public void setLogisticsLevel(Short logisticsLevel) {
+        this.logisticsLevel = logisticsLevel;
+    }
+
+    public Date getTime() {
+        return time;
+    }
+
+    public void setTime(Date time) {
+        this.time = time;
+    }
+}

+ 125 - 0
src/main/java/com/uas/platform/b2c/trade/rate/service/RateService.java

@@ -0,0 +1,125 @@
+package com.uas.platform.b2c.trade.rate.service;
+
+import com.uas.platform.b2c.trade.rate.model.RateBuyer;
+import com.uas.platform.b2c.trade.rate.model.RateGoods;
+import com.uas.platform.b2c.trade.rate.model.RateTemplate;
+import com.uas.platform.b2c.trade.rate.model.RateVendor;
+import com.uas.platform.core.model.PageInfo;
+import org.springframework.data.domain.Page;
+
+import java.util.List;
+
+/**
+ * Created by wangdy on 2017-08-30.
+ */
+public interface RateService {
+    /**
+     * 保存买家对卖家店铺评价
+     *
+     * @param  rateVendor
+     * @return order order
+     */
+    RateVendor saveRateVendor(String orderId , RateVendor rateVendor);
+
+    /**
+     * 买家对商品的初评
+     * @param rateGoodsList
+     */
+    void saveRateGoods(String orderId , List<RateGoods> rateGoodsList);
+
+    /**
+     * 买家对商品的初评
+     * @param rateGoodsList
+     */
+    void savebuyerRate(String orderId , RateVendor rateVendor , List<RateGoods> rateGoodsList);
+
+    /**
+     * (到期自动评价)买家对商品的初评
+     * @param ids
+     */
+    void autosavebuyerRate(String ids);
+
+    /**
+     * (到期自动追评价)买家对商品的初评
+     * @param ids
+     */
+    void autosaveAfterbuyerRate(String ids);
+
+    /**
+     * 买家对商品的追评
+     * @param rateGoodsList
+     */
+    void saveAfterRateGoods(List<RateGoods> rateGoodsList);
+
+
+    /**
+     * 卖家对买家的初评
+     * @param rateBuyer
+     * @return
+     */
+    RateBuyer saveRateBuyer(RateBuyer rateBuyer);
+
+    /**
+     * 卖家对卖家的追评
+     * @param rateBuyer
+     * @return
+     */
+    RateBuyer saveAfterRateBuyer(RateBuyer rateBuyer);
+
+    /**
+     * (到期自动评价)卖家对买家的初评
+     * @param ids
+     */
+    void autosaveVendorRate(String ids, boolean isFirst);
+
+    /**
+     * 保存评价模版
+     * @param rateTemplate
+     * @return
+     */
+    RateTemplate saveRateTemplate(RateTemplate rateTemplate);
+
+    /**
+     * 保存卖家对商品评价的回复(初评回复)
+     */
+    RateGoods saveReply(String orderId, Long goodsId, String reply);
+
+    /**
+     * 保存卖家对商品评价的回复(追评回复)
+     */
+    RateGoods saveAfterReply(String orderId, Long goodsId, String reply);
+
+
+    /****************************查询模版方法****************************/
+
+    /**
+     * 查询个人名下所有模版
+     * @param userUU
+     * @return
+     */
+    List<RateTemplate> getRateTemplateByUserUU(Long userUU);
+
+    /**
+     * 查询该店铺下的所有模版
+     * @param storeId
+     * @return
+     */
+    List<RateTemplate> getRateTempalteByStoreId(String storeId);
+
+
+    /******************************************************************/
+
+    /********************************查询卖家对买家的评价**********************************/
+
+    RateBuyer getRateBuyerByOrderId(String orderId);
+
+    /********************************查询买家对店铺的评价**********************************/
+
+    RateVendor getRateVendorByOrderId(String orderId);
+
+    RateGoods  getRateGoodsByGoodsId(Long goodsId);
+
+    Page<RateGoods> getRateGoodsByOrderId(String orderId, PageInfo pageInfo);
+
+
+}

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

@@ -0,0 +1,295 @@
+package com.uas.platform.b2c.trade.rate.service.impl;
+
+import com.uas.platform.b2c.core.constant.SplitChar;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.trade.order.dao.OrderDao;
+import com.uas.platform.b2c.trade.order.dao.PurchaseDao;
+import com.uas.platform.b2c.trade.order.model.Order;
+import com.uas.platform.b2c.trade.order.model.OrderDetail;
+import com.uas.platform.b2c.trade.order.model.Purchase;
+import com.uas.platform.b2c.trade.rate.dao.RateBuyerDao;
+import com.uas.platform.b2c.trade.rate.dao.RateGoodsDao;
+import com.uas.platform.b2c.trade.rate.dao.RateTemplateDao;
+import com.uas.platform.b2c.trade.rate.dao.RateVendorDao;
+import com.uas.platform.b2c.trade.rate.model.RateBuyer;
+import com.uas.platform.b2c.trade.rate.model.RateGoods;
+import com.uas.platform.b2c.trade.rate.model.RateTemplate;
+import com.uas.platform.b2c.trade.rate.model.RateVendor;
+import com.uas.platform.b2c.trade.rate.service.RateService;
+import com.uas.platform.core.exception.IllegalOperatorException;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.Status;
+import com.uas.platform.core.persistence.criteria.PredicateUtils;
+import org.apache.kafka.common.metrics.stats.Rate;
+import org.hibernate.criterion.LogicalExpression;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by wangdy on 2017-08-30.
+ */
+@Service
+public class RateServiceImpl implements RateService{
+
+    @Autowired
+    RateVendorDao rateVendorDao;
+
+    @Autowired
+    RateGoodsDao rateGoodsDao;
+
+    @Autowired
+    RateTemplateDao rateTemplateDao;
+
+    @Autowired
+    RateBuyerDao  rateBuyerDao;
+
+    @Autowired
+    OrderDao orderDao;
+
+    @Autowired
+    PurchaseDao purchaseDao;
+
+    final private short isAnony = 1;
+
+    @Override
+    public RateVendor saveRateVendor(String orderId , RateVendor rateVendor) {
+        rateVendor.setUserUU(SystemSession.getUser().getUserUU());
+        rateVendor.setUserEnuu(SystemSession.getUser().getEnterprise().getUu());
+        rateVendor.setOrderId(orderId);
+        rateVendor.setTime(new Date(System.currentTimeMillis()));
+
+        return rateVendorDao.save(rateVendor);
+    }
+
+    @Override
+    public void saveRateGoods(String orderId , List<RateGoods> rateGoodsList) {
+        if (rateGoodsDao.findByOrderId(orderId) != null && rateGoodsDao.findByOrderId(orderId).size() != 0){
+            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());
+            rateGoods.setOrderId(orderId);
+            rateGoods.setBuyerRateTime(new Date(System.currentTimeMillis()));
+        }
+        rateGoodsDao.save(rateGoodsList);
+        //订单状态变更
+        Order order = orderDao.findByOrderid(orderId);
+        /*if (order.getStatus().intValue() < Status.RECEIVED.value()) {
+            throw new IllegalOperatorException("当前订单不在已完成状态,不能评价!");
+        }*/
+        order.setStatusToBeAfterReviewed(SystemSession.getUser().getUserUU());
+        orderDao.save(order);
+    }
+
+    @Override
+    @Transactional
+    public void savebuyerRate(String orderId, RateVendor rateVendor, List<RateGoods> rateGoodsList) {
+        if (null != getRateVendorByOrderId(orderId)){
+            throw new RuntimeException();
+        }
+        saveRateVendor(orderId,rateVendor);
+        saveRateGoods(orderId,rateGoodsList);
+    }
+
+    @Override
+    public void autosavebuyerRate(String ids){
+            String[] idArray = ids.split(SplitChar.HYPHEN);
+            for (String id : idArray) {
+                Order order = orderDao.findByOrderid(id);
+                if(order.getRateStatus() == 523 || order.getRateStatus() == 522){continue;}
+                rateGoodsDao.delete(rateGoodsDao.findByOrderId(order.getOrderid()));
+                for (OrderDetail orderDetail : order.getOrderDetails()){
+                    RateGoods rateGoods = new RateGoods();
+                    rateGoods.setBuyerRateTime(new Date(System.currentTimeMillis()));
+                    rateGoods.setBuyerRate("此用户未及时做出评价,系统默认好评!");
+                    rateGoods.setIsAnony(isAnony);
+                    rateGoods.setEnuu(order.getSellerenuu());
+                    rateGoods.setGoodsId(orderDetail.getId());
+                    rateGoods.setLevel(isAnony);
+                    rateGoods.setOrderId(order.getOrderid());
+                    rateGoods.setStoreId(order.getStoreid());
+                    rateGoods.setUserEnuu(order.getBuyerenuu());
+                    rateGoods.setUserUU(order.getBuyeruu());
+                    rateGoodsDao.save(rateGoods);
+                }
+                RateVendor rateVendor = new RateVendor();
+                rateVendor.setUserUU(order.getBuyeruu());
+                rateVendor.setUserEnuu(order.getBuyerenuu());
+                rateVendor.setOrderId(order.getOrderid());
+                rateVendor.setTime(new Date(System.currentTimeMillis()));
+                rateVendor.setStoreId(order.getStoreid());
+                rateVendor.setEnuu(order.getSellerenuu());
+                rateVendor.setDescribeLevel((short)5);
+                rateVendor.setLogisticsLevel((short)5);
+                rateVendor.setVendorLevel((short)5);
+                rateVendorDao.save(rateVendor);
+                //订单状态变更
+                /*if (order.getStatus().intValue() < Status.RECEIVED.value()) {
+                    throw new IllegalOperatorException("当前订单不在已完成状态,不能收货!");
+                }*/
+                order.setStatusToBeAfterReviewed(SystemSession.getUser().getUserUU());
+                orderDao.save(order);
+            }
+    }
+
+    @Override
+    public void autosaveAfterbuyerRate(String ids) {
+        String[] idArray = ids.split(SplitChar.HYPHEN);
+        for (String id : idArray) {
+            //订单状态变更
+            Order order = orderDao.findByOrderid(id);
+            if (order.getRateStatus() == 522){continue;}
+            if (order.getRateStatus().intValue() != Status.TO_BE_AFTERREVIEWED.value()) {
+                throw new IllegalOperatorException("当前订单未完成初评,不能追评!");
+            }
+            order.setStatusReviewed(SystemSession.getUser().getUserUU());
+            orderDao.save(order);
+        }
+    }
+
+    @Override
+    public void saveAfterRateGoods(List<RateGoods> rateGoodsList) {
+        rateGoodsDao.save(rateGoodsList);
+    }
+
+    @Override
+    public RateBuyer saveRateBuyer(RateBuyer rateBuyer) {
+        return rateBuyerDao.save(rateBuyer);
+    }
+
+    @Override
+    public RateBuyer saveAfterRateBuyer(RateBuyer rateBuyer) {
+        return rateBuyerDao.save(rateBuyer);
+    }
+
+    @Override
+    public void autosaveVendorRate(String ids ,boolean isFirst) {
+        String[] idArray = ids.split(SplitChar.HYPHEN);
+        for (String id : idArray) {
+            //订单状态变更
+            Purchase purchase = purchaseDao.findByPurchaseid(id);
+            if(isFirst){
+                Order order = orderDao.findByOrderid(purchase.getOrderid());
+
+                if(rateBuyerDao.findByOrderId(order.getOrderid()) !=null ){continue;}
+                RateBuyer rateBuyer = new RateBuyer();
+                rateBuyer.setLevel(isAnony);
+                rateBuyer.setOrderId(purchase.getOrderid());
+                rateBuyer.setStoreId(purchase.getStoreid());
+                rateBuyer.setPurchaseId(purchase.getPurchaseid());
+                rateBuyer.setUserEnuu(purchase.getBuyerenuu());
+                rateBuyer.setUserUU(purchase.getBuyeruu());
+                rateBuyer.setVendorRate("此店铺未及时做出评价,系统默认好评!");
+                rateBuyer.setEnuu(purchase.getSellerenuu());
+                rateBuyer.setVendorRateTime(new Date(System.currentTimeMillis()));
+                rateBuyerDao.save(rateBuyer);
+                //purchase.setTobeRate(SystemSession.getUser().getUserUU());
+                //purchaseDao.save(purchase);
+            }else {
+                RateBuyer rateBuyer;
+                try {
+                     rateBuyer = rateBuyerDao.findByOrderId(purchase.getOrderid()).get(0);
+                }catch (Exception e ){
+                    continue;
+                }
+                if(rateBuyer.getVendorAfterRateTime() !=null ){continue;}
+                rateBuyer.setVendorAfterRateTime(new Date(System.currentTimeMillis()));
+                rateBuyerDao.save(rateBuyer);
+                //purchase.setTobeAfterRate(SystemSession.getUser().getUserUU());
+                //purchaseDao.save(purchase);
+            }
+
+        }
+    }
+
+
+    @Override
+    public RateTemplate saveRateTemplate(RateTemplate rateTemplate) {
+        return rateTemplateDao.save(rateTemplate);
+    }
+
+    @Override
+    public RateGoods saveReply(String orderId, Long goodsId, String reply) {
+        RateGoods rateGoods = rateGoodsDao.findByOrderIdAndGoodsId(orderId,goodsId).get(0);
+        rateGoods.setReturnMeg(reply);
+        rateGoods.setReturnMegTime(new Date(System.currentTimeMillis()));
+        return rateGoodsDao.save(rateGoods);
+    }
+
+    @Override
+    public RateGoods saveAfterReply(String orderId, Long goodsId, String reply) {
+        RateGoods rateGoods = rateGoodsDao.findByOrderIdAndGoodsId(orderId,goodsId).get(0);
+        rateGoods.setAfterReturnMeg(reply);
+        rateGoods.setAfterReturnMegTime(new Date(System.currentTimeMillis()));
+        return rateGoodsDao.save(rateGoods);
+    }
+
+    @Override
+    public List<RateTemplate> getRateTemplateByUserUU(Long userUU) {
+        return rateTemplateDao.findByUserUU(userUU);
+    }
+
+    @Override
+    public List<RateTemplate> getRateTempalteByStoreId(String storeId) {
+        return rateTemplateDao.findByStoreId(storeId);
+    }
+
+    @Override
+    public RateBuyer getRateBuyerByOrderId(String orderId) {
+        RateBuyer rateBuyer ;
+        try {
+            rateBuyer = rateBuyerDao.findByOrderId(orderId).get(0);
+        }catch (IndexOutOfBoundsException e){
+            return null;
+        }
+        return rateBuyer;
+    }
+
+    @Override
+    public RateVendor getRateVendorByOrderId(String orderId) {
+        RateVendor rateVendor;
+        try {
+            rateVendor = rateVendorDao.findByOrderId(orderId).get(0);
+        }catch (IndexOutOfBoundsException e){
+            return null;
+        }
+        return rateVendor;
+    }
+
+    @Override
+    public RateGoods getRateGoodsByGoodsId(Long goodsId) {
+        RateGoods rateGoods;
+        try {
+            rateGoods = rateGoodsDao.findByGoodsId(goodsId).get(0);
+        }catch (IndexOutOfBoundsException e){
+            return null;
+        }
+        return rateGoods;
+    }
+
+    @Override
+    public Page<RateGoods> getRateGoodsByOrderId(String orderId, final PageInfo pageInfo) {
+        pageInfo.expression(PredicateUtils.eq("orderId", orderId, true));
+        return rateGoodsDao.findAll(new Specification<RateGoods>() {
+            @Override
+            public Predicate toPredicate(Root<RateGoods> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+                query.where(pageInfo.getPredicates(root, query, builder));
+                return null;
+            }
+        }, pageInfo);
+    }
+}

+ 36 - 0
src/main/java/com/uas/platform/b2c/trade/rate/status/RateType.java

@@ -0,0 +1,36 @@
+package com.uas.platform.b2c.trade.rate.status;
+
+/**
+ * 评价类型枚举类
+ *
+ * @author wangdy
+ * @version 2017-08-30
+ */
+public enum RateType {
+    GOOD(1, "GOOD"), 	    // 好评
+    MIDDLE(2, "MIDDLE"),	// 中评
+    BAD(3, "BAD");	        // 差评
+
+    private int code;
+
+    private String value;
+
+    RateType(int code, String message) {
+        this.code = code;
+        this.value = message;
+    }
+
+    public int code() {
+        return this.code;
+    }
+
+    public String value() {
+        return this.value;
+    }
+
+    @Override
+    public String toString() {
+        return Integer.toString(code);
+    }
+}
+

+ 256 - 0
src/main/java/com/uas/platform/b2c/trade/rate/task/RateTask.java

@@ -0,0 +1,256 @@
+package com.uas.platform.b2c.trade.rate.task;
+
+/**
+ * Created by uas on 2017-08-30.
+ */
+
+import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
+import com.uas.platform.b2c.common.account.dao.UserDao;
+import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.core.config.SysConf;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
+import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.platform.b2c.trade.order.dao.OrderDao;
+import com.uas.platform.b2c.trade.order.model.Order;
+import com.uas.platform.b2c.trade.order.model.Purchase;
+import com.uas.platform.b2c.trade.order.model.StatusHistory;
+import com.uas.platform.b2c.trade.order.service.OrderService;
+import com.uas.platform.b2c.trade.order.service.PurchaseService;
+import com.uas.platform.b2c.trade.presale.dao.TradeBasicPropertiesDao;
+import com.uas.platform.b2c.trade.rate.service.RateService;
+import com.uas.platform.core.exception.IllegalOperatorException;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import com.uas.platform.core.model.Status;
+import com.uas.platform.core.model.Type;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 评价的一些自动任务
+ *
+ * @author wangdy
+ * @version 2017-08-31 8:59:06 创建文件
+ */
+@Component("RateTask")
+public class RateTask {
+
+    private final OrderDao orderDao;
+
+    private final OrderService orderService;
+
+    private final PurchaseService purchaseService;
+
+    private final TradeBasicPropertiesDao tradeBasicPropertiesDao;
+
+    private final UserDao userDao;
+
+    private final SysConf sysConf;
+
+    private final EnterpriseDao enterpriseDao;
+
+    private final RateService rateService;
+
+
+    private static final UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+    @Autowired
+    public RateTask(OrderDao orderDao, OrderService orderService,PurchaseService purchaseService, TradeBasicPropertiesDao tradeBasicPropertiesDao, UserDao userDao, SysConf sysConf, EnterpriseDao enterpriseDao, RateService rateService) {
+        this.orderDao = orderDao;
+        this.orderService = orderService;
+        this.purchaseService = purchaseService;
+        this.tradeBasicPropertiesDao = tradeBasicPropertiesDao;
+        this.userDao = userDao;
+        this.sysConf = sysConf;
+        this.enterpriseDao = enterpriseDao;
+        this.rateService = rateService;
+    }
+
+    /**
+     * 对超过初评时间的订单,自动初评
+     */
+    @Transactional
+    public void autoRate() {
+
+            User user = null;
+            List<User> userUUs = userDao.findUserByUserUU(sysConf.getAdminUU());
+            if(CollectionUtils.isEmpty(userUUs)) {
+                throw new IllegalOperatorException("根据配置文件的adminUU 找不到对应的个人信息");
+            }
+            user = userUUs.get(0);
+            Enterprise enterprise = enterpriseDao.findByUu(sysConf.getEnUU());
+            user.setEnterprise(enterprise);
+            SystemSession.setUser(user);
+            String infoByType = tradeBasicPropertiesDao.findInfoByType(Type.B2C_AUTO_RECEVIED_TIME.value());
+            if(StringUtils.isEmpty(infoByType)) {
+                throw new IllegalOperatorException("买家自动初评时间为空,不能继续操作");
+            }
+            Integer automaticReceipt = null;
+            try {
+                automaticReceipt = Integer.valueOf(infoByType);
+            } catch (NumberFormatException e) {
+                e.printStackTrace();
+            }
+            //先写在代码上,20个工作日自动好评
+            automaticReceipt = 20;
+
+            List<Order> orderList = orderService.findByAfterStatus(Status.RECEIVED.value());
+            String ids = "-";
+            for (Order order : orderList) {
+                List<StatusHistory> statusHistories = FastjsonUtils.fromJsonArray(order.getStatushistory(), StatusHistory.class);
+                for (int i = statusHistories.size() - 1; i > 0 ; i--) {
+                    StatusHistory statusHistory = statusHistories.get(i);
+                    if (statusHistory.getStatus().intValue() == Status.RECEIVED.value()) {
+                        Calendar calendar = Calendar.getInstance();
+                        Date date = new Date();
+                        calendar.setTime(date);
+                        calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - automaticReceipt);
+                        Date time = calendar.getTime();
+                        time.setHours(0);
+                        time.setMinutes(0);
+                        time.setSeconds(0);
+                        Date shipTime = order.getAutoCompleteTime();
+                        shipTime.setHours(0);
+                        shipTime.setMinutes(0);
+                        shipTime.setSeconds(0);
+                        if (compareTimeIsGigger24Hours(time, shipTime)) {
+                            ids = ids + order.getOrderid() + "-";
+                        }
+                    }
+                }
+            }
+            if(ids.length() > 1) {
+                ids = ids.substring(1, ids.length() - 1);
+                rateService.autosavebuyerRate(ids);
+            }
+            logger.log("自动初评", "买家自动初评订单:" + ids);
+            autoVendorRate(automaticReceipt,true);
+    }
+    /**
+     * 对超过追评时间的订单,自动追评
+     */
+    @Transactional
+    public void autoAfterRate() {
+        try {
+            User user = null;
+            List<User> userUUs = userDao.findUserByUserUU(sysConf.getAdminUU());
+            if(CollectionUtils.isEmpty(userUUs)) {
+                throw new IllegalOperatorException("根据配置文件的adminUU 找不到对应的个人信息");
+            }
+            user = userUUs.get(0);
+            Enterprise enterprise = enterpriseDao.findByUu(sysConf.getEnUU());
+            user.setEnterprise(enterprise);
+            SystemSession.setUser(user);
+            String infoByType = tradeBasicPropertiesDao.findInfoByType(Type.B2C_AUTO_RECEVIED_TIME.value());
+            if(StringUtils.isEmpty(infoByType)) {
+                throw new IllegalOperatorException("买家自动追评时间为空,不能继续操作");
+            }
+            Integer automaticReceipt = null;
+            try {
+                automaticReceipt = Integer.valueOf(infoByType);
+            } catch (NumberFormatException e) {
+                e.printStackTrace();
+            }
+//          //先写在代码上,180个工作日自动追评价
+            automaticReceipt = 180;
+            List<Order> orderList = orderService.findByAfterStatus(Status.RECEIVED.value());
+            String ids = "-";
+            for (Order order : orderList) {
+                List<StatusHistory> statusHistories = FastjsonUtils.fromJsonArray(order.getStatushistory(), StatusHistory.class);
+                for (int i = statusHistories.size() - 1; i > 0 ; i--) {
+                    StatusHistory statusHistory = statusHistories.get(i);
+                    if (statusHistory.getStatus().intValue() == Status.RECEIVED.value()) {
+                        Calendar calendar = Calendar.getInstance();
+                        Date date = new Date();
+                        calendar.setTime(date);
+                        calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - automaticReceipt);
+                        Date time = calendar.getTime();
+                        time.setHours(0);
+                        time.setMinutes(0);
+                        time.setSeconds(0);
+                        Date shipTime = order.getAutoCompleteTime();
+                        shipTime.setHours(0);
+                        shipTime.setMinutes(0);
+                        shipTime.setSeconds(0);
+                        if (compareTimeIsGigger24Hours(time, shipTime)) {
+                            ids = ids + order.getOrderid() + "-";
+                        }
+                    }
+                }
+            }
+            if(ids.length() > 1) {
+                ids = ids.substring(1, ids.length() - 1);
+                rateService.autosaveAfterbuyerRate(ids);
+            }
+            logger.log("自动追评", "买家自动追加评价:" + ids);
+            autoVendorRate(automaticReceipt, false);
+        }catch (Exception e) {
+        } finally {
+        }
+    }
+
+    /**
+     * 卖家的 自动评价操作
+     * @param automaticReceipt
+     */
+    private void autoVendorRate(Integer automaticReceipt,boolean isFirst) {
+        try {
+            //采购单的自动初评
+            List<Purchase> purchasesList = purchaseService.findByAfterStatus(Status.TOBEPAID.value());
+            String pids = "-";
+            for (Purchase purchase : purchasesList) {
+                List<StatusHistory> statusHistories = FastjsonUtils.fromJsonArray(purchase.getStatushistory(), StatusHistory.class);
+                for (int i = statusHistories.size() - 1; i > 0 ; i--) {
+                    StatusHistory statusHistory = statusHistories.get(i);
+                    if(statusHistory.getStatus().intValue() == Status.TOBEPAID.value()) {
+                        Calendar calendar = Calendar.getInstance();
+                        Date date = new Date();
+                        calendar.setTime(date);
+                        calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - automaticReceipt);
+                        Date time = calendar.getTime();
+                        time.setHours(0);
+                        time.setMinutes(0);
+                        time.setSeconds(0);
+                        Date shipTime = statusHistory.getTime();
+                        shipTime.setHours(0);
+                        shipTime.setMinutes(0);
+                        shipTime.setSeconds(0);
+                        if(compareTimeIsGigger24Hours(time, shipTime)) {
+                            pids = pids + purchase.getPurchaseid() + "-";
+                        }
+                    }
+                }
+
+            }
+             if(pids.length() > 1) {
+                pids = pids.substring(1, pids.length() - 1);
+                rateService.autosaveVendorRate(pids,isFirst?true:false);
+            }
+            logger.log("自动初评", "卖家自动初评订单:" + pids);
+        }catch (Exception e){}
+        finally {}
+    }
+
+    /**
+     * 比较日期的大小(只比较年、月、日),,相隔的时间是否超过24小时
+     * @param date1
+     * @param date2
+     * @return  date1 - date2 > 0 return true else false
+     */
+    private boolean compareTimeIsGigger24Hours (Date date1, Date date2) {
+        long mills = date1.getTime() - date2.getTime();
+        if(mills > 0) {
+            return true;
+        }else {
+            return false;
+        }
+    }
+}

+ 1 - 0
src/main/resources/dev/account.properties

@@ -8,6 +8,7 @@ sso.app=mall
 sso.secretkey=0taQcW073Z7G628g5H
 sso.cookie.secure=false
 sso.login.url=http://113.105.74.135:8001/sso/login
+sso.logout.url=http://113.105.74.135:8001/sso/logout
 sso.register.url=http://113.105.74.135:8001/sso/register
 
 #cross domain

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

@@ -1,2 +1,2 @@
-redis.host=192.168.253.6
+redis.host=10.10.100.200
 redis.port=6379

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

@@ -23,8 +23,17 @@ reportPrintUrl=http://print.ubtob.com/report/print?userName=B2C&profile=${profil
 reportUploadUrl=http://print.ubtob.com/report/fileUpload?userName=B2C
 # micro service IP(Swarm Manager IP)
 microServiceIp=10.10.101.23
+newsMicroServiceIp=news.usoftchina.com
+newsRedisRefresh=3600
+floorMicroServiceIp=10.10.101.23
+carouselMicroServiceIp=10.10.101.23
+storecmsMicroServiceIp=10.10.101.23
 endpointUri=10.10.101.23
 recommendPort=20102
+# upload file
+uploadFileUrl = http://10.10.100.200:9999
+# search file
+searchUrl = http://10.10.100.191:8092
 
 # Kafka
 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

+ 1 - 1
src/main/resources/log4j.properties

@@ -9,7 +9,7 @@ log4j.appender.stdout.layout.ConversionPattern=%d %p [%c]:%m%n
 log4j.appender.logfile=org.apache.log4j.RollingFileAppender
 log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
 #log4j.appender.logfile.File=../log4j.log
-log4j.appender.logfile.File=../logs/b2c_log4j.log
+#log4j.appender.logfile.File=$CATALINA_BASE/logs/b2c_log4j.log
 # Keep three backup files.
 log4j.appender.logfile.MaxBackupIndex=3
 log4j.appender.logfile.MaxFileSize=5120KB

+ 1 - 0
src/main/resources/prod/account.properties

@@ -8,6 +8,7 @@ sso.app=mall
 sso.secretkey=0taQcW073Z7G628g5H
 sso.cookie.secure=false
 sso.login.url=https://account.ubtob.com/sso/login
+sso.logout.url=https://account.ubtob.com/sso/logout
 sso.register.url=http://account.ubtob.com/sso/register
 
 #cross domain

+ 3 - 3
src/main/resources/prod/jdbc.properties

@@ -3,9 +3,9 @@
 #jdbc.username=platform$b2b
 #jdbc.password=select*fromuu
 jdbc.driverClassName=com.mysql.jdbc.Driver
-jdbc.url=jdbc:mysql://10.10.100.18:3306/mall_prod?characterEncoding=UTF-8
-jdbc.username=root
-jdbc.password=select
+jdbc.url=jdbc:mysql://10.10.0.208:8066/mall_prod?characterEncoding=UTF-8
+jdbc.username=sa
+jdbc.password=Select123!#%*(
 jdbc.initialSize=1
 jdbc.maxActive=100
 jdbc.maxIdle=50

+ 1 - 1
src/main/resources/prod/redis.properties

@@ -1,2 +1,2 @@
-redis.host=10.10.100.200
+redis.host=10.10.0.200
 redis.port=6379

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

@@ -24,8 +24,16 @@ reportPrintUrl=http://print.ubtob.com/report/print?userName=B2C&profile=${profil
 reportUploadUrl=http://print.ubtob.com/report/fileUpload?userName=B2C
 # micro service IP(Swarm Manager IP)
 microServiceIp=10.10.100.23
+newsMicroServiceIp=news.usoftchina.com
+newsRedisRefresh=3600
+floorMicroServiceIp=10.10.0.30
+carouselMicroServiceIp=10.10.0.188
+storecmsMicroServiceIp=10.10.0.30
 endpointUri=10.10.100.23
 recommendPort=20100
-
+# upload file
+uploadFileUrl=http://10.10.0.254:20290
+# search file
+searchUrl=http://10.10.0.76:8081
 # Kafka
 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

+ 1 - 2
src/main/resources/spring/context.xml

@@ -187,8 +187,7 @@
 		init-method="init">
 		<property name="configPath" value="classpath:dev/account.properties" />
 	</bean>
-	
-	<import resource="classpath:spring/dubbo-consumer.xml"/>
+
 	<import resource="classpath:spring/ehcache.xml"/>
 	<import resource="classpath:spring/jpa.xml"/>
 	<import resource="classpath:spring/redis.xml"/>

+ 0 - 23
src/main/resources/spring/dubbo-consumer.xml

@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
-	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-	http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
-
-	<dubbo:application name="b2c_consumer" owner="${dubbo.owner}" />
-
-	<dubbo:registry address="${zk.url}" check="false" />
-
-	<!-- 分布式文件服务 -->
-	<dubbo:reference id="fileClient" interface="com.uas.dfs.service.FileClient" />
-
-	<!-- 搜索服务 -->
-	<dubbo:reference id="searchService"
-		interface="com.uas.search.service.SearchService" timeout="10000"
-		group="${dubbo.group}" />
-	<dubbo:reference id="orderSearchService"
-		interface="com.uas.search.service.OrderSearchService" timeout="10000"
-		group="${dubbo.group}" />
-
-
-</beans>

+ 10 - 1
src/main/resources/spring/task.xml

@@ -6,9 +6,18 @@
 		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
 		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd
 		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
-
+    <!--超时自动确认收货-->
     <task:scheduled-tasks>
         <task:scheduled ref="OrderTask" method="autoConfirmOrderRevice" cron="0 0 1 * * ?"/>
     </task:scheduled-tasks>
+    <!--超时自动初评-->
+    <task:scheduled-tasks>
+        <task:scheduled ref="RateTask" method="autoRate" cron="0 0 1 * * ?"/>
+    </task:scheduled-tasks>
+    <!--超时自动追评-->
+    <task:scheduled-tasks>
+        <task:scheduled ref="RateTask" method="autoAfterRate" cron="0 0 1 * * ?"/>
+       <!-- <task:scheduled ref="RateTask" method="autoAfterRate" cron="* */10 * * * ?"/>-->
+    </task:scheduled-tasks>
     <context:annotation-config />
 </beans>

+ 1 - 0
src/main/resources/test/account.properties

@@ -8,6 +8,7 @@ sso.app=mall
 sso.secretkey=0taQcW073Z7G628g5H
 sso.cookie.secure=false
 sso.login.url=http://113.105.74.135:8001/sso/login
+sso.logout.url=http://113.105.74.135:8001/sso/logout
 sso.register.url=http://113.105.74.135:8001/sso/register
 
 #cross domain

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

@@ -1,2 +1,3 @@
-redis.host=192.168.253.6
+#redis.host=192.168.253.6
+redis.host=10.10.100.200
 redis.port=6379

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

@@ -23,8 +23,17 @@ reportPrintUrl=http://print.ubtob.com/report/print?userName=B2C&profile=${profil
 reportUploadUrl=http://print.ubtob.com/report/fileUpload?userName=B2C
 # micro service IP(Swarm Manager IP)
 microServiceIp=10.10.101.23
+newsMicroServiceIp=news.usoftchina.com
+newsRedisRefresh=3600
+floorMicroServiceIp=10.10.101.23
+carouselMicroServiceIp=10.10.101.23
+storecmsMicroServiceIp=10.10.101.23
 endpointUri=10.10.101.23
 recommendPort=20102
+# upload file
+uploadFileUrl = http://10.10.100.200:9999
+# search file
+searchUrl = http://10.10.100.191:8092
 
 # Kafka
 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

BIN
src/main/webapp/resources/img/user/images/rate1.png


BIN
src/main/webapp/resources/img/user/images/rate2.png


BIN
src/main/webapp/resources/img/user/images/rate3.png


BIN
src/main/webapp/resources/img/user/images/rateBad.png


BIN
src/main/webapp/resources/img/user/images/rateGood.png


BIN
src/main/webapp/resources/img/vendor/images/rate-add.png


BIN
src/main/webapp/resources/img/vendor/images/rate-box-del.png


Vissa filer visades inte eftersom för många filer har ändrats