Browse Source

Merge branch 'dev-mysql' into feature/yc-mysql_erp-1020

wangyc 8 years ago
parent
commit
96cf150636
68 changed files with 849 additions and 168 deletions
  1. 3 3
      .gitignore
  2. 3 2
      pom.xml
  3. 16 0
      src/main/java/com/uas/platform/b2c/advertise/ad/service/FloorsService.java
  4. 34 0
      src/main/java/com/uas/platform/b2c/advertise/ad/service/impl/FloorsServiceImpl.java
  5. 2 0
      src/main/java/com/uas/platform/b2c/common/account/controller/SecurityController.java
  6. 56 0
      src/main/java/com/uas/platform/b2c/common/account/controller/UsageLogController.java
  7. 4 1
      src/main/java/com/uas/platform/b2c/common/account/v2/service/impl/UserServiceImpl.java
  8. 7 5
      src/main/java/com/uas/platform/b2c/common/base/service/impl/RestMailServiceImpl.java
  9. 7 5
      src/main/java/com/uas/platform/b2c/common/base/service/impl/RestSmsServiceImpl.java
  10. 16 1
      src/main/java/com/uas/platform/b2c/common/search/controller/SearcherController.java
  11. 19 0
      src/main/java/com/uas/platform/b2c/common/search/dao/SearchHistoryDao.java
  12. 86 0
      src/main/java/com/uas/platform/b2c/common/search/model/SearchHistory.java
  13. 16 5
      src/main/java/com/uas/platform/b2c/common/search/rpc/service/Impl/SearchServiceImpl.java
  14. 1 1
      src/main/java/com/uas/platform/b2c/common/search/rpc/service/SearchService.java
  15. 2 2
      src/main/java/com/uas/platform/b2c/common/search/service/SearcherService.java
  16. 35 5
      src/main/java/com/uas/platform/b2c/common/search/service/impl/SearcherServiceImpl.java
  17. 14 0
      src/main/java/com/uas/platform/b2c/core/config/SysConf.java
  18. 0 28
      src/main/java/com/uas/platform/b2c/prod/commodity/controller/GoodsController.java
  19. 16 1
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java
  20. 26 1
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ReleaseProductByBatchServiceImpl.java
  21. 11 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/api/BrandController.java
  22. 11 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/dao/BrandDao.java
  23. 10 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/dao/BrandMostSimpleInfoDao.java
  24. 8 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/BrandService.java
  25. 8 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/BrandServiceImpl.java
  26. 1 1
      src/main/java/com/uas/platform/b2c/prod/product/common/CommonTask.java
  27. 35 2
      src/main/java/com/uas/platform/b2c/prod/product/common/api/CommonCountController.java
  28. 9 2
      src/main/java/com/uas/platform/b2c/prod/product/common/dao/CommonCountDao.java
  29. 14 0
      src/main/java/com/uas/platform/b2c/prod/product/common/model/CommonCount.java
  30. 9 2
      src/main/java/com/uas/platform/b2c/prod/product/common/service/CommonCountService.java
  31. 7 2
      src/main/java/com/uas/platform/b2c/prod/product/common/service/impl/CommonCountServiceImpl.java
  32. 2 2
      src/main/java/com/uas/platform/b2c/prod/product/component/api/ComponentController.java
  33. 14 0
      src/main/java/com/uas/platform/b2c/prod/product/component/modal/ComponentCrawl.java
  34. 2 1
      src/main/java/com/uas/platform/b2c/prod/product/component/service/ComponentService.java
  35. 3 2
      src/main/java/com/uas/platform/b2c/prod/product/component/service/impl/ComponentServiceImpl.java
  36. 33 12
      src/main/java/com/uas/platform/b2c/trade/order/task/OrderTask.java
  37. 13 0
      src/main/java/com/uas/platform/b2c/trade/presale/controller/CollectionController.java
  38. 12 0
      src/main/java/com/uas/platform/b2c/trade/presale/controller/StoreFocusController.java
  39. 7 0
      src/main/java/com/uas/platform/b2c/trade/presale/service/CollectionService.java
  40. 8 0
      src/main/java/com/uas/platform/b2c/trade/presale/service/StoreFocusService.java
  41. 17 0
      src/main/java/com/uas/platform/b2c/trade/presale/service/impl/CollectionServiceImpl.java
  42. 17 0
      src/main/java/com/uas/platform/b2c/trade/presale/service/impl/StoreFocusServiceImpl.java
  43. 1 1
      src/main/resources/dev/jdbc.properties
  44. 2 0
      src/main/resources/dev/sys.properties
  45. 2 1
      src/main/resources/log4j.properties
  46. 1 1
      src/main/resources/prod/jdbc.properties
  47. 4 0
      src/main/resources/prod/sys.properties
  48. 1 1
      src/main/resources/test/jdbc.properties
  49. 3 0
      src/main/resources/test/sys.properties
  50. 7 3
      src/main/webapp/WEB-INF/views/normal/proxyLogout.html
  51. 7 0
      src/main/webapp/resources/css/common.css
  52. 7 0
      src/main/webapp/resources/css/common/common.css
  53. 2 1
      src/main/webapp/resources/js/common/services.js
  54. 9 6
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_order_ctrl.js
  55. 24 17
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_order_ctrl.js
  56. 5 1
      src/main/webapp/resources/view/admin/trade/trade_invoicefromorder_detail.html
  57. 7 2
      src/main/webapp/resources/view/admin/trade/trade_invoicefrompurc_detail.html
  58. 5 1
      src/main/webapp/resources/view/admin/trade/trade_order_detail.html
  59. 7 2
      src/main/webapp/resources/view/admin/trade/trade_purchase_detail.html
  60. 3 3
      src/main/webapp/resources/view/usercenter/forstore/buyer_invoice.html
  61. 2 3
      src/main/webapp/resources/view/usercenter/forstore/buyer_order.html
  62. 2 2
      src/main/webapp/resources/view/usercenter/forstore/order_detail.html
  63. 2 2
      src/main/webapp/resources/view/vendor/forstore/vendor_order.html
  64. 39 0
      src/test/java/com/uas/platform/b2c/BaseJunitTest.java
  65. 0 35
      src/test/java/com/uas/platform/b2c/RegistForMall.java
  66. 27 0
      src/test/java/com/uas/platform/b2c/common/account/UsageLogController.java
  67. 28 0
      src/test/java/com/uas/platform/b2c/common/base/RestMailService.java
  68. 38 0
      src/test/java/com/uas/platform/b2c/common/base/RestSmsService.java

+ 3 - 3
.gitignore

@@ -3,7 +3,7 @@
 .settings/
 bin/
 tmp/
-test/
+# test/
 *.tmp
 *.bak
 *.swp
@@ -34,7 +34,7 @@ test/
 # Java
 ## Compiled class file
 *.class
-test/
+#test/
 
 ## Log file
 *.log
@@ -57,4 +57,4 @@ pom.xml.next
 release.properties
 dependency-reduced-pom.xml
 buildNumber.properties
-/src/test/
+# /src/test/

+ 3 - 2
pom.xml

@@ -39,14 +39,15 @@
 			<properties>
 				<profile>prod</profile>
 				<!-- static plugin -->
-				<static-path>http://static.usoftmall.com</static-path>
+				<static-path>https://static.usoftmall.com</static-path>
 			</properties>
 		</profile>
 	</profiles>
 	<dependencies>
 		<dependency>
 			<groupId>javax.servlet</groupId>
-			<artifactId>servlet-api</artifactId>
+			<artifactId>javax.servlet-api</artifactId>
+			<version>3.0.1</version>
 		</dependency>
 		<dependency>
 			<groupId>junit</groupId>

+ 16 - 0
src/main/java/com/uas/platform/b2c/advertise/ad/service/FloorsService.java

@@ -19,4 +19,20 @@ public interface FloorsService {
 	 * @return the floors by module
 	 */
 	List<JSONObject> getFloorsByModule(String module);
+
+	/**
+	 * Gets floors by module.
+	 *
+	 * @param item the body
+	 * @return the floors by module
+	 */
+	Boolean setFloorsItem(JSONObject item);
+
+	/**
+	 * Gets floors by module.
+	 *
+	 * @param batchCode the body
+	 * @return the floors by module
+	 */
+	JSONObject isInHome(String batchCode);
 }

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

@@ -5,6 +5,7 @@ import com.uas.platform.b2c.advertise.ad.service.FloorsService;
 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.http.HttpStatus;
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
 
@@ -35,4 +36,37 @@ public class FloorsServiceImpl implements FloorsService {
 		String result = restTemplate.getForEntity(url, String.class).getBody();
 		return JacksonUtils.fromJsonArray(result, JSONObject.class);
 	}
+
+	@Override
+	public Boolean setFloorsItem(JSONObject item){       //(String name, String brandEn ,String kind, String pictureUrl, String hrefUrl) {
+
+		String url = conf.getRequestUrlForFloor(20040, "/floors/"+item.get("floorId").toString()+"/item");
+		item.remove("floorId");
+		HttpStatus status = restTemplate.postForEntity(url,item,String.class).getStatusCode();
+		if (status.equals(HttpStatus.OK)){
+			return true;
+		}else{
+			return false;
+		}
+	}
+
+	@Override
+	public JSONObject isInHome(String batchCode) {
+		String url = conf.getRequestUrlForFloor(20040, "/floors?usedFor=home-v3");
+		String result = restTemplate.getForEntity(url, String.class).getBody();
+		List<JSONObject> floors = JacksonUtils.fromJsonArray(result,JSONObject.class);
+		List<JSONObject> items;
+		for (JSONObject floor : floors){
+			if (floor.get("name").equals("器件楼层")){
+				String floorId = floor.get("id").toString();
+				items = JacksonUtils.fromJsonArray(floor.get("items").toString(),JSONObject.class);
+				for (JSONObject item : items){
+					if (item.get("hrefUrl").toString().indexOf(batchCode) != -1){
+						return item.fluentPut("floorId",floorId);
+					}
+				}
+			}
+		}
+		return null;
+	}
 }

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

@@ -167,6 +167,7 @@ public class SecurityController {
 	public ModelMap afterCrossLogin(HttpServletRequest request, HttpServletResponse response, String replyTxt) {
 		if (!StringUtils.isEmpty(replyTxt)) {
 			Object returnUrl = request.getSession().getAttribute(SSOConfig.SSOReferer);
+//			returnUrl = returnUrl.toString().replaceAll("platform-b2c/","").replaceAll("login/proxy","SSRProxy/loginProxy");
 			SSOConfig config = SSOHelper.getSSOService().getConfig();
 			AuthToken token = SSOHelper.ok(request, response, replyTxt, config.getClientPublicKey(), config.getCenterPublicKey());
 			if (token != null) {
@@ -182,6 +183,7 @@ public class SecurityController {
 					SystemSession.setUser(user);
 					log(request, user);
 				}
+				returnUrl = returnUrl.toString().contains("10.10.0.10") ? "/" : returnUrl;
 				return new ModelMap("returnUrl", returnUrl);
 			}
 		}

+ 56 - 0
src/main/java/com/uas/platform/b2c/common/account/controller/UsageLogController.java

@@ -0,0 +1,56 @@
+package com.uas.platform.b2c.common.account.controller;
+
+import com.uas.platform.b2c.common.account.model.UsageLog;
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.common.account.service.UsageLogService;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Sort;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * 用户操作日志请求
+ * @author suntg
+ * @version 2017年11月8日16:38:52 初始化建立
+ */
+@RestController
+@RequestMapping(value = "/log/usage")
+public class UsageLogController {
+
+	@Autowired
+	private UsageLogService usageLogService;
+
+	private final static UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+	/**
+	 * 根据分页信息获取
+	 * @return
+	 */
+	@RequestMapping(method = RequestMethod.GET)
+	public Page<UsageLog> getAllByPage(PageParams params) {
+		PageInfo info = new PageInfo(params);
+		if(info.getSort() == null)
+			info.sorting("time", Sort.Direction.DESC);
+		return usageLogService.findAllByPageInfo(info);
+	}
+
+	/**
+	 * 根据用户UU号分页获取
+	 * @return
+	 */
+	@RequestMapping(value = "/{uu}",method = RequestMethod.GET)
+	public Page<UsageLog> getByUserUuByPage(PageParams params, @PathVariable("uu") Long userUu) {
+		PageInfo info = new PageInfo(params);
+		info.filter("userUU", userUu);
+		if(info.getSort() == null)
+			info.sorting("time", Sort.Direction.DESC);
+		return usageLogService.findAllByPageInfo(info);
+	}
+
+}

+ 4 - 1
src/main/java/com/uas/platform/b2c/common/account/v2/service/impl/UserServiceImpl.java

@@ -32,7 +32,10 @@ public class UserServiceImpl implements UserService {
 
     @Override
     public void save(User user) {
-        com.uas.platform.b2c.common.account.model.User u =  new com.uas.platform.b2c.common.account.model.User();
+        com.uas.platform.b2c.common.account.model.User u = userDao.findOne(Long.parseLong(user.getDialectUID()));
+        if (null == u){
+            u =  new com.uas.platform.b2c.common.account.model.User();
+        }
         u.setUserPwd(user.getPassword());
         u.setUserName(user.getName());
         u.setEnable((short) 1);

+ 7 - 5
src/main/java/com/uas/platform/b2c/common/base/service/impl/RestMailServiceImpl.java

@@ -7,6 +7,7 @@ import com.uas.message.mail.domain.MailLog;
 import com.uas.message.mail.service.MailService;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
@@ -31,17 +32,18 @@ public class RestMailServiceImpl implements MailService {
     /**
      * 邮件服务主机地址
      */
-    private static final String MAIL_CONSOLE_HOST = "http://10.10.100.23:28029/";
+    @Value("#{sys.messageServiceIp ?: 'http://message.ubtob.com/'}")
+    private String MAIL_CONSOLE_HOST;
 
     /**
      * 发送邮件给单个人url
      */
-    private static final String MAIL_SEND_URL = MAIL_CONSOLE_HOST  + "mail/send";
+    private String MAIL_SEND_URL = "mail/send";
 
     /**
      * 发送邮件给多个人 url
      */
-    private static final String MAIL_SEND_MANY_URL = MAIL_CONSOLE_HOST + "mail/send/o2m";
+    private String MAIL_SEND_MANY_URL = "mail/send/o2m";
 
     @Autowired
     public RestMailServiceImpl(RestTemplate restTemplate) {
@@ -86,7 +88,7 @@ public class RestMailServiceImpl implements MailService {
         object.put("params", params);
 
         HttpEntity<String> formEntity = new HttpEntity<String>(object.toJSONString(), headers);
-        ResponseEntity<MailLog> responseEntity = restTemplate.postForEntity(MAIL_SEND_URL, formEntity, MailLog.class);
+        ResponseEntity<MailLog> responseEntity = restTemplate.postForEntity(MAIL_CONSOLE_HOST + MAIL_SEND_URL, formEntity, MailLog.class);
         return responseEntity.getBody();
     }
 
@@ -110,7 +112,7 @@ public class RestMailServiceImpl implements MailService {
         object.put("params", params);
 
         HttpEntity<String> formEntity = new HttpEntity<String>(object.toJSONString(), headers);
-        ResponseEntity<String> responseEntity = restTemplate.postForEntity(MAIL_SEND_MANY_URL, formEntity, String.class);
+        ResponseEntity<String> responseEntity = restTemplate.postForEntity(MAIL_CONSOLE_HOST + MAIL_SEND_MANY_URL, formEntity, String.class);
         List<MailLog> mailLogs = FastjsonUtils.fromJsonArray(responseEntity.getBody(), MailLog.class);
         return mailLogs;
     }

+ 7 - 5
src/main/java/com/uas/platform/b2c/common/base/service/impl/RestSmsServiceImpl.java

@@ -8,6 +8,7 @@ import com.uas.message.sms.domain.SmsLog;
 import com.uas.message.sms.service.SmsService;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
@@ -33,17 +34,18 @@ public class RestSmsServiceImpl implements SmsService {
     /**
      * 短信服务主机地址
      */
-    private static final String SMS_CONSOLE_HOST = "http://10.10.100.23:28029/";
+    @Value("#{sys.messageServiceIp ?: 'http://message.ubtob.com/'}")
+    private String SMS_CONSOLE_HOST;
 
     /**
      * 发送短信给单个人url
      */
-    private static final String SMS_SEND_URL = SMS_CONSOLE_HOST  + "sms/send";
+    private static final String SMS_SEND_URL = "sms/send";
 
     /**
      * 发送短信给多个人 url
      */
-    private static final String SMS_SEND_MANY_URL = SMS_CONSOLE_HOST + "sms/send/o2m";
+    private static final String SMS_SEND_MANY_URL = "sms/send/o2m";
 
     @Autowired
     public RestSmsServiceImpl(RestTemplate restTemplate) {
@@ -85,7 +87,7 @@ public class RestSmsServiceImpl implements SmsService {
         object.put("params", params);
 
         HttpEntity<String> formEntity = new HttpEntity<String>(object.toJSONString(), headers);
-        ResponseEntity<SmsLog> responseEntity = restTemplate.postForEntity(SMS_SEND_URL, formEntity, SmsLog.class);
+        ResponseEntity<SmsLog> responseEntity = restTemplate.postForEntity(SMS_CONSOLE_HOST + SMS_SEND_URL, formEntity, SmsLog.class);
         return responseEntity.getBody();
     }
 
@@ -109,7 +111,7 @@ public class RestSmsServiceImpl implements SmsService {
         object.put("params", params);
 
         HttpEntity<String> formEntity = new HttpEntity<String>(object.toJSONString(), headers);
-        ResponseEntity<String> responseEntity = restTemplate.postForEntity(SMS_SEND_MANY_URL, formEntity, String.class);
+        ResponseEntity<String> responseEntity = restTemplate.postForEntity(SMS_CONSOLE_HOST + SMS_SEND_MANY_URL, formEntity, String.class);
         List<SmsLog> mailLogs = FastjsonUtils.fromJsonArray(responseEntity.getBody(), SmsLog.class);
         return mailLogs;
     }

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

@@ -1,6 +1,8 @@
 package com.uas.platform.b2c.common.search.controller;
 
 import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.common.search.dao.SearchHistoryDao;
+import com.uas.platform.b2c.common.search.model.SearchHistory;
 import com.uas.platform.b2c.common.search.service.SearcherService;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.prod.commodity.service.GoodsService;
@@ -61,6 +63,9 @@ public class SearcherController {
 	@Autowired
 	private StockInOutHistService stockInOutHistService;
 
+	@Autowired
+	private SearchHistoryDao searchHistoryDao;
+
 	/**
 	 * 作搜索展示跳转
 	 * 
@@ -251,7 +256,7 @@ public class SearcherController {
 	 */
 	@RequestMapping(value = "/similarKeywords", method = RequestMethod.GET)
 	@ResponseBody
-	public List<String> getSimilarKeywords(String keyword) {
+	public Map<String,Object> getSimilarKeywords(String keyword) {
 		return searcherService.getSimilarKeywords(keyword);
 	}
 
@@ -343,4 +348,14 @@ public class SearcherController {
 		return result;
 	}
 
+	@RequestMapping(value = "/searchHistory", method = RequestMethod.GET)
+	@ResponseBody
+	public List<SearchHistory> getSearchHistory(HttpServletRequest request){
+		SystemSession.setUser((User)request.getSession().getAttribute("user"));
+		if (null == SystemSession.getUser()){
+			return null;
+		}else{
+			return searchHistoryDao.findByUserUUAndUserEnuuOrderBySearchTimeDesc(SystemSession.getUser().getUserUU(),SystemSession.getUser().getEnterprise() != null ?SystemSession.getUser().getEnterprise().getUu():null);
+		}
+	}
 }

+ 19 - 0
src/main/java/com/uas/platform/b2c/common/search/dao/SearchHistoryDao.java

@@ -0,0 +1,19 @@
+package com.uas.platform.b2c.common.search.dao;
+
+import com.uas.platform.b2c.common.search.model.SearchHistory;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface SearchHistoryDao extends JpaSpecificationExecutor<SearchHistory>,JpaRepository<SearchHistory,Long>{
+    /**
+     * 通过uuid和enuu查找记录
+     * @return
+     */
+    List<SearchHistory> findByUserUUAndUserEnuuOrderBySearchTimeDesc(Long userUU,Long userEnuu);
+
+    List<SearchHistory> findByKeywordAndUserUUAndUserEnuu(String keyword,Long userUU,Long userEnuu);
+}

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

@@ -0,0 +1,86 @@
+package com.uas.platform.b2c.common.search.model;
+
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 搜索记录
+ */
+@Entity
+@Table(name = "sec$searchHis")
+public class SearchHistory implements Serializable{
+
+    /**
+     * 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;
+
+    /**
+     * 关键词
+     */
+    @Column(name = "keyword")
+    private String keyword;
+
+    /**
+     * 搜索时间
+     */
+    @Column(name = "searchtime")
+    private Date searchTime;
+
+    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 getKeyword() {
+        return keyword;
+    }
+
+    public void setKeyword(String keyword) {
+        this.keyword = keyword;
+    }
+
+    public Date getSearchTime() {
+        return searchTime;
+    }
+
+    public void setSearchTime(Date searchTime) {
+        this.searchTime = searchTime;
+    }
+}

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

@@ -203,16 +203,27 @@ public class SearchServiceImpl implements SearchService{
     }
 
     @Override
-    public List<String> getSimilarKeywords(String keyword) throws SearchException {
+    public Map<String,Object> 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)) {
+        String strA = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.SIMILAR_KEYWORD_URL, String.class, map);
+        String strC = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.SIMILAR_COMPONENT_URL, String.class, map);
+        String strB = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.SIMILAR_BRAND_URL, String.class, map);
+        String strK = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.SIMILAR_KIND_URL, String.class, map);
+        if(StringUtils.isEmpty(strC) && StringUtils.isEmpty(strB) && StringUtils.isEmpty(strK)) {
             return null;
         }else {
             try {
-                List<String> reMap = FastjsonUtils.fromJson(str, List.class);
-                return reMap;
+                List<String> reMapA = FastjsonUtils.fromJson(strC, List.class);
+                List<String> reMapC = FastjsonUtils.fromJson(strC, List.class);
+                List<String> reMapB = FastjsonUtils.fromJson(strB, List.class);
+                List<String> reMapK = FastjsonUtils.fromJson(strK, List.class);
+                map.clear();
+                map.put("all",reMapA);
+                map.put("kind",reMapK);
+                map.put("componet",reMapC);
+                map.put("brand",reMapB);
+                return map;
             }catch (Exception e) {
                 e.printStackTrace();
                 return null;

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

@@ -33,7 +33,7 @@ public interface SearchService {
 
     List<Map<String, Object>> getBrandsBySearchComponent(String keyword, String kindId) throws SearchException;
 
-    List<String> getSimilarKeywords(String keyword) throws SearchException;
+    Map<String,Object> getSimilarKeywords(String keyword) throws SearchException;
 
     List<Map<String, Object>> getSimilarComponents(String keyword) throws SearchException;
 

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

@@ -58,7 +58,7 @@ public interface SearcherService {
 	 * @throws InterruptedException
 	 * @throws IOException
 	 */
-	public ModelMap searchComponentGoods(String keyword, PageParams page);
+	public ModelMap searchComponentGoods(String keyword, PageParams page , HttpServletRequest request);
     /**
      * 批次搜索数量统计
      *
@@ -104,7 +104,7 @@ public interface SearcherService {
 	 * @param keyword 关键词
 	 * @return 联想词
 	 */
-	public List<String> getSimilarKeywords(String keyword);
+	public Map<String,Object> getSimilarKeywords(String keyword);
 
 	/**
 	 * 根据输入的原厂型号获取联想词

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

@@ -1,8 +1,12 @@
 package com.uas.platform.b2c.common.search.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.common.search.dao.SearchHistoryDao;
+import com.uas.platform.b2c.common.search.model.SearchHistory;
 import com.uas.platform.b2c.common.search.rpc.service.SearchService;
 import com.uas.platform.b2c.common.search.service.SearcherService;
+import com.uas.platform.b2c.core.support.SystemSession;
 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;
@@ -53,6 +57,9 @@ public class SearcherServiceImpl implements SearcherService {
 	@Autowired
 	private BrandDao brandDao;
 
+	@Autowired
+	private SearchHistoryDao searchHistoryDao;
+
 	private Logger logger = LoggerFactory.getLogger(getClass());
 	private final DeviceResolver deviceResolver = new LiteDeviceResolver();
 
@@ -142,7 +149,28 @@ public class SearcherServiceImpl implements SearcherService {
 	 */
 	@SuppressWarnings("unchecked")
 	@Override
-	public ModelMap searchComponentGoods(String keyword, PageParams page) {
+	public ModelMap searchComponentGoods(String keyword, PageParams page , HttpServletRequest request) {
+		if (this.deviceResolver.resolveDevice(request).isMobile()) {
+			SystemSession.setUser((User)request.getSession().getAttribute("user"));
+			if (null != SystemSession.getUser() && null!= SystemSession.getUser().getUserUU()){
+				SearchHistory searchHistory = null;
+				List<SearchHistory> searchHistories = searchHistoryDao.findByKeywordAndUserUUAndUserEnuu(keyword,SystemSession.getUser().getUserUU(),SystemSession.getUser().getEnterprise() != null ?SystemSession.getUser().getEnterprise().getUu():null);
+				if (searchHistories.size()>0){
+					searchHistory = searchHistories.get(0);
+				}else {
+					searchHistory = new SearchHistory();
+				}
+				searchHistory.setKeyword(keyword);
+				searchHistory.setSearchTime(new Date(System.currentTimeMillis()));
+				searchHistory.setUserUU(SystemSession.getUser().getUserUU());
+				searchHistory.setUserEnuu(SystemSession.getUser().getEnterprise() != null ?SystemSession.getUser().getEnterprise().getUu():null);
+				searchHistoryDao.save(searchHistory);
+				searchHistories = searchHistoryDao.findByUserUUAndUserEnuuOrderBySearchTimeDesc(SystemSession.getUser().getUserUU(),SystemSession.getUser().getEnterprise() != null ?SystemSession.getUser().getEnterprise().getUu():null);
+				if (searchHistories.size()>10){
+					searchHistoryDao.delete(searchHistories.subList(10,searchHistories.size()));
+				}
+			}
+		}
 		ModelMap map = new ModelMap();
 		Map<String,Object> results = null;
 		//Map<String, Object> results = new HashMap<>();
@@ -279,15 +307,17 @@ public class SearcherServiceImpl implements SearcherService {
 	}
 
 	@Override
-	public List<String> getSimilarKeywords(String keyword) {
-		List<String> result = new ArrayList<>();
+	public Map<String,Object> getSimilarKeywords(String keyword) {
+		Map<String,Object> result = null;
 		try {
 			result = searchService.getSimilarKeywords(keyword);
 		} catch (SearchException e) {
 			throwSystemException(e);
 		}
-		if (result.size() > 8) {
-			result = result.subList(0,8);
+		for (Entry<String, Object> entry : result.entrySet()) {
+			if(((List)entry.getValue()).size()>8){
+				entry.setValue(((List)entry.getValue()).subList(0,8));
+			}
 		}
 		return result;
 	}

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

@@ -142,6 +142,12 @@ public class SysConf {
 	@Value("#{sys.searchUrl}")
 	private String searchUrl;
 
+	/**
+	 * 搜索的地址
+	 */
+	@Value("#{sys.searchUrl}")
+	private String messageServiceIp;
+
 	public Boolean getRebuildIndexesOnRefresh() {
 		return rebuildIndexesOnRefresh;
 	}
@@ -305,4 +311,12 @@ public class SysConf {
 		this.searchUrl = searchUrl;
 		return this;
 	}
+
+	public String getMessageServiceIp() {
+		return messageServiceIp;
+	}
+
+	public void setMessageServiceIp(String messageServiceIp) {
+		this.messageServiceIp = messageServiceIp;
+	}
 }

+ 0 - 28
src/main/java/com/uas/platform/b2c/prod/commodity/controller/GoodsController.java

@@ -22,7 +22,6 @@ 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;
@@ -649,31 +648,4 @@ 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);
-	}
 }

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

@@ -57,6 +57,7 @@ import com.uas.platform.core.persistence.criteria.SimpleExpression;
 import com.uas.platform.core.util.StringUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.MapUtils;
+import org.apache.log4j.Logger;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
@@ -179,6 +180,8 @@ public class GoodsServiceImpl implements GoodsService {
 	@Autowired
 	private OrderDetailService detailService;
 
+	private final Logger logger = Logger.getLogger(getClass());
+
 	@Autowired
 	public GoodsServiceImpl(KindService kindService, StoreInDao storeInDao, StoreInService storeInService, ProductStandardPutOnInfoDao productStandardPutOnInfoDao, ProductDao productDao, BrowsingHistoryService browsingHistoryService, RecommendProductService recommendProductService) {
 		this.kindService = kindService;
@@ -1852,6 +1855,8 @@ public class GoodsServiceImpl implements GoodsService {
 
 	@Override
 	public ResultMap offShelfGoodsByProvider(String batchCodes) {
+		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		logger.info(String.format("%s 商城测试下架时间记录1", dateFormat.format(new Date())));
 		if (StringUtils.isEmpty(batchCodes)) {
 			return new ResultMap(CodeType.NO_INFO.code(), "待下架批次号字符串不能为空");
 		}
@@ -1863,9 +1868,11 @@ public class GoodsServiceImpl implements GoodsService {
 		List<String> batchCodeList = new ArrayList<>();
 
 		String storeUuid = "";
-
+		logger.info(String.format("%s 商城测试下架时间记录2", dateFormat.format(new Date())));
 		for (String batchCode : batchCodeArr) {
+			logger.info(String.format("%s 商城测试下架时间记录 调用下架方法开始", dateFormat.format(new Date())));
 			ResultMap resultMap = offShelfOneGoodsByProvider(batchCode);
+			logger.info(String.format("%s 商城测试下架时间记录  调用下架方法结束", dateFormat.format(new Date())));
 			if (resultMap.isSuccess()) {
 				Goods goods = (Goods) resultMap.getData();
 				uuids.add(goods.getUuid());
@@ -1875,13 +1882,17 @@ public class GoodsServiceImpl implements GoodsService {
 			}
 		}
 		for (String uuid : uuids) {
+			logger.info(String.format("%s 商城测试下架时间记录 更新器件库存信息 开始", dateFormat.format(new Date())));
 			updateComponentTradeInfos(uuid);
+			logger.info(String.format("%s 商城测试下架时间记录 更新器件库存信息 结束", dateFormat.format(new Date())));
 		}
 
 		if (!StringUtils.isEmpty(storeUuid)) {
+			logger.info(String.format("%s 商城测试下架时间记录 更新推荐库存信息开始", dateFormat.format(new Date())));
 			List<String> list = Arrays.asList(batchCodeArr);
 			Set<String> batchCodeSet = new HashSet<>(list);
 			recommendProductService.deleteProductsWhenSellerUpdateReserve(storeUuid, batchCodeSet);
+			logger.info(String.format("%s 商城测试下架时间记录 更新推荐库存信息结束", dateFormat.format(new Date())));
 		}
 
 		if (batchCodeList.size() == 0) {
@@ -1898,6 +1909,8 @@ public class GoodsServiceImpl implements GoodsService {
 	 */
 	@Transactional
 	public ResultMap offShelfOneGoodsByProvider(String batchCode) {
+		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		logger.info(String.format("%s 商城测试下架时间记录 进入下架方法", dateFormat.format(new Date())));
 		if (StringUtils.isEmpty(batchCode)) {
 			return new ResultMap(CodeType.NO_INFO.code(), "待下架批次号不能为空");
 		}
@@ -1916,8 +1929,10 @@ public class GoodsServiceImpl implements GoodsService {
 		}
 		goods.setStatus(Status.REMOVED.value());
 
+		logger.info(String.format("%s 商城测试下架时间记录 转历史库存 开始", dateFormat.format(new Date())));
 		GoodsHistory goodsHist = goodsHistoryService.converTGoodsHist(goods,
 				GoodsHistory.OperateType.Down.getPhrase());
+		logger.info(String.format("%s 商城测试下架时间记录 转历史库存 结束", dateFormat.format(new Date())));
 		goodsHist.setMessage(goodsHist.getMessage() + "该批次下架");
 		goodsHistoryService.save(goodsHist);
 

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

@@ -30,8 +30,11 @@ import org.apache.commons.collections.CollectionUtils;
 import org.apache.poi.hssf.usermodel.HSSFDateUtil;
 import org.apache.poi.ss.usermodel.*;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DataAccessException;
 import org.springframework.data.domain.Page;
 import org.springframework.data.jpa.domain.Specification;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.StatementCallback;
 import org.springframework.stereotype.Service;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.StringUtils;
@@ -41,6 +44,9 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -76,6 +82,9 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 	@Autowired
 	private EnterpriseService enterpriseService;
 
+	@Autowired
+	private JdbcTemplate jdbcTemplate;
+
 	@Override
 	public ReleaseProductByBatch save(ReleaseProductByBatch releaseProductByBatch) {
 		return releaseProductByBatch;
@@ -802,7 +811,23 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 	@Override
 	public String publishByBatch(String batch) {
 		Enterprise enterprise = SystemSession.getUser().getEnterprise();
-		String num = releaseProductByBatchDao.callPublishByBatch(enterprise.getUu(), enterprise.getEnName(), batch);
+		final Object [] obj = new Object[]{enterprise.getUu(), enterprise.getEnName(), batch};
+		String sql = "/*#mycat:db_type=master*/ set @enuu = %s; set @enName = '%s'; set @batch = '%s'; call product_release_batch_publish(@enuu, @enName, @batch, @out)";
+		final String updateSql = String.format(sql, obj);
+		String num = jdbcTemplate.execute(new StatementCallback<String>() {
+
+			@Override
+			public String doInStatement(Statement stmt) throws SQLException, DataAccessException {
+				stmt.executeUpdate(updateSql);
+				stmt.execute("select @out");
+				ResultSet rs = stmt.getResultSet();
+				if (null != rs) {
+					rs.next();
+					return rs.getString(1);
+				}
+				return null;
+			}
+		});
 		if(!"0".equals(num)) {
 			List<Goods> goodsList = goodsDao.findByBatchid(batch);
 			Set<String> uuids = new HashSet<String>();

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

@@ -65,6 +65,17 @@ public class BrandController {
 		return brandService.getInitialSimpleInfo(keyword);
 	}
 
+	/**
+	 * 分页获取按字符串获取以此字符为首字母的品牌信息
+	 * @return map(首字母,超简易品牌信息)
+	 */
+	@RequestMapping(value = "/initial/first/{key}", method = RequestMethod.GET)
+	public Page<Brand> getInitialSimpleInfoByFirst(@PathVariable String key ,PageParams page , String keyword) {
+		if (StringUtils.isEmpty(key))
+			keyword = "A";
+		return brandService.getInitialSimpleInfoByFirst(key,page,keyword);
+	}
+
 	/**
 	 * 查找所有简单有效品牌信息
 	 * @param keyword 关键词

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

@@ -2,6 +2,9 @@ package com.uas.platform.b2c.prod.product.brand.dao;
 
 import java.util.List;
 
+import com.uas.platform.b2c.prod.product.brand.modal.BrandMostSimpleInfo;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Query;
@@ -67,4 +70,12 @@ public interface BrandDao extends JpaSpecificationExecutor<Brand>, JpaRepository
 	 */
 	@Query("select b from Brand b where upper(b.nameCn)=upper(:nameCn)")
 	public List<Brand> findByUpperNameCn(@Param("nameCn") String nameCn);
+
+	/**
+	 * 分页根据首字母获取品牌信息
+	 * @param initals
+	 * @return
+	 */
+	@Query(value = "select b from Brand b  where b.inital in :initals and (b.nameEn like %:keyword% or b.nameCn like %:keyword%)")
+	public Page<Brand> findInInitalsPage(@Param("initals") String[] initals ,@Param("keyword") String keyword, Pageable pageable);
 }

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

@@ -1,6 +1,8 @@
 package com.uas.platform.b2c.prod.product.brand.dao;
 
 import com.uas.platform.b2c.prod.product.brand.modal.BrandMostSimpleInfo;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Query;
@@ -25,6 +27,14 @@ public interface BrandMostSimpleInfoDao extends JpaSpecificationExecutor<BrandMo
     @Query(nativeQuery = true, value = "select * from product$brand where br_inital in :initals")
     public List<BrandMostSimpleInfo> findInInitals(@Param("initals") String[] initals);
 
+    /**
+     * 分页根据首字母获取品牌信息
+     * @param initals
+     * @return
+     */
+    @Query(value = "select b from BrandMostSimpleInfo b  where b.inital in :initals")
+    public Page<BrandMostSimpleInfo> findInInitalsPage(@Param("initals") String[] initals , Pageable pageable);
+
     /**
      * 根据批次号获取品牌信息
      * @param batchIds id批次号

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

@@ -5,6 +5,7 @@ import com.uas.platform.b2c.prod.product.brand.modal.BrandInfo;
 import com.uas.platform.b2c.prod.product.brand.modal.BrandMostSimpleInfo;
 import com.uas.platform.b2c.prod.product.brand.modal.BrandVersion;
 import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
 import org.springframework.data.domain.Page;
 
 import java.util.List;
@@ -54,6 +55,13 @@ public interface BrandService {
 	 */
 	public Map<String, List<BrandMostSimpleInfo>> getInitialSimpleInfo(String keyword);
 
+	/**
+	 * 获取按字符串获取以此字符串为首字母的品牌信息
+	 * @param keyword 关键词
+	 * @return 品牌简易信息
+	 */
+	public Page<Brand> getInitialSimpleInfoByFirst(String key , PageParams params, String keyword);
+
 	/**
 	 * 获取BrandInfo分页数据
 	 * @param keyword 关键词

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

@@ -12,6 +12,7 @@ import com.uas.platform.b2c.prod.product.brand.service.BrandService;
 import com.uas.platform.b2c.prod.product.component.dao.ComponentDao;
 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.persistence.criteria.CriterionExpression;
 import com.uas.platform.core.persistence.criteria.CriterionExpression.Operator;
 import com.uas.platform.core.persistence.criteria.LogicalExpression;
@@ -20,6 +21,7 @@ import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
@@ -117,6 +119,12 @@ public class BrandServiceImpl implements BrandService {
 		return map;
 	}
 
+	@Override
+	public Page<Brand> getInitialSimpleInfoByFirst(String key , PageParams params ,String keyword) {
+		Pageable pageable = new PageInfo(params);
+		return brandDao.findInInitalsPage(new String[]{key},keyword, pageable);
+	}
+
 	// 判断一个字符串是否含有中文
 	public static boolean isChinese(String str) {
 		if (str == null) return false;

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/product/common/CommonTask.java

@@ -27,7 +27,7 @@ public class CommonTask {
     }
 
     public void updateCount() {
-        List<CommonCount> commonCounts = commonCountDao.findByStatusOrderByDetno((short) 1);
+        List<CommonCount> commonCounts = commonCountDao.findByStatus((short) 1);
         for (CommonCount commonCount : commonCounts) {
             commonCount.setCount(jdbcTemplate.queryForLong(commonCount.getSql()));
         }

+ 35 - 2
src/main/java/com/uas/platform/b2c/prod/product/common/api/CommonCountController.java

@@ -3,6 +3,9 @@ package com.uas.platform.b2c.prod.product.common.api;
 import com.uas.platform.b2c.prod.product.common.model.CommonCount;
 import com.uas.platform.b2c.prod.product.common.service.CommonCountService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.repository.query.Param;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
@@ -26,7 +29,37 @@ public class CommonCountController {
      * @return
      */
     @RequestMapping(method = RequestMethod.GET, params = "_status=actived")
-    public List<CommonCount> findActived() {
-        return commonCountService.findByStatus((short) 1);
+    public List<CommonCount> findActived(@Param("userFor") String usedFor) {
+        usedFor = StringUtils.isEmpty(usedFor) ? "b2c_index" : usedFor;
+        return commonCountService.findByStatus((short) 1, usedFor);
     }
+
+    /**
+     * 根据ID获取计数器
+     * @author suntg
+     * @date 2017年11月7日17:03:28
+     * @return
+     */
+    @RequestMapping(value ="/{id}", method = RequestMethod.GET)
+    public CommonCount findById(@PathVariable("id") Long id) {
+        CommonCount commonCount = commonCountService.findById(id);
+        if(commonCount == null)
+            throw new IllegalArgumentException("参数ID错误,数据不存在");
+        return commonCount;
+    }
+
+    /**
+     * 根据ID获取计数器的结果
+     * @author suntg
+     * @date 2017年11月7日17:03:34
+     * @return
+     */
+    @RequestMapping(value ="/{id}/count", method = RequestMethod.GET)
+    public Long findCountById(@PathVariable("id") Long id) {
+        CommonCount commonCount = commonCountService.findById(id);
+        if(commonCount == null)
+            throw new IllegalArgumentException("参数ID错误,数据不存在");
+        return commonCount.getCount();
+    }
+
 }

+ 9 - 2
src/main/java/com/uas/platform/b2c/prod/product/common/dao/CommonCountDao.java

@@ -14,9 +14,16 @@ import java.util.List;
 public interface CommonCountDao extends JpaSpecificationExecutor<CommonCount>,JpaRepository<CommonCount, Long>{
 
     /**
-     * 通过状态获取计数器
+     * 通过状态和应用获取计数器
      * @param status 状态
      * @return 计数器
      */
-    public List<CommonCount> findByStatusOrderByDetno(Short status);
+    public List<CommonCount> findByStatusAndUsedForOrderByDetno(Short status, String usedFor);
+
+    /**
+     * 通过状态获取计数器
+     * @param status
+     * @return
+     */
+    public List<CommonCount> findByStatus(Short status);
 }

+ 14 - 0
src/main/java/com/uas/platform/b2c/prod/product/common/model/CommonCount.java

@@ -48,6 +48,12 @@ public class CommonCount implements Serializable{
     @Column(name = "cc_count")
     private Long count;
 
+    /**
+     * 应用
+     */
+    @Column(name = "cc_usedfor")
+    private String usedFor;
+
     /**
      * 状态,是否激活(1:是;0:否)
      */
@@ -94,6 +100,14 @@ public class CommonCount implements Serializable{
         this.count = count;
     }
 
+    public String getUsedFor() {
+        return usedFor;
+    }
+
+    public void setUsedFor(String usedFor) {
+        this.usedFor = usedFor;
+    }
+
     public Short getStatus() {
         return status;
     }

+ 9 - 2
src/main/java/com/uas/platform/b2c/prod/product/common/service/CommonCountService.java

@@ -10,9 +10,16 @@ import java.util.List;
 public interface CommonCountService {
 
     /**
-     * 根据状态获取计数器
+     * 根据状态和用途获取计数器
      * @param status 状态
      * @return
      */
-    List<CommonCount> findByStatus(Short status);
+    List<CommonCount> findByStatus(Short status, String usedFor);
+
+    /**
+     * 根据ID获取计数器内容
+     * @param id
+     * @return
+     */
+    CommonCount findById(Long id);
 }

+ 7 - 2
src/main/java/com/uas/platform/b2c/prod/product/common/service/impl/CommonCountServiceImpl.java

@@ -18,11 +18,16 @@ public class CommonCountServiceImpl implements CommonCountService{
     private CommonCountDao commonCountDao;
 
     @Override
-    public List<CommonCount> findByStatus(Short status) {
-        List<CommonCount> commonCounts = commonCountDao.findByStatusOrderByDetno(status);
+    public List<CommonCount> findByStatus(Short status, String usedFor) {
+        List<CommonCount> commonCounts = commonCountDao.findByStatusAndUsedForOrderByDetno(status, usedFor);
         for (CommonCount commonCount : commonCounts) {
             commonCount.setSql(null);
         }
         return commonCounts;
     }
+
+    @Override
+    public CommonCount findById(Long id) {
+        return commonCountDao.findOne(id);
+    }
 }

+ 2 - 2
src/main/java/com/uas/platform/b2c/prod/product/component/api/ComponentController.java

@@ -247,8 +247,8 @@ public class ComponentController {
 	 * 搜索关键字的型号,插入库存
 	 */
 	@RequestMapping(value = "/search/compGoods", method = RequestMethod.GET)
-	public ModelMap getCompGoodsBySearch(PageParams params, String keyword) {
-		return componentService.getCompGoodsBySearch(params, keyword);
+	public ModelMap getCompGoodsBySearch(PageParams params, String keyword, HttpServletRequest request) {
+		return componentService.getCompGoodsBySearch(params, keyword, request);
 	}
 
 	/**

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

@@ -59,6 +59,12 @@ public class ComponentCrawl implements Serializable {
 	@Column(name = "cc_uuid")
 	private String uuid;
 
+	/**
+	 * 器件描述
+	 */
+	@Column(name = "cc_description", length = 4000)
+	private String description;
+
 	/**
 	 * 正式入库后版本号
 	 */
@@ -182,6 +188,14 @@ public class ComponentCrawl implements Serializable {
 		this.uuid = uuid;
 	}
 
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
 	public Short getVersion() {
 		return version;
 	}

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

@@ -10,6 +10,7 @@ import com.uas.platform.core.model.PageParams;
 import org.springframework.data.domain.Page;
 import org.springframework.ui.ModelMap;
 
+import javax.servlet.http.HttpServletRequest;
 import java.util.List;
 import java.util.Map;
 
@@ -186,7 +187,7 @@ public interface ComponentService {
 	 * @param keyword 关键词
 	 * @return 器件信息
 	 */
-	public ModelMap getCompGoodsBySearch(PageParams params, String keyword);
+	public ModelMap getCompGoodsBySearch(PageParams params, String keyword, HttpServletRequest request);
 
 	/**
 	 * 批量修改器件类目

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

@@ -48,6 +48,7 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
+import javax.servlet.http.HttpServletRequest;
 import java.util.*;
 
 @Service
@@ -447,14 +448,14 @@ public class ComponentServiceImpl implements ComponentService {
 	}
 
 	@Override
-	public ModelMap getCompGoodsBySearch(com.uas.platform.core.model.PageParams params, String keyword) {
+	public ModelMap getCompGoodsBySearch(com.uas.platform.core.model.PageParams params, String keyword , HttpServletRequest request) {
 		int page = params.getPage();
 		if (page > 100) {
 			page = 100;
 		}
 		params.setPage(page);
 
-		ModelMap map = searchServiceMap.searchComponentGoods(keyword, params);//.searchComponent(keyword, params);
+		ModelMap map = searchServiceMap.searchComponentGoods(keyword, params, request);//.searchComponent(keyword, params);
 		// 能让用户查看的只能是Constant.PAGEMAX * params.getCount(),防止爬虫
 		int total = ((Integer)map.get("total")).intValue();
 		int expose = total;

+ 33 - 12
src/main/java/com/uas/platform/b2c/trade/order/task/OrderTask.java

@@ -1,11 +1,13 @@
 package com.uas.platform.b2c.trade.order.task;
 
+import com.uas.message.mail.service.MailService;
 import com.uas.message.sms.service.SmsService;
 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.constant.SplitChar;
 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;
@@ -18,15 +20,16 @@ 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.apache.commons.collections.map.HashedMap;
 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;
+import java.util.Map;
 
 /**
  * 订单的一些自动任务
@@ -51,21 +54,23 @@ public class OrderTask {
 
     private final SmsService smsService;
 
+    private final MailService mailService;
+
     private static final UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
 
 	/**
 	 * Instantiates a new Order task.
-	 *
-	 * @param orderDao                the order dao
+	 *  @param orderDao                the order dao
 	 * @param orderService            the order service
-	 * @param tradeBasicPropertiesDao the trade basic properties dao
-	 * @param userDao                 the user dao
-	 * @param sysConf                 the sys conf
-	 * @param enterpriseDao           the enterprise dao
-	 * @param smsService              the sms service
-	 */
+     * @param tradeBasicPropertiesDao the trade basic properties dao
+     * @param userDao                 the user dao
+     * @param sysConf                 the sys conf
+     * @param enterpriseDao           the enterprise dao
+     * @param smsService              the sms service
+     * @param mailService
+     */
 	@Autowired
-    public OrderTask(OrderDao orderDao, OrderService orderService, TradeBasicPropertiesDao tradeBasicPropertiesDao, UserDao userDao, SysConf sysConf, EnterpriseDao enterpriseDao, SmsService smsService) {
+    public OrderTask(OrderDao orderDao, OrderService orderService, TradeBasicPropertiesDao tradeBasicPropertiesDao, UserDao userDao, SysConf sysConf, EnterpriseDao enterpriseDao, SmsService smsService, MailService mailService) {
         this.orderDao = orderDao;
         this.orderService = orderService;
         this.tradeBasicPropertiesDao = tradeBasicPropertiesDao;
@@ -73,12 +78,12 @@ public class OrderTask {
         this.sysConf = sysConf;
         this.enterpriseDao = enterpriseDao;
         this.smsService = smsService;
+        this.mailService = mailService;
     }
 
 	/**
 	 * 对超过收货时间的订单,自动确认收货
 	 */
-	@Transactional
     public void autoConfirmOrderRevice() {
         try {
             User user = null;
@@ -129,10 +134,26 @@ public class OrderTask {
             }
             if(ids.length() > 1) {
                 ids = ids.substring(1, ids.length() - 1);
-                orderService.ensureOrderAccept(ids);
+                String[] split = ids.split(SplitChar.HYPHEN);
+                for (String id : split) {
+                    try {
+                        orderService.ensureOrderAccept(id);
+                    }catch (Exception e) {
+                        Map<String, Object> map  = new HashedMap();
+                        map.put("title", "自动确认收货");
+                        map.put("error", e.toString());
+                        mailService.send("f7be38ea-8653-4d7c-9a3d-34c3cdd089a0", "yuj@usoftchina.com", map);
+                    }
+
+                }
+
             }
             logger.log("自动收货", "买家自动收货订单:" + ids);
         }catch (Exception e) {
+            Map<String, Object> map  = new HashedMap();
+            map.put("title", "自动确认收货");
+            map.put("error", e.toString());
+            mailService.send("f7be38ea-8653-4d7c-9a3d-34c3cdd089a0", "yuj@usoftchina.com", map);
         } finally {
         }
     }

+ 13 - 0
src/main/java/com/uas/platform/b2c/trade/presale/controller/CollectionController.java

@@ -109,6 +109,19 @@ public class CollectionController {
 		return "success";
 	}
 
+	/**
+	 * 批量删除指定的收藏信息 通过器件id
+	 *
+	 * @param ids 删除的ids
+	 * @return String
+	 */
+	@RequestMapping(value = "/delete/cmpId", method = RequestMethod.POST)
+	@ApiOperation(value = "批量删除指定的收藏信息", httpMethod = "POST")
+	public String deleteByCmpIds(@ApiParam(required = true, value = "id集合") @RequestBody List<Long> ids) {
+		collectionService.deleteByCmpIds(ids);
+		return "success";
+	}
+
 	/**
 	 * 清空收藏的信息
 	 *

+ 12 - 0
src/main/java/com/uas/platform/b2c/trade/presale/controller/StoreFocusController.java

@@ -62,6 +62,18 @@ public class StoreFocusController {
 		return storeFocusService.deleteByIds(ids);
 	}
 
+	/**
+	 * 单个/批量删除店铺关注记录 通过店铺id
+	 *
+	 * @param ids
+	 * @return String
+	 */
+	@RequestMapping(value = "/delete/storeId", method = RequestMethod.POST)
+	@ApiOperation(value = "单个/批量删除店铺关注记录", httpMethod = "POST")
+	public String deleteByStoreIds(@ApiParam(required = true, value = "id集合") @RequestBody List<Long> ids) {
+		return storeFocusService.deleteByStoreIds(ids);
+	}
+
 	/**
 	 * 分页获取指定uu号下的店铺关注信息
 	 *

+ 7 - 0
src/main/java/com/uas/platform/b2c/trade/presale/service/CollectionService.java

@@ -29,6 +29,13 @@ public interface CollectionService {
 	 */
 	String deleteByIds(List<Long> ids);
 
+	/**
+	 * 批量删除收藏信息 通过器件id
+	 * @param ids 删除的收藏ids
+	 * @return String 返回success
+	 */
+	String deleteByCmpIds(List<Long> ids);
+
 	/**
 	 * 2016年3月23日 下午3:29:14
 	 * 清空类型 清空收藏夹

+ 8 - 0
src/main/java/com/uas/platform/b2c/trade/presale/service/StoreFocusService.java

@@ -35,6 +35,14 @@ public interface StoreFocusService {
 	 */
 	String deleteByIds(List<Long> ids);
 
+	/**
+	 * 单个/批量删除店铺关注记录
+	 *
+	 * @param ids 要删除的ids
+	 * @return String 返回success
+	 */
+	String deleteByStoreIds(List<Long> ids);
+
 	/**
 	 * 分页获取指定uu号下的店铺关注信息
 	 * 

+ 17 - 0
src/main/java/com/uas/platform/b2c/trade/presale/service/impl/CollectionServiceImpl.java

@@ -54,6 +54,23 @@ public class CollectionServiceImpl implements CollectionService {
 		return "success";
 	}
 
+	@Override
+	public String deleteByCmpIds(List<Long> ids) {
+		Iterator<Long> it = ids.iterator();
+		int count = 0;
+		while (it.hasNext()) {
+			Long id = (Long) it.next();
+			List<Collection> c = collectionDao.findStoreByUseruuAndEnuuAndKindAndComponentid(SystemSession.getUser().getUserUU(),
+					SystemSession.getUser().getEnterprise().getUu(),2,id);
+			if (c.size()>0){
+				collectionDao.delete(c.get(0).getId());
+				count++;
+			}
+		}
+		System.out.println("删除的条数" + count);
+		return "success";
+	}
+
 	@Override
 	public String clear(int kind) {
 		int count = collectionDao.deleteByuseruuAndKindAndEnuu(SystemSession.getUser().getUserUU(), kind,

+ 17 - 0
src/main/java/com/uas/platform/b2c/trade/presale/service/impl/StoreFocusServiceImpl.java

@@ -65,6 +65,23 @@ public class StoreFocusServiceImpl implements StoreFocusService {
 		return "success";
 	}
 
+	@Override
+	public String deleteByStoreIds(List<Long> ids) {
+		Iterator<Long> it = ids.iterator();
+		int count = 0;
+		while (it.hasNext()) {
+			Long id = (Long) it.next();
+			List<StoreFocus> list = storeFocusDao.findStoreFocusByUseruuAndEnuuAndStoreid(
+					SystemSession.getUser().getUserUU(), SystemSession.getUser().getEnterprise().getUu(), id);
+			if (list.size()>0){
+				storeFocusDao.delete(list.get(0).getId());
+				count++;
+			}
+		}
+		System.out.println("删除的条数" + count);
+		return "success";
+	}
+
 	@Override
 	public Page<StoreFocus> getPageStoreFocus(final PageInfo info) {
 		if (SystemSession.getUser().getEnterprise() != null) {

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

@@ -1,6 +1,6 @@
 jdbc.driverClassName=com.mysql.jdbc.Driver
 #jdbc.url=jdbc:oracle:thin:@192.168.253.6:1521:orcl
-jdbc.url=jdbc:mysql://192.168.253.12:3306/mall_test_dev?characterEncoding=UTF-8
+jdbc.url=jdbc:mysql://192.168.253.12:3306/mall_test_dev?characterEncoding=UTF-8&allowMultiQueries=true&rewriteBatchedStatements=true
 jdbc.username=root
 jdbc.password=select111***
 jdbc.initialSize=1

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

@@ -34,6 +34,8 @@ recommendPort=20102
 uploadFileUrl = http://10.10.100.200:9999
 # search file
 searchUrl = http://10.10.100.191:8092
+# message ip
+messageServiceIp=http://message.ubtob.com/
 
 # 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

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

@@ -21,4 +21,5 @@ log4j.logger.com.uas = info, stdout, logfile
 #=========================================
 #=   spring framework log configuration  =
 #=========================================
-log4j.logger.org.springframework = error
+log4j.logger.org.springframework = error
+log4j.additivity.com.uas = false

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

@@ -3,7 +3,7 @@
 #jdbc.username=platform$b2b
 #jdbc.password=select*fromuu
 jdbc.driverClassName=com.mysql.jdbc.Driver
-jdbc.url=jdbc:mysql://10.10.0.208:8066/mall_prod?characterEncoding=UTF-8
+jdbc.url=jdbc:mysql://10.10.0.208:8066/mall_prod?characterEncoding=UTF-8&allowMultiQueries=true&rewriteBatchedStatements=true
 jdbc.username=sa
 jdbc.password=Select123!#%*(
 jdbc.initialSize=1

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

@@ -35,5 +35,9 @@ recommendPort=20100
 uploadFileUrl=http://10.10.0.254:20290
 # search file
 searchUrl=http://10.10.0.76:8081
+
+# message ip
+messageServiceIp=http://message.ubtob.com/
+
 # 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/test/jdbc.properties

@@ -1,6 +1,6 @@
 jdbc.driverClassName=com.mysql.jdbc.Driver
 #jdbc.url=jdbc:oracle:thin:@192.168.253.6:1521:orcl
-jdbc.url=jdbc:mysql://192.168.253.12:3306/mall_test_dev?characterEncoding=UTF-8
+jdbc.url=jdbc:mysql://192.168.253.12:3306/mall_test_dev?characterEncoding=UTF-8&allowMultiQueries=true&rewriteBatchedStatements=true
 jdbc.username=root
 jdbc.password=select111***
 jdbc.initialSize=1

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

@@ -35,5 +35,8 @@ uploadFileUrl = http://10.10.100.200:9999
 # search file
 searchUrl = http://10.10.100.191:8092
 
+# message ip
+messageServiceIp=http://message.ubtob.com/
+
 # 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

+ 7 - 3
src/main/webapp/WEB-INF/views/normal/proxyLogout.html

@@ -11,13 +11,17 @@
 </head>
 <body>
 <script type="text/javascript">
-	function proxyLogout(askUrl, retUrl) {
+	function proxyLogout(askUrl, retUrl, logoutUrl) {
 	    $.getJSON(askUrl + "?callback=?", function(d){
-	    	window.location.href = retUrl;
+            if (d.error) {
+                window.location.href = logoutUrl
+            } else {
+                window.location.href = retUrl && retUrl !== 'null' ? retUrl : '/'
+            }
 	    });
 	}
 	$.getJSON('logout/crossBefore', function(data){
-		proxyLogout(data.askUrl, data.returnUrl);
+		proxyLogout(data.askUrl, data.returnUrl ,data.logoutUrl);
 	});
 </script>
 <div align="center" style="margin-top: 180px;">

+ 7 - 0
src/main/webapp/resources/css/common.css

@@ -932,4 +932,11 @@ input:required:invalid, input:focus:invalid, textarea:required:invalid, textarea
 .edit-icon button.up:hover{
 	background: #5078cb;
 	color: #fff;
+}
+
+/* 去除数字输入框的上下箭头 */
+input::-webkit-outer-spin-button,
+input::-webkit-inner-spin-button {
+	-webkit-appearance: none !important;
+	margin: 0;
 }

+ 7 - 0
src/main/webapp/resources/css/common/common.css

@@ -99,4 +99,11 @@ img {
 }
 .ng-table-pagination .page-a:hover{
     background: #5078cb !important;
+}
+
+/* 去除数字输入框的上下箭头 */
+input::-webkit-outer-spin-button,
+input::-webkit-inner-spin-button {
+    -webkit-appearance: none !important;
+    margin: 0;
 }

+ 2 - 1
src/main/webapp/resources/js/common/services.js

@@ -203,7 +203,8 @@ define([ 'angular', 'common/utils', 'big'], function(angular, utils, Big) {
 				return logout;
 			},
             redirectSignin: function() {
-            	// 获取跳转登录的url
+				// window.location.href = '/SSRProxy/loginProxy';
+                // 获取跳转登录的url
             	$http.get(rootPath + '/login/page', {
             		params: {
             			returnUrl: window.location.href

+ 9 - 6
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_order_ctrl.js

@@ -158,10 +158,13 @@ define(['app/app'], function (app) {
 
 		var loadData = function() {
 			Order.getIndividualOrder($scope.param, function(data) {
-				$scope.AllOrderInfo = data;
-                if($scope.childStatus ==''){
-                    $scope.AllOrderInfo[$scope.status] = data.totalElements;
-                }
+                if (!$scope.startDate && !$scope.endDate && !$scope.keyword){
+                    $scope.AllOrderInfo = data;
+                    if($scope.childStatus ==''){
+                        $scope.AllOrderInfo[$scope.status] = data.totalElements;
+                    }
+				}
+                $scope.isSearch = false;
 				$scope.currenctOrders = data.content;
 				angular.forEach($scope.currenctOrders, function(data){
                     data.ensurePrice = Number(NumberService.toCeil(data.ensurePrice, 2));
@@ -414,9 +417,9 @@ define(['app/app'], function (app) {
 			$scope.param.page = 1;
 			$scope.param.status = getState();
 			$scope.param.keyword = $scope.keyword;
-
+            $scope.setChildStatus('','订单状态')
 			loadData();
-			getCounts();
+			//getCounts();
 		};
 
 		$scope.noticeShipConfirm = function () {

+ 24 - 17
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_order_ctrl.js

@@ -401,10 +401,12 @@ define(['app/app'], function (app) {
 
         // 获取各种状态订单的数量信息
         var getCounts = function () {
-            Purchase.getAllStatusCounts({storeType: $scope.storeType}, function (data) {
-                $scope.counts = angular.copy(data);
-                $scope.counts[$scope.status] = $scope.pageParams.totalElements;
-            });
+            if (!$scope.startDate && !$scope.endDate && !$scope.keyword){
+                Purchase.getAllStatusCounts({storeType: $scope.storeType}, function (data) {
+                    $scope.counts = angular.copy(data);
+                    $scope.counts[$scope.status] = $scope.pageParams.totalElements;
+                });
+            }
         };
         getCounts();
 
@@ -494,6 +496,7 @@ define(['app/app'], function (app) {
             $scope.orderTableParams.reload();
         };
 
+
         $scope.orderTableParams = new ngTableParams($scope.tableParams, {
             total: 0,
             getData: function ($defer, params) {
@@ -523,22 +526,25 @@ define(['app/app'], function (app) {
 
                 Purchase.getByStatusAndInternal(param, function (page) {
                     if (page) {
-                        if ($scope.childStatus ==''){
-                            if (page.content) {
-                                angular.forEach(page, function (value, key) {
-                                    if (key == 'all' || key == 'tobeconfirmed' || key == 'comfirmed' || key == 'inbound'
-                                        || key == 'tobepaid' || key == 'completed' || key == 'unavailable' || key == 'toBeReviewed') {
-                                        if(!$scope.counts) {
-                                            $scope.counts = {};
+                        if (!$scope.startDate && !$scope.endDate && !$scope.keyword) {
+                            if ($scope.childStatus == '') {
+                                if (page.content) {
+                                    angular.forEach(page, function (value, key) {
+                                        if (key == 'all' || key == 'tobeconfirmed' || key == 'comfirmed' || key == 'inbound'
+                                            || key == 'tobepaid' || key == 'completed' || key == 'unavailable' || key == 'toBeReviewed') {
+                                            if (!$scope.counts) {
+                                                $scope.counts = {};
+                                            }
+                                            $scope.counts[key] = value;
                                         }
-                                        $scope.counts[key] = value;
-                                    }
-                                    $scope.counts[$scope.status] = page.totalElements;
-                                });
-                            } else {
-                                $scope.counts = {};
+                                        $scope.counts[$scope.status] = page.totalElements;
+                                    });
+                                } else {
+                                    $scope.counts = {};
+                                }
                             }
                         }
+
                         $scope.purchases = page.content;
                         $scope.requestOver = 0;
                         angular.forEach($scope.purchases, function (order) {
@@ -801,6 +807,7 @@ define(['app/app'], function (app) {
                 $scope.endDate = null;
                 return;
             }
+            $scope.setChildStatus('','订单状态');
             $scope.orderTableParams.page(1);
             $scope.orderTableParams.reload();
         };

+ 5 - 1
src/main/webapp/resources/view/admin/trade/trade_invoicefromorder_detail.html

@@ -165,7 +165,11 @@
 		</div>
 		<div class="row-fluid">
 			<div class="span3">
-				<span>金额:</span>
+				<span>运费:</span>
+				<span class="text-inverse" ng-bind="invoiceFOrder.currencyName"></span>
+				<span class="text-inverse" ng-bind="invoiceFOrder.fare | formateNumber : 2 | currencySysmbol : invoiceFOrder.currency"></span>
+
+				<span style="margin-left: 20px;">合计:</span>
 				<span class="text-inverse" ng-bind="invoiceFOrder.currencyName"></span>
 				<span class="text-inverse" ng-bind="invoiceFOrder.ensurePrice | formateNumber : 2 | currencySysmbol : invoiceFOrder.currency"></span>
 			</div>

+ 7 - 2
src/main/webapp/resources/view/admin/trade/trade_invoicefrompurc_detail.html

@@ -174,9 +174,14 @@
 		</div>
 		<div class="row">
 			<div class="col-xs-3">
-				<span>金额:</span>
+				<span>运费:</span>
 				<span class="text-inverse" ng-bind="invoiceFPur.currencyName"></span>
-				<span class="text-inverse" ng-bind="invoiceFPur.price | formateNumber : 2"></span>
+				<span class="text-inverse" ng-bind="invoiceFPur.fare || 0 | formateNumber : 2"></span>
+			</div>
+			<div class="col-xs-3">
+				<span>合计:</span>
+				<span class="text-inverse" ng-bind="invoiceFPur.currencyName"></span>
+				<span class="text-inverse" ng-bind="invoiceFPur.ensurePrice | formateNumber : 2"></span>
 			</div>
 		</div>
 	</div>

+ 5 - 1
src/main/webapp/resources/view/admin/trade/trade_order_detail.html

@@ -351,7 +351,11 @@
 		</div>
 		<div class="row-fluid">
 			<div class="col-md-3">
-				<span>金额:</span> <a class="text-inverse"><span ng-bind="orderDetailInfo.currency"></span>&nbsp;<span ng-bind="orderDetailInfo.price | number:2"></span>
+				<span>运费:</span> <a class="text-inverse"><span ng-bind="orderDetailInfo.currency"></span>&nbsp;<span ng-bind="orderDetailInfo.fare || 0 | number:2"></span>
+			</a>
+			</div>
+			<div class="col-md-3">
+				<span>总计:</span> <a class="text-inverse"><span ng-bind="orderDetailInfo.currency"></span>&nbsp;<span ng-bind="orderDetailInfo.ensurePrice | number:2"></span>
 				</a>
 			</div>
 		</div>

+ 7 - 2
src/main/webapp/resources/view/admin/trade/trade_purchase_detail.html

@@ -211,9 +211,14 @@
 		</div>
 		<div class="row-fluid col-md-9">
 			<div class="col-md-4">
-				<span>金额:</span>
+				<span>运费:</span>
 				<span ng-bind="purchaseDetailInfo.currency" class="text-inverse"></span>
-				<span ng-bind="purchaseDetailInfo.price | number:2" class="text-inverse"></span>
+				<span ng-bind="purchaseDetailInfo.fare || 0 | number:2" class="text-inverse"></span>
+			</div>
+			<div class="col-md-4">
+				<span>总计:</span>
+				<span ng-bind="purchaseDetailInfo.currency" class="text-inverse"></span>
+				<span ng-bind="purchaseDetailInfo.ensurePrice | number:2" class="text-inverse"></span>
 			</div>
 		</div>
 	</div>		

+ 3 - 3
src/main/webapp/resources/view/usercenter/forstore/buyer_invoice.html

@@ -553,14 +553,14 @@
                     <div class="form-group"  ng-if="billType == 1205">
                         <label class="col-md-2 control-label"><b class="text-inverse">*</b>单位电话:</label>
                         <div class="form-input-line">
-                            <input type="text" class="form-control" ng-class="{'bg-fff8ee':!initFlag.initCompanyPhone&&form.companyPhone.$error.required, 'bg-fff':!form.companyPhone.$invalid}" ng-focus="form.companyPhone.$touched = false" ng-blur="form.companyPhone.$touched = true;initFlag.initCompanyPhone=false;" placeholder="区号和号码使用 '-' 隔开" name="companyPhone" ng-model="bill.companyPhone" ng-pattern="/^0\d{2,3}-[1-9]\d{6,7}$/" ng-maxlength="20" required="required">
+                            <input type="text" class="form-control" ng-class="{'bg-fff8ee':!initFlag.initCompanyPhone&&form.companyPhone.$error.required, 'bg-fff':!initFlag.initCompanyPhone&&!form.companyPhone.$invalid}" ng-focus="form.companyPhone.$touched = false" ng-blur="form.companyPhone.$touched = true;initFlag.initCompanyPhone=false;" placeholder="区号和号码使用 '-' 隔开" name="companyPhone" ng-model="bill.companyPhone" ng-pattern="/^0\d{2,3}-[1-9]\d{6,7}$/" ng-maxlength="20" required="required">
                         </div>
                         <div class="text-inverse error col-md-3" ng-show="form.companyPhone.$touched&&form.companyPhone.$invalid" ng-bind="form.companyPhone.$error.required?'请填写单位电话':form.companyPhone.$error.maxlength?'请勿超过20个字符':'请填写正确的电话号码,用-隔开'"></div>
                     </div>
                     <div class="form-group"  ng-if="billType == 1205">
                         <label class="col-md-2 control-label"><b class="text-inverse">*</b>税务登记号:</label>
                         <div class="form-input-line">
-                            <input type="text" class="form-control" ng-class="{'bg-fff8ee':!initFlag.initCompanyTaxNum&&form.companyTaxNum.$error.required, 'bg-fff':!form.companyTaxNum.$invalid}" ng-model="bill.companyTaxNumber" ng-focus="form.companyTaxNum.$touched = false" ng-blur="form.companyTaxNum.$touched = true; initFlag.initCompanyTaxNum = false;" name="companyTaxNum" required="true" ng-maxlength="20" ng-minlength="15" ng-pattern="/^[0-9a-zA-Z]+$/" placeholder="请输入税务登记号">
+                            <input type="text" class="form-control" ng-class="{'bg-fff8ee':!initFlag.initCompanyTaxNum&&form.companyTaxNum.$error.required, 'bg-fff':!initFlag.initCompanyTaxNum&&!form.companyTaxNum.$invalid}" ng-model="bill.companyTaxNumber" ng-focus="form.companyTaxNum.$touched = false" ng-blur="form.companyTaxNum.$touched = true; initFlag.initCompanyTaxNum = false;" name="companyTaxNum" required="true" ng-maxlength="20" ng-minlength="15" ng-pattern="/^[0-9a-zA-Z]+$/" placeholder="请输入税务登记号">
                         </div>
                         <div class="text-inverse error col-md-3" ng-show="form.companyTaxNum.$touched&&(form.companyTaxNum.$invalid)" ng-bind="form.companyTaxNum.$error.required?'请填写税务登记号':'请填写15-20位数字或字母'"></div>
                     </div>
@@ -600,7 +600,7 @@
                     <div class="form-group">
                         <label class="col-md-2 control-label"><b class="text-inverse">*</b>联系电话:</label>
                         <div class="form-input-line">
-                            <input type="text" class="form-control" ng-class="{'bg-fff8ee':!initFlag.initTelephone&&form.billTel.$error.required, 'bg-fff':!form.billTel.$invalid||!form.billTel.$touched}" ng-model="bill.telephone" ng-focus="form.billTel.$touched = false" ng-blur="form.billTel.$touched = true; initFlag.initTelephone=false;" name="billTel"
+                            <input type="text" class="form-control" ng-class="{'bg-fff8ee':!initFlag.initTelephone&&form.billTel.$error.required, 'bg-fff':!initFlag.initTelephone&&(!form.billTel.$invalid||!form.billTel.$touched)}" ng-model="bill.telephone" ng-focus="form.billTel.$touched = false" ng-blur="form.billTel.$touched = true; initFlag.initTelephone=false;" name="billTel"
                                    ng-pattern="/^[0-9]*$/" ng-minlength="8" ng-maxlength="11" required="required" placeholder="请输入联系电话">
                         </div>
                         <div class="text-inverse error col-md-3" ng-show="form.billTel.$touched&&form.billTel.$invalid" ng-bind="form.billTel.$error.required?'请填写联系电话':'请输入8-11位数字'"></div>

+ 2 - 3
src/main/webapp/resources/view/usercenter/forstore/buyer_order.html

@@ -664,7 +664,7 @@
 							<a ng-if="status == 'success' || status == 'all' || status == 'tobecomment'" ng-click="setChildStatus('520','交易完成')" title="">交易完成</a>
 							<a ng-if="status == 'success' || status == 'all'" ng-click="setChildStatus('405','交易关闭')" title="">交易关闭</a>
 							<a ng-if="status == 'all'" ng-click="setChildStatus('602-603-315-604-605-606','已取消')" title="">已取消</a>
-							<a ng-if="status == 'success' || status == 'all'" ng-click="setChildStatus('521','待评价')" title="">待评价</a>
+							<a ng-if="status == 'success' || status == 'all'" ng-click="toggleStatus('tobecomment')" title="">待评价</a>
 						</div>
 					</span>
 					<span>交易操作</span>
@@ -740,7 +740,6 @@
 								<a href="user#/order/detail/{{order.orderid | EncryptionFilter}}" class="oder_d action-link" style="display: block;" target="_blank">订单详情</a>
 								<a class="action-link" href="user#/buyerQueryLogistics/{{order.orderid | EncryptionFilter}}" ng-if="order.status == 404 || order.status == 520 || order.status == 405 || order.status == 521" style="display: block;" target="_blank">查看物流</a>
 
-								<a class="action-link" href="user#/buyerQueryLogistics/{{order.orderid | EncryptionFilter}}" ng-if="order.status == 404" style="display: block;" target="_blank">查看物流</a>
 								<a ng-if="order.isEachRate && (order.rateStatus == 523 || order.rateStatus == 522)" class="oder_d action-link" target="_blank" href="user#/rate/showRate/{{order.orderid | EncryptionFilter}}" style="display: block;">
                                   双方已评
                               	</a>
@@ -829,7 +828,7 @@
 						</li>
 					</ul>
 					<div class="page-go-block">
-						<input class="page-number" type="text" ng-model="param.currentPage" ng-keydown="listenEnter()"/>
+						<input class="page-number" type="number" ng-model="param.currentPage" ng-keydown="listenEnter()"/>
 						<a class="page-a" ng-click="setPage('page', param.currentPage)" href="">GO</a>
 					</div>
 				</div>

+ 2 - 2
src/main/webapp/resources/view/usercenter/forstore/order_detail.html

@@ -569,13 +569,13 @@
 					<b>发票抬头:</b>
 					<span ng-bind="order.invoiceInfo.head || '空'"></span>
 				</p>
-				<p>
+				<p ng-if="order.invoicetype == 1205">
 					<b>单位地址:</b>
 					<span ng-bind="order.invoiceInfo.companyAddress || '空'"></span>
 				</p>
 				<p ng-if="order.invoicetype == 1205">
 					<b>单位电话:</b>
-					<span ng-bind="order.invoiceInfo.landlineNumber || '空'">0755-58956655</span>
+					<span ng-bind="order.invoiceInfo.companyPhone || '空'">0755-58956655</span>
 				</p>
 				<p ng-if="order.invoicetype == 1205">
 					<b>税务登记号:</b>

+ 2 - 2
src/main/webapp/resources/view/vendor/forstore/vendor_order.html

@@ -1169,7 +1169,7 @@
                                 <a class="order-operation" href="javascript:void(0)" ng-if="(purchase.status == 502 || purchase.status == 406)&&(purchase.uasPurcid == null)" ng-click="toBeShiped(purchase)">点击发货</a>
 								<a ng-if="purchase.uasPurcid" style="text-decoration: none;color: #323232;">来源UAS</a>
                                 <!--<a class="order-operation" href="javascript:void(0)" ng-if="purchase.status == 404 && purchase.lgtId&&!purchase.uasPurcid" ng-click="toBeShiped(purchase)" style="position: relative;">修改物流</a>-->
-                                <a class="order-operation" href="javascript:void(0)" ng-if="purchase.status == 404 && purchase.lgtId&&!purchase.uasPurcid" ng-click="toBeShiped(purchase)" style="position: relative;">修改物流</a>
+                                <a class="order-operation" href="javascript:void(0)" ng-if="purchase.status == 404 &&!purchase.uasPurcid" ng-click="modifyLogistic(purchase)" style="position: relative;">修改物流</a>
 								<a class="order-operation" href="javascript:void(0)" ng-click="getModal(purchase,'addRate')" style="position: relative;" ng-if="[405,503,514,506,511,520].indexOf(purchase.status) != -1 && !purchase.isAfterRate && purchase.isFirstRate && requestOver==purchases.length">追加评价</a>
 								<a class="order-operation" href="javascript:void(0)" style="position: relative;" ng-click="getModal(purchase,'firstRate')" ng-if="[405,503,514,506,511,520].indexOf(purchase.status) != -1 && !purchase.isFirstRate && requestOver==purchases.length">评价</a>
 								<!--<div ng-if="purchase.status == 520" class="clock-mind">
@@ -1247,7 +1247,7 @@
 						</li>
 					</ul>
 					<div class="page-go-block">
-						<input class="page-number" type="text" ng-model="param.currentPage" ng-keydown="listenEnter()"/>
+						<input class="page-number" type="number" ng-model="param.currentPage" ng-keydown="listenEnter()"/>
 						<a class="page-a" ng-click="setPage('page', param.currentPage)" href="">GO</a>
 					</div>
 				</div>

+ 39 - 0
src/test/java/com/uas/platform/b2c/BaseJunitTest.java

@@ -0,0 +1,39 @@
+package com.uas.platform.b2c;
+
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.transaction.TransactionConfiguration;
+import org.springframework.test.context.web.WebAppConfiguration;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.context.WebApplicationContext;
+
+/**
+ * Spring MVC 测试基类,所有测试类继承自这个类就可以直接写单元测试
+ * @author stg
+ * @date 2017年11月8日16:48:18
+ */
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration("classpath:spring/context.xml")
+@WebAppConfiguration("")
+@Transactional
+@TransactionConfiguration(defaultRollback = true)
+public class BaseJunitTest {
+
+    @Autowired
+    protected WebApplicationContext wac;
+
+    protected MockMvc mockMvc;
+
+    /**
+     * 前置防范,配置MVCMock
+     */
+    @Before
+    public void setup() {
+        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
+    }
+}

+ 0 - 35
src/test/java/com/uas/platform/b2c/RegistForMall.java

@@ -1,35 +0,0 @@
-package com.uas.platform.b2c;
-
-import com.uas.platform.b2c.core.utils.FastjsonUtils;
-import org.apache.commons.collections.map.HashedMap;
-
-import java.util.ArrayList;
-import java.util.Map;
-
-public class RegistForMall {
-
-	public static void main(String args[]) throws Exception {
-//		UserSpaceDetail detail = new UserSpaceDetail();
-//		detail.setName("B2B公司研发测试数据-不要购买-wangyuchao");
-//		detail.setShortName("B2B公司");
-//		detail.setAdminName("余佳");
-//		detail.setAdminTel("15989329613");
-//		detail.setAdminEmail("yuj@usoftchina.com");
-//		detail.setBusinessCode("11122233344456789");
-//		detail.setRegisterDate(new Date().getTime());
-//		detail.setTel("15989329613");
-//		detail.setFax("11-2222222");
-//		String url = "http://113.105.74.135:8001/api/userspace";
-//		if (!StringUtils.isEmpty(url)) {
-//			ResponseWrap res = HttpUtil.doPost(url,
-//					new ModelMap("_operate", "registForMall").addAttribute("detail", JSON.toJSON(detail)));
-//			System.out.println(res.getContent());
-//			if (!res.isSuccess())
-//				throw new Exception(res.getContent());
-//		}
-		Map<String ,Object> map = new HashedMap();
-		map.put("OK", new Object());
-		System.out.println(FastjsonUtils.toJson(map));
-		System.out.println(new ArrayList<>());
-	}
-}

+ 27 - 0
src/test/java/com/uas/platform/b2c/common/account/UsageLogController.java

@@ -0,0 +1,27 @@
+package com.uas.platform.b2c.common.account;
+
+import com.uas.platform.b2c.BaseJunitTest;
+import org.junit.Test;
+
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+public class UsageLogController extends BaseJunitTest {
+
+
+    @Test
+    public void testGetByPage() throws Exception {
+        String result = mockMvc.perform((get("/log/usage"))).andExpect(status().isOk())
+                .andDo(print()).andReturn().getResponse().getContentAsString();
+        System.out.println("result: " + result);
+    }
+
+    @Test
+    public void testGetByUUAndPage() throws Exception {
+        String result = mockMvc.perform((get("/log/usage/1000001202"))).andExpect(status().isOk())
+                .andDo(print()).andReturn().getResponse().getContentAsString();
+        System.out.println("result: " + result);
+    }
+
+}

+ 28 - 0
src/test/java/com/uas/platform/b2c/common/base/RestMailService.java

@@ -0,0 +1,28 @@
+package com.uas.platform.b2c.common.base;
+
+import com.uas.message.mail.service.MailService;
+import com.uas.platform.b2c.BaseJunitTest;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.transaction.TransactionConfiguration;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class RestMailService extends BaseJunitTest {
+
+    @Autowired
+    private MailService restMailService;
+
+    @Test
+    public void testSend() {
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("serviceName", "测试邮件发送");
+        restMailService.send("774296f3-a260-4bb5-b4eb-6f01090dadf3", "suntg@usoftchina.com", params);
+    }
+
+}

+ 38 - 0
src/test/java/com/uas/platform/b2c/common/base/RestSmsService.java

@@ -0,0 +1,38 @@
+package com.uas.platform.b2c.common.base;
+
+import com.uas.message.mail.service.MailService;
+import com.uas.message.sms.service.SmsService;
+import com.uas.platform.b2c.BaseJunitTest;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.transaction.TransactionConfiguration;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+public class RestSmsService extends BaseJunitTest {
+
+    @Autowired
+    private SmsService smsService;
+
+    @Test
+    public void testSend() {
+        Object[] params = {"123456"};
+        smsService.send("c39973e7-e931-4a81-964a-e8fa52b7b2c9", "13266703535", params);
+    }
+
+    @Test
+    public void testSendAll() {
+        Object[] params = {"123456"};
+        Set<String> receivers = new HashSet<String>();
+        receivers.add("13266703535");
+        receivers.add("17688562777");
+        smsService.sendAll("c39973e7-e931-4a81-964a-e8fa52b7b2c9", receivers, params);
+    }
+}