Просмотр исходного кода

Merge branch 'feature-yc-201813' into feature-pcb-wangyc-0420

wangyc 7 лет назад
Родитель
Сommit
2691f65573
81 измененных файлов с 1650 добавлено и 454 удалено
  1. BIN
      jpg
  2. 115 137
      src/main/java/com/uas/platform/b2c/common/account/controller/SecurityController.java
  3. 10 4
      src/main/java/com/uas/platform/b2c/common/account/controller/UserController.java
  4. 12 4
      src/main/java/com/uas/platform/b2c/common/account/dao/UserDao.java
  5. 1 1
      src/main/java/com/uas/platform/b2c/common/account/model/Enterprise.java
  6. 3 0
      src/main/java/com/uas/platform/b2c/common/account/model/User.java
  7. 10 1
      src/main/java/com/uas/platform/b2c/common/account/model/UserInfo.java
  8. 23 0
      src/main/java/com/uas/platform/b2c/common/account/service/UserService.java
  9. 26 0
      src/main/java/com/uas/platform/b2c/common/account/service/impl/UserServiceImpl.java
  10. 2 1
      src/main/java/com/uas/platform/b2c/common/account/v2/service/EnterpriseService.java
  11. 1 1
      src/main/java/com/uas/platform/b2c/common/account/v2/service/UserService.java
  12. 3 7
      src/main/java/com/uas/platform/b2c/common/account/v2/service/impl/EnterpriseServiceImpl.java
  13. 5 5
      src/main/java/com/uas/platform/b2c/common/account/v2/service/impl/UserServiceImpl.java
  14. 1 0
      src/main/java/com/uas/platform/b2c/common/message/controller/InternalMessageController.java
  15. 5 6
      src/main/java/com/uas/platform/b2c/common/weixin/model/TemplateMessage.java
  16. 21 0
      src/main/java/com/uas/platform/b2c/common/weixin/model/base/AbstractParams.java
  17. 16 0
      src/main/java/com/uas/platform/b2c/common/weixin/model/base/WeChatConstant.java
  18. 93 0
      src/main/java/com/uas/platform/b2c/common/weixin/model/req/AuthCodeParams.java
  19. 81 0
      src/main/java/com/uas/platform/b2c/common/weixin/model/req/AuthTokenParams.java
  20. 69 0
      src/main/java/com/uas/platform/b2c/common/weixin/model/req/AuthUserParams.java
  21. 62 0
      src/main/java/com/uas/platform/b2c/common/weixin/model/req/RefreshAuthTokenParams.java
  22. 65 0
      src/main/java/com/uas/platform/b2c/common/weixin/model/req/WechatTemplateMsg.java
  23. 32 0
      src/main/java/com/uas/platform/b2c/common/weixin/model/resp/AccessToken.java
  24. 40 0
      src/main/java/com/uas/platform/b2c/common/weixin/model/resp/AuthAccessToken.java
  25. 102 0
      src/main/java/com/uas/platform/b2c/common/weixin/model/resp/AuthUserInfo.java
  26. 38 0
      src/main/java/com/uas/platform/b2c/common/weixin/model/resp/TemplateMsgResult.java
  27. 87 85
      src/main/java/com/uas/platform/b2c/common/weixin/service/impl/WeChatServiceImpl.java
  28. 145 0
      src/main/java/com/uas/platform/b2c/common/weixin/util/HttpReqUtil.java
  29. 11 1
      src/main/java/com/uas/platform/b2c/common/weixin/util/WeChatUtil.java
  30. 8 6
      src/main/java/com/uas/platform/b2c/fa/payment/service/impl/InstallmentServiceImpl.java
  31. 16 0
      src/main/java/com/uas/platform/b2c/prod/commodity/model/GoodsSimple.java
  32. 10 2
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java
  33. 16 0
      src/main/java/com/uas/platform/b2c/prod/product/component/modal/Component.java
  34. 15 0
      src/main/java/com/uas/platform/b2c/prod/product/component/modal/ComponentInfo.java
  35. 7 5
      src/main/java/com/uas/platform/b2c/prod/store/api/CommodityController.java
  36. 4 0
      src/main/java/com/uas/platform/b2c/prod/store/facade/impl/StoreInFacadeImpl.java
  37. 15 1
      src/main/java/com/uas/platform/b2c/prod/store/model/StoreIn.java
  38. 15 0
      src/main/java/com/uas/platform/b2c/trade/order/model/OrderDetail.java
  39. 16 0
      src/main/java/com/uas/platform/b2c/trade/order/model/PurchaseDetail.java
  40. 1 0
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderDetailServiceImpl.java
  41. 1 0
      src/main/java/com/uas/platform/b2c/trade/presale/controller/CollectionController.java
  42. 1 1
      src/main/java/com/uas/platform/b2c/trade/presale/facade/impl/CartFacadeImpl.java
  43. 14 1
      src/main/java/com/uas/platform/b2c/trade/presale/model/Cart.java
  44. 15 0
      src/main/java/com/uas/platform/b2c/trade/presale/model/Collection.java
  45. 15 0
      src/main/java/com/uas/platform/b2c/trade/presale/model/CollectionInfo.java
  46. 1 0
      src/main/java/com/uas/platform/b2c/trade/presale/service/impl/CartServiceImpl.java
  47. 28 30
      src/main/java/com/uas/platform/b2c/trade/seek/service/impl/SeekPurchaseBomServiceImpl.java
  48. 0 4
      src/main/java/com/uas/platform/b2c/trade/vendor/service/impl/VendorIntroductionServiceImpl.java
  49. BIN
      src/main/resources/jxls-tpl/trade/seekPurchaseByBatch.xls
  50. 4 1
      src/main/webapp/resources/js/common/controllers/commonCtrls.js
  51. 5 1
      src/main/webapp/resources/js/common/query/storeInfo.js
  52. 1 1
      src/main/webapp/resources/js/usercenter/controllers/forstore/bom_detail_ctrl.js
  53. 1 0
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_cart_ctrl.js
  54. 8 8
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_order_ctrl.js
  55. 1 1
      src/main/webapp/resources/js/usercenter/controllers/forstore/messagePersonalCtrl.js
  56. 54 39
      src/main/webapp/resources/js/usercenter/controllers/forstore/seek_purchase_ctrl.js
  57. 24 13
      src/main/webapp/resources/js/vendor/app.js
  58. 1 1
      src/main/webapp/resources/js/vendor/controllers/forstore/messagePersonalCtrl.js
  59. 1 1
      src/main/webapp/resources/js/vendor/controllers/forstore/purchase_detail.js
  60. 23 14
      src/main/webapp/resources/js/vendor/controllers/forstore/seek_purchase_ctrl.js
  61. 8 8
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_order_ctrl.js
  62. 7 4
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_store_maintain_ctrl.js
  63. 20 12
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_upload_ctrl.js
  64. 2 1
      src/main/webapp/resources/view/usercenter/componentStore.html
  65. 2 1
      src/main/webapp/resources/view/usercenter/forstore/buyer_cart.html
  66. 5 2
      src/main/webapp/resources/view/usercenter/forstore/buyer_order.html
  67. 4 1
      src/main/webapp/resources/view/usercenter/forstore/order_detail.html
  68. 3 1
      src/main/webapp/resources/view/usercenter/forstore/order_pay.html
  69. 6 6
      src/main/webapp/resources/view/usercenter/forstore/seekPurchase.html
  70. 1 1
      src/main/webapp/resources/view/vendor/forstore/purchaseOffer.html
  71. 11 8
      src/main/webapp/resources/view/vendor/forstore/purchase_detail.html
  72. 113 5
      src/main/webapp/resources/view/vendor/forstore/seekPurchase.html
  73. 2 2
      src/main/webapp/resources/view/vendor/forstore/vendor_account_management.html
  74. 3 2
      src/main/webapp/resources/view/vendor/forstore/vendor_material.html
  75. 2 1
      src/main/webapp/resources/view/vendor/forstore/vendor_material_person.html
  76. 1 0
      src/main/webapp/resources/view/vendor/forstore/vendor_onSale.html
  77. 2 2
      src/main/webapp/resources/view/vendor/forstore/vendor_order.html
  78. 43 7
      src/main/webapp/resources/view/vendor/forstore/vendor_store_maintain.html
  79. 1 0
      src/main/webapp/resources/view/vendor/forstore/vendor_undercarriage.html
  80. 9 2
      src/main/webapp/resources/view/vendor/forstore/vendor_upload.html
  81. 5 5
      src/main/webapp/resources/view/vendor/left_nav.html

+ 115 - 137
src/main/java/com/uas/platform/b2c/common/account/controller/SecurityController.java

@@ -1,9 +1,6 @@
 package com.uas.platform.b2c.common.account.controller;
 
 import com.alibaba.fastjson.JSON;
-import com.uas.account.entity.UserSpace;
-import com.uas.account.entity.UserSpaceDetail;
-import com.uas.account.entity.UserView;
 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.dao.UserLoginTimeDao;
@@ -24,6 +21,7 @@ import com.uas.sso.SSOHelper;
 import com.uas.sso.SSOToken;
 import com.uas.sso.entity.UserAccount;
 import com.uas.sso.entity.UserSpaceView;
+import com.uas.sso.entity.UserView;
 import com.uas.sso.util.AccountUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.log4j.Logger;
@@ -66,6 +64,8 @@ public class SecurityController {
 	@Autowired
 	private EnterpriseService enterpriseService;
 
+	@Autowired
+	private com.uas.platform.b2c.common.account.v2.service.UserService userAccountService;
 
 
 	@Autowired
@@ -351,9 +351,10 @@ public class SecurityController {
 	 */
 	@RequestMapping(value = "/newLogin/other", produces = {"application/javascript"})
 	@ResponseBody
-	public String afterCrossLogin(HttpServletRequest request, HttpServletResponse response, UserAccount userAccount, Integer maxage) {
+	public String afterCrossLogin(HttpServletRequest request, HttpServletResponse response, UserAccount userAccount, Integer maxage) throws Exception {
 		if (userAccount != null && userAccount.getMobile() != null) {
 			SSOToken tk = new SSOToken();
+			// 设置cookie
 			tk.setUid(userAccount.getMobile());
 			tk.setTime(System.currentTimeMillis());
 			tk.setData(JSON.toJSONString(userAccount));
@@ -362,75 +363,56 @@ public class SecurityController {
 			}
 			SSOHelper.setSSOCookie(request, response, tk, true);
 			response.setHeader("P3P","CP='IDCDSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT'");
-
 			response.setHeader("P3P","CP=\"CURaADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSPCOR\"");
-			User user = getUserByToken(tk);
-			User currentUser = null;
+
+//			User user = getUserByToken(tk);
+			User mallUser = new User();
 			if (userAccount.getMobile() != null) {
 				// UID表示所有系统公认的唯一标识,这里统一使用手机号
-				currentUser = userService.findUserByUserTel(userAccount.getMobile());
+				mallUser = userService.findUserByUserTelNoException(userAccount.getMobile());
 			} else if (userAccount.getUserUU() != null) {
 				// dialectUID表示client系统自己的唯一标识,比如user_uu,手机号没设置的情况下使用
-				currentUser = userService.findUserByUserUU(userAccount.getUserUU());
+				mallUser = userService.findUserByUserUUNoException(userAccount.getUserUU());
 			} else {
 				logger.error(String.format("invalid user %s, please set uid or dialectUID", userAccount.getVipName()));
 			}
-			if (userAccount.getLastLoginTime() != null) {
-				currentUser.setLastLoginTime(userAccount.getLastLoginTime().getTime());
+
+			// 企业判断
+			Enterprise enterprise = new Enterprise();
+			if (userAccount.getSpaceUU() != null) {
+				enterprise = enterpriseDao.findByUu(userAccount.getSpaceUU());
+				// 判断商城是否存在当前企业,若存在则设置当前企业即可,若不存在则需新建一个企业后进行设置
+				if (enterprise == null) {
+					// 从账户中心获取当前企业信息尽心保存
+					UserSpaceView userSpaceView = AccountUtils.findBySpaceUU(userAccount.getSpaceUU());
+					if (userSpaceView != null) {
+						enterprise = enterpriseService.update(userSpaceView);
+					}
+				}
 			}
-			if (currentUser != null) {
-				userDao.save(currentUser);
+			// 没用用户
+			if (mallUser == null) {
+				UserView userView = AccountUtils.findByUserUU(userAccount.getUserUU());
+				mallUser = userAccountService.save(userView);
 			}
-			if (user != null) {
-				/*if (!user.getUserPwd().equals(FlexJsonUtils.fromJson(tk.getData(), com.uas.account.entity.User.class).getPassword())){
-					return "successCallback({success:'0'})";
-				}*/
-				user.setIp(AgentUtils.getIp(request));
-				request.getSession().setAttribute("user", user);
-                SystemSession.setUser(user);
-				log(request, user);
+			if (enterprise != null && !mallUser.getEnterprises().contains(enterprise)) {
+//				if (!mallUser.getUserUU().equals(enterprise.getEnAdminuu())) {
+					mallUser.getEnterprises().add(enterprise);
+//				}
 			}
-
-			return "successCallback({success:'1'})";
-		}
-		return "successCallback({success:'0'})";
-	}
-
-
-
-	/**
-	 * 其他地点登录后 同步登录状态
-	 * @param request
-	 * @param response
-	 */
-	@RequestMapping(value = "/login/other")
-	@ResponseBody
-	public String afterCrossOldLogin(HttpServletRequest request, HttpServletResponse response, UserView userView, Integer maxage) {
-		String callback =request.getParameter("jsoncallback");
-		response.setContentType("text/html;charset=UTF-8");
-		if (userView != null && userView.getUid() != null) {
-			SSOToken tk = new SSOToken();
-			tk.setUid(userView.getUid());
-			tk.setTime(System.currentTimeMillis());
-			tk.setData(JSON.toJSONString(userView));
-			if (null != maxage) {
-				request.setAttribute("sso_cookie_maxage", maxage);
+			// 最后一次登录时间
+			Date lastLoginTime = userAccount.getLastLoginTime();
+			if (lastLoginTime != null) {
+				mallUser.setLastLoginTime(userAccount.getLastLoginTime().getTime());
 			}
-			SSOHelper.setSSOCookie(request, response, tk, true);
-			response.setHeader("P3P","CP='IDCDSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT'");
-
-			response.setHeader("P3P","CP=\"CURaADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSPCOR\"");
-			User user = getOldUserByToken(tk);
-			if (user != null) {
-				if (!user.getUserPwd().equals(FlexJsonUtils.fromJson(tk.getData(), com.uas.account.entity.User.class).getPassword())){
-					return "successCallback({success:'0'})";
-				}
-				user.setIp(AgentUtils.getIp(request));
-				request.getSession().setAttribute("user", user);
-				SystemSession.setUser(user);
-				log(request, user);
+			mallUser = userDao.save(mallUser);
+			mallUser.setEnterprise(enterprise);
+			if (mallUser != null) {
+				mallUser.setIp(AgentUtils.getIp(request));
+				request.getSession().setAttribute("user", mallUser);
+                SystemSession.setUser(mallUser);
+				log(request, mallUser);
 			}
-
 			return "successCallback({success:'1'})";
 		}
 		return "successCallback({success:'0'})";
@@ -485,7 +467,6 @@ public class SecurityController {
 				logger.error(String.format("invalid user %s, please set uid or dialectUID", tokenUser.getVipName()));
 			}
 			if (authedUser != null && authedUser.getEnterprises() != null) {
-
 				// 企业资料在client系统自己的唯一标识,比如en_uu
 				if (tokenUser.getSpaceUU() != null) {
 					// 如果企业不存在则更新该企业
@@ -544,82 +525,79 @@ public class SecurityController {
 		return authedUser;
 	}
 
-
-
-
-	private User getOldUserByToken(SSOToken token) {
-		User authedUser = null;
-		if (token.getData() != null) {
-			com.uas.account.entity.User tokenUser = FlexJsonUtils.fromJson(token.getData(), com.uas.account.entity.User.class);
-			if (tokenUser.getUid() != null) {
-				// UID表示所有系统公认的唯一标识,这里统一使用手机号
-				authedUser = userService.findUserByUserTel(tokenUser.getUid());
-			} else if (tokenUser.getDialectUID() != null) {
-				// dialectUID表示client系统自己的唯一标识,比如user_uu,手机号没设置的情况下使用
-				authedUser = userService.findUserByUserUU(Long.parseLong(tokenUser.getDialectUID()));
-			} else {
-				logger.error(String.format("invalid user %s, please set uid or dialectUID", tokenUser.getName()));
-			}
-			if (authedUser != null && authedUser.getEnterprises() != null) {
-				// 企业资料在client系统自己的唯一标识,比如en_uu
-				if (tokenUser.getSpaceDialectUID() != null) {
-					// 如果企业不存在则更新该企业
-					for (Enterprise enterprise : authedUser.getEnterprises()) {
-						if (enterprise.getUu().equals(Long.parseLong(tokenUser.getSpaceDialectUID()))){
-							authedUser.setEnterprise(enterprise);
-						}
-					}
-					if (null == authedUser.getEnterprise()) {
-						Enterprise newEnterprise = enterpriseDao.findByUu(Long.parseLong(tokenUser.getSpaceDialectUID()));
-						if (null == newEnterprise) {
-							UserSpaceDetail userSpaceDetail = null;
-							try {
-								userSpaceDetail = com.uas.account.util.AccountUtils.findByBusinessCode(tokenUser.getSpaceUID());
-							} catch (Exception e) {
-								e.printStackTrace();
-							}
-							UserSpace userSpace = new UserSpace();
-							userSpace.setDialectUID(tokenUser.getSpaceDialectUID());
-							if (null != userSpaceDetail) {
-								enterpriseService.update(userSpace,userSpaceDetail);
-							}
-							newEnterprise = enterpriseDao.findByUu(Long.parseLong(tokenUser.getSpaceDialectUID()));
-							authedUser.setEnterprise(newEnterprise);
-						} else {
-							authedUser.getEnterprises().add(newEnterprise);
-							userDao.save(authedUser);
-							authedUser.setEnterprise(newEnterprise);
-						}
-					}
-				} else if (tokenUser.getSpaceUID() != null) {
-					for (Enterprise enterprise : authedUser.getEnterprises()) {
-						// 企业资料在所有系统公认的唯一标识,这里使用商业登记证号
-						if (tokenUser.getSpaceUID().equals(enterprise.getEnBussinessCode())) {
-							authedUser.setEnterprise(enterprise);
-							//保存登录时间
-							List<UserLoginTime> userLoginTimeList = userLoginTimeDao.findByUserUUAndEnUU(authedUser.getUserUU(),enterprise.getUu());
-							UserLoginTime userLoginTime;
-							if (!CollectionUtils.isEmpty(userLoginTimeList)){
-								userLoginTime = userLoginTimeList.get(0);
-							}else {
-								userLoginTime = new UserLoginTime();
-								userLoginTime.setUserUU(authedUser.getUserUU());
-								userLoginTime.setEnUU(enterprise.getUu());
-							}
-							userLoginTime.setLoginTime(System.currentTimeMillis());
-							try {
-								userLoginTimeDao.save(userLoginTime);
-							}catch (Exception e){
-								e.printStackTrace();
-							}
-							break;
-						}
-					}
-				}
-			}
-		}
-		return authedUser;
-	}
+//	private User getOldUserByToken(SSOToken token) {
+//		User authedUser = null;
+//		if (token.getData() != null) {
+//			com.uas.account.entity.User tokenUser = FlexJsonUtils.fromJson(token.getData(), com.uas.account.entity.User.class);
+//			if (tokenUser.getUid() != null) {
+//				// UID表示所有系统公认的唯一标识,这里统一使用手机号
+//				authedUser = userService.findUserByUserTel(tokenUser.getUid());
+//			} else if (tokenUser.getDialectUID() != null) {
+//				// dialectUID表示client系统自己的唯一标识,比如user_uu,手机号没设置的情况下使用
+//				authedUser = userService.findUserByUserUU(Long.parseLong(tokenUser.getDialectUID()));
+//			} else {
+//				logger.error(String.format("invalid user %s, please set uid or dialectUID", tokenUser.getName()));
+//			}
+//			if (authedUser != null && authedUser.getEnterprises() != null) {
+//				// 企业资料在client系统自己的唯一标识,比如en_uu
+//				if (tokenUser.getSpaceDialectUID() != null) {
+//					// 如果企业不存在则更新该企业
+//					for (Enterprise enterprise : authedUser.getEnterprises()) {
+//						if (enterprise.getUu().equals(Long.parseLong(tokenUser.getSpaceDialectUID()))){
+//							authedUser.setEnterprise(enterprise);
+//						}
+//					}
+//					if (null == authedUser.getEnterprise()) {
+//						Enterprise newEnterprise = enterpriseDao.findByUu(Long.parseLong(tokenUser.getSpaceDialectUID()));
+//						if (null == newEnterprise) {
+//							UserSpaceDetail userSpaceDetail = null;
+//							try {
+//								userSpaceDetail = com.uas.account.util.AccountUtils.findByBusinessCode(tokenUser.getSpaceUID());
+//							} catch (Exception e) {
+//								e.printStackTrace();
+//							}
+//							UserSpace userSpace = new UserSpace();
+//							userSpace.setDialectUID(tokenUser.getSpaceDialectUID());
+//							if (null != userSpaceDetail) {
+//								enterpriseService.update(userSpace,userSpaceDetail);
+//							}
+//							newEnterprise = enterpriseDao.findByUu(Long.parseLong(tokenUser.getSpaceDialectUID()));
+//							authedUser.setEnterprise(newEnterprise);
+//						} else {
+//							authedUser.getEnterprises().add(newEnterprise);
+//							userDao.save(authedUser);
+//							authedUser.setEnterprise(newEnterprise);
+//						}
+//					}
+//				} else if (tokenUser.getSpaceUID() != null) {
+//					for (Enterprise enterprise : authedUser.getEnterprises()) {
+//						// 企业资料在所有系统公认的唯一标识,这里使用商业登记证号
+//						if (tokenUser.getSpaceUID().equals(enterprise.getEnBussinessCode())) {
+//							authedUser.setEnterprise(enterprise);
+//							//保存登录时间
+//							List<UserLoginTime> userLoginTimeList = userLoginTimeDao.findByUserUUAndEnUU(authedUser.getUserUU(),enterprise.getUu());
+//							UserLoginTime userLoginTime;
+//							if (!CollectionUtils.isEmpty(userLoginTimeList)){
+//								userLoginTime = userLoginTimeList.get(0);
+//							}else {
+//								userLoginTime = new UserLoginTime();
+//								userLoginTime.setUserUU(authedUser.getUserUU());
+//								userLoginTime.setEnUU(enterprise.getUu());
+//							}
+//							userLoginTime.setLoginTime(System.currentTimeMillis());
+//							try {
+//								userLoginTimeDao.save(userLoginTime);
+//							}catch (Exception e){
+//								e.printStackTrace();
+//							}
+//							break;
+//						}
+//					}
+//				}
+//			}
+//		}
+//		return authedUser;
+//	}
 	/**
 	 * 记录登录日志
 	 * @param request

+ 10 - 4
src/main/java/com/uas/platform/b2c/common/account/controller/UserController.java

@@ -1,5 +1,6 @@
 package com.uas.platform.b2c.common.account.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.uas.message.mail.service.MailService;
 import com.uas.message.sms.service.SmsService;
 import com.uas.platform.b2c.common.account.model.User;
@@ -10,6 +11,7 @@ import com.uas.platform.b2c.common.account.service.UserQuestionService;
 import com.uas.platform.b2c.common.account.service.UserService;
 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.core.exception.IllegalOperatorException;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.PageInfo;
@@ -93,19 +95,23 @@ public class UserController {
 
 	/**
 	 * 设置头像路径
-	 * @param imageUrl
+	 * @param jsonStr
 	 * @return
 	 */
 	@RequestMapping(value = "/setImageUrl", method = RequestMethod.POST)
-	public User setUserImageUrl(@RequestBody String imageUrl) {
+	public User setUserImageUrl(@RequestBody String jsonStr) {
 		User user = SystemSession.getUser();
 		if (user == null) {
 			throw new IllegalOperatorException("您当前的账号不存在,或未登录!不能设置图像。");
 		}
-		user.setImageUrl(imageUrl);
+		if (!StringUtils.isEmpty(jsonStr)) {
+			JSONObject jsonObject = FastjsonUtils.parseObject(jsonStr);
+			user.setImageUrl(jsonObject.getString("imageUrl"));
+		}
 		assert logger != null;
 		logger.log("用户信息", "设置头像路径,UU:" + user.getUserUU());
-		return userService.save(user);
+		userService.updateImageUrl(user.getImageUrl());
+		return user;
 	}
 
 	@RequestMapping(value = "/getUserByUU", method = RequestMethod.GET)

+ 12 - 4
src/main/java/com/uas/platform/b2c/common/account/dao/UserDao.java

@@ -1,12 +1,10 @@
 package com.uas.platform.b2c.common.account.dao;
 
 import com.uas.platform.b2c.common.account.model.User;
-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.jpa.repository.QueryHints;
+import org.springframework.data.jpa.repository.*;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.persistence.QueryHint;
 import java.util.List;
@@ -138,4 +136,14 @@ public interface UserDao extends JpaSpecificationExecutor<User>, JpaRepository<U
 	 * @return
 	 */
 	public User findUsersByOpenId(String openId);
+
+	/**
+	 * 修改个人的头像
+	 * @param userUU
+	 * @param imageUrl
+	 */
+	@Transactional
+	@Modifying
+	@Query("update User u set u.imageUrl = :imageUrl where u.userUU = :userUU")
+	public void updateUserImageUrl(@Param("userUU") Long userUU, @Param("imageUrl") String imageUrl);
 }

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

@@ -192,7 +192,7 @@ public class Enterprise implements Serializable {
 	/**
 	 * 企业简介
 	 */
-	@Column(name = "en_description", length = 1000)
+	@Column(name = "en_description", length = 2500)
 	private String description;
 
 	public String getDescription() {

+ 3 - 0
src/main/java/com/uas/platform/b2c/common/account/model/User.java

@@ -395,6 +395,9 @@ public class User implements Serializable {
 	@JsonIgnore
 	@JSONField(serialize = false)
 	public Set<Enterprise> getEnterprises() {
+		if (enterprises == null) {
+			enterprises = new HashSet<>();
+		}
 		return enterprises;
 	}
 

+ 10 - 1
src/main/java/com/uas/platform/b2c/common/account/model/UserInfo.java

@@ -73,7 +73,7 @@ public class UserInfo {
 		this.lastLoginTime = user.getLastLoginTime();
 		this.secLevel = countSecLevel();
 		this.emailValidCode = user.getEmailValidCode();
-
+		this.imageUrl = user.getImageUrl();
 	}
 
 	private Short countSecLevel(){
@@ -139,6 +139,8 @@ public class UserInfo {
 
 	private Set<UserLoginTime> userLoginTimeSet;
 
+	private String imageUrl;
+
 	public Integer getEmailValidCode() {
 		return emailValidCode;
 	}
@@ -270,6 +272,13 @@ public class UserInfo {
 		this.sys = sys;
 	}
 
+	public String getImageUrl() {
+		return imageUrl;
+	}
+
+	public void setImageUrl(String imageUrl) {
+		this.imageUrl = imageUrl;
+	}
 }
 
 /**

+ 23 - 0
src/main/java/com/uas/platform/b2c/common/account/service/UserService.java

@@ -22,6 +22,14 @@ public interface UserService {
 	 */
 	User findUserByUserUU(Long userUU);
 
+	/**
+	 * 按uu取用户信息, 不抛出没有找到用户异常
+	 *
+	 * @param userUU
+	 * @return
+	 */
+	User findUserByUserUUNoException(Long userUU);
+
 	/**
 	 * 按uu取用户信息(不读取缓存)
 	 *
@@ -78,6 +86,15 @@ public interface UserService {
 	 */
 	User findUserByUserTel(String userTel);
 
+	/**
+	 * 按tel取用户信息, 不抛出没有找到用户异常
+	 *
+	 * @param userTel
+	 * @return
+	 */
+	User findUserByUserTelNoException(String userTel);
+
+
 	/**
 	 * 查找所有用户资料
 	 * 
@@ -177,4 +194,10 @@ public interface UserService {
 	 * @return
 	 */
 	User updateUserEmail(String tel, String newEmail, Long uu);
+
+	/**
+	 * 修改个人的头像
+	 * @param imageUrl 头像图片地址
+	 */
+	public void updateImageUrl(String imageUrl);
 }

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

@@ -125,6 +125,15 @@ public class UserServiceImpl implements UserService {
 		return users.get(0);
 	}
 
+	@Override
+	public User findUserByUserUUNoException(Long userUU) {
+		List<User> users = userDao.findUserByUserUU(userUU);
+		if (users.size() == 0) {
+			return null;
+		}
+		return users.get(0);
+	}
+
 	@Override
 	public User findUserPwdByUserUU(Long uu) {
 		List<User> users = userDao.findUserPwdByUserUU(uu);
@@ -148,6 +157,17 @@ public class UserServiceImpl implements UserService {
 			throw new UsernameNotFoundException("没有找到您的账号 " + tel);
 		return users.get(0);
 	}
+
+	@Override
+	public User findUserByUserTelNoException(String userTel) {
+		List<User> users = userDao.findUserByUserTel(userTel);
+		if (users.size() == 0) {
+			return null;
+		}
+		return users.get(0);
+	}
+
+
 	@Override
 	public boolean isTelUseable(String tel) {
 		return userDao.findUserByUserTel(tel).size() == 0;
@@ -643,4 +663,10 @@ public class UserServiceImpl implements UserService {
 		}*/
 		throw new IllegalOperatorException("数据更新失败...");
 	}
+
+	@Override
+	public void updateImageUrl(String imageUrl) {
+		Long userUU = SystemSession.getUser().getUserUU();
+		userDao.updateUserImageUrl(userUU, imageUrl);
+	}
 }

+ 2 - 1
src/main/java/com/uas/platform/b2c/common/account/v2/service/EnterpriseService.java

@@ -3,6 +3,7 @@ package com.uas.platform.b2c.common.account.v2.service;
 import com.uas.account.entity.UserSpace;
 import com.uas.account.entity.UserSpaceDetail;
 import com.uas.platform.b2c.common.account.model.ChangeAdminDetail;
+import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.sso.entity.UserSpaceView;
 
 public interface EnterpriseService {
@@ -12,7 +13,7 @@ public interface EnterpriseService {
      *
      * @param userSpaceView
      */
-    void update(UserSpaceView userSpaceView);
+    Enterprise update(UserSpaceView userSpaceView);
 
 
     /**

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

@@ -11,7 +11,7 @@ public interface UserService {
      *
      * @param user
      */
-    void save(UserView user);
+    User save(UserView user);
 
     /**
      * 删除用户

+ 3 - 7
src/main/java/com/uas/platform/b2c/common/account/v2/service/impl/EnterpriseServiceImpl.java

@@ -44,7 +44,7 @@ public class EnterpriseServiceImpl implements EnterpriseService {
     private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
 
     @Override
-    public void update(UserSpaceView userSpaceView) {
+    public Enterprise update(UserSpaceView userSpaceView) {
       /*  List<User> admins = userDao.findUserByUserUU(userSpaceView.getAdminUU());
         if (admins.size() != 1) {
             logger.log("更新企业信息出错,管理员有且仅有一个", "当前管理员数量:" + admins.size());
@@ -52,7 +52,7 @@ public class EnterpriseServiceImpl implements EnterpriseService {
         }*/
         if (null == userSpaceView.getSpaceUU() && "".equals(userSpaceView.getSpaceUU())){
             logger.log("更新企业信息出错,uu为空", "值为null", null,0L);
-            return;
+            return null;
         }
         Enterprise enterprise;
         Enterprise oldenterprise;
@@ -65,10 +65,8 @@ public class EnterpriseServiceImpl implements EnterpriseService {
             enterprise.setAccessSecret(userSpaceView.getAccessSecret());
         }
         enterprise.setEnAddress(userSpaceView.getRegAddress());
-        //enterprise.setEnArea(userSpaceView.get());
         enterprise.setEnCorporation(userSpaceView.getCorporation());
         enterprise.setEnBussinessCode(userSpaceView.getBusinessCode());
-       // enterprise.setEnFax(userSpaceView.);
         String enTel = enterprise.getEnTel();
         if (enTel == null) {
             enterprise.setEnTel(userSpaceView.getTelephone());
@@ -76,12 +74,9 @@ public class EnterpriseServiceImpl implements EnterpriseService {
                 enterprise.setEnTel(userSpaceView.getAdmin().getMobile());
             }
         }
-        //enterprise.setEnEmail(userSpaceView.get());
-        //enterprise.setEnIndustry(userSpaceView.());
         enterprise.setEnName(userSpaceView.getSpaceName());
         enterprise.setEnLogoUrl(userSpaceView.getBusinessCodeImage());
         enterprise.setUu(Long.valueOf(userSpaceView.getSpaceUU()));
-        //Long userUU = admins.get(0).getUserUU();
         if (userSpaceView.getAdminUU() != null) {
             enterprise.setEnAdminuu(userSpaceView.getAdminUU());
         }
@@ -110,6 +105,7 @@ public class EnterpriseServiceImpl implements EnterpriseService {
         } else {
             logger.log("新增企业信息", enterprise.getUu()+"time: " + sdf.format(new Date()), enterprise.getEnAdminuu(), 0L);
         }
+        return newEn;
     }
 
 

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

@@ -39,12 +39,12 @@ public class UserServiceImpl implements UserService {
     private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
 
     @Override
-    public void save(UserView user) {
+    public User save(UserView user) {
         User oldUser = userDao.findOne(user.getUserUU());
         if (null == oldUser) {
             oldUser = new User();
         }
-        oneSave(user, oldUser);
+        return oneSave(user, oldUser);
        /* com.uas.platform.b2c.common.account.model.User u = null;
         if (!StringUtils.isEmpty(user.getDialectUID())) {
             u = userDao.findOne(Long.parseLong(user.getDialectUID()));
@@ -65,7 +65,7 @@ public class UserServiceImpl implements UserService {
         oneSave(user,u);*/
     }
 
-    private void oneSave(UserView user, com.uas.platform.b2c.common.account.model.User u) {
+    private User oneSave(UserView user, com.uas.platform.b2c.common.account.model.User u) {
         Long userUU = user.getUserUU();
         if (userUU != null) {
             u.setUserUU(userUU);
@@ -111,7 +111,6 @@ public class UserServiceImpl implements UserService {
         Short emailValidCode = user.getEmailValidCode();
         if (emailValidCode != null) {
             u.setEmailValidCode((int) emailValidCode);
-
         }
         String idCard = user.getIdCard();
         if (!StringUtils.isEmpty(idCard)) {
@@ -134,12 +133,13 @@ public class UserServiceImpl implements UserService {
             u.setEnable((short) 1);
         }
         List<com.uas.platform.b2c.common.account.model.User> oldUsers = userDao.findUserByUserUU(u.getUserUU());
-        userDao.save(u);
+        u = userDao.save(u);
         if (oldUsers.size() > 0) {
             logger.log("更新用户信息", user.getMobile());
         } else {
             logger.log("新增用户信息", user.getMobile());
         }
+        return u;
     }
 
 

+ 1 - 0
src/main/java/com/uas/platform/b2c/common/message/controller/InternalMessageController.java

@@ -7,6 +7,7 @@ import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.message.service.InternalMessageService;
 import com.uas.platform.b2c.core.config.MessageConf;
 import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.fa.payment.utils.StringUtils;
 import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.util.HttpUtil;

+ 5 - 6
src/main/java/com/uas/platform/b2c/common/weixin/model/TemplateMessage.java

@@ -1,6 +1,5 @@
 package com.uas.platform.b2c.common.weixin.model;
 
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -16,7 +15,7 @@ public class TemplateMessage {
     /**
      * 模板Id
      */
-    private String templateId;
+    private String template_id;
 
     /**
      * 模板跳转地址
@@ -36,12 +35,12 @@ public class TemplateMessage {
         this.touser = touser;
     }
 
-    public String getTemplateId() {
-        return templateId;
+    public String getTemplate_id() {
+        return template_id;
     }
 
-    public void setTemplateId(String templateId) {
-        this.templateId = templateId;
+    public void setTemplate_id(String template_id) {
+        this.template_id = template_id;
     }
 
     public String getUrl() {

+ 21 - 0
src/main/java/com/uas/platform/b2c/common/weixin/model/base/AbstractParams.java

@@ -0,0 +1,21 @@
+package com.uas.platform.b2c.common.weixin.model.base;
+
+import java.io.Serializable;
+import java.util.Map;
+
+/**
+ * 基本请求抽象类
+ * @author liuam
+ * @date  2018年6月12日
+ *
+ */
+public abstract class AbstractParams implements Serializable{
+
+    private static final long serialVersionUID = 3375127810872852675L;
+
+    /**
+     * 返回请求参数
+     * @return
+     */
+    public abstract Map<String,String> getParams() throws Exception;
+}

+ 16 - 0
src/main/java/com/uas/platform/b2c/common/weixin/model/base/WeChatConstant.java

@@ -0,0 +1,16 @@
+package com.uas.platform.b2c.common.weixin.model.base;
+
+/**
+ * 获取授权code请求参数
+ *
+ * @author liuam
+ * @date 2018年6月12日
+ *
+ */
+public class WeChatConstant {
+
+    public static final String DEFAULT_CHARACTER_ENCODING = "UTF-8";
+    public static final String GET_METHOD = "GET";
+	public static final String POST_METHOD = "POST";
+
+}

+ 93 - 0
src/main/java/com/uas/platform/b2c/common/weixin/model/req/AuthCodeParams.java

@@ -0,0 +1,93 @@
+package com.uas.platform.b2c.common.weixin.model.req;
+
+
+import com.uas.platform.b2c.common.weixin.model.base.AbstractParams;
+import com.uas.platform.b2c.common.weixin.model.base.WeChatConstant;
+import com.uas.platform.b2c.common.weixin.util.HttpReqUtil;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * 获取授权code请求参数
+ * 
+ * @author liuam
+ * @date 2018年6月12日
+ *
+ */
+public class AuthCodeParams extends AbstractParams {
+	
+	private static final long serialVersionUID = 6313379843885615765L;
+	public static final String SCOPE_SNSAPIBASE = "snsapi_base"; // snsapi_base(不需要弹出授权页面,只能获取openid)
+	public static final String SCOPE_SNSPAIUSERINFO = "snsapi_userinfo"; // 弹出授权页面(获取用户基本信息)
+	private String appid;
+	private String redirect_uri; // 使用urlencode对链接进行处理
+	private String response_type = "code";
+	private String scope;
+	private String state;
+
+	public AuthCodeParams() {
+		super();
+	}
+
+	public AuthCodeParams(String appid, String redirect_uri, String response_type, String scope, String state) {
+		super();
+		this.appid = appid;
+		this.redirect_uri = redirect_uri;
+		this.response_type = response_type;
+		this.scope = scope;
+		this.state = state;
+	}
+
+	/**
+	 * 参数组装
+	 * 
+	 * @return
+	 */
+	public Map<String, String> getParams() throws UnsupportedEncodingException {
+		Map<String, String> params = new TreeMap<String, String>();
+		params.put("appid", this.appid);
+		params.put("redirect_uri", HttpReqUtil.urlEncode(this.redirect_uri, WeChatConstant.DEFAULT_CHARACTER_ENCODING));
+		params.put("response_type", this.response_type);
+		params.put("scope", this.scope);
+		params.put("state", this.state);
+		return params;
+	}
+
+	public String getAppid() {
+		return appid;
+	}
+
+	public void setAppid(String appid) {
+		this.appid = appid;
+	}
+
+	public String getRedirect_uri() {
+		return redirect_uri;
+	}
+
+	public void setRedirect_uri(String redirect_uri) {
+		this.redirect_uri = redirect_uri;
+	}
+
+	public String getResponse_type() {
+		return response_type;
+	}
+
+	public String getScope() {
+		return scope;
+	}
+
+	public void setScope(String scope) {
+		this.scope = scope;
+	}
+
+	public String getState() {
+		return state;
+	}
+
+	public void setState(String state) {
+		this.state = state;
+	}
+}

+ 81 - 0
src/main/java/com/uas/platform/b2c/common/weixin/model/req/AuthTokenParams.java

@@ -0,0 +1,81 @@
+package com.uas.platform.b2c.common.weixin.model.req;
+
+
+import com.uas.platform.b2c.common.weixin.model.base.AbstractParams;
+
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * 获取授权请求token的请求参数
+ * @author liuam
+ * @date 2018年6月12日
+ *
+ */
+public class AuthTokenParams extends AbstractParams {
+	
+	private static final long serialVersionUID = 4652953400751046159L;
+	private String appid; //公众号的唯一标识
+	private String secret; //公众号的appsecret
+	private String code; //填写第一步获取的code参数
+	private String grant_type = "authorization_code";
+
+	public AuthTokenParams() {
+		super();
+	}
+
+	public AuthTokenParams(String appid, String secret, String code, String grant_type) {
+		super();
+		this.appid = appid;
+		this.secret = secret;
+		this.code = code;
+		this.grant_type = grant_type;
+	}
+
+	public AuthTokenParams(String appid, String secret, String grant_type) {
+		this.appid = appid;
+		this.secret = secret;
+		this.grant_type = grant_type;
+	}
+
+	/**
+	 * 参数组装
+	 * @return
+	 */
+	public Map<String, String> getParams() {
+		Map<String, String> params = new TreeMap<String, String>();
+		params.put("appid", this.appid);
+		params.put("secret", this.secret);
+		params.put("code", this.code);
+		params.put("grant_type", this.grant_type);
+		return params;
+	}
+
+	public String getAppid() {
+		return appid;
+	}
+
+	public void setAppid(String appid) {
+		this.appid = appid;
+	}
+
+	public String getSecret() {
+		return secret;
+	}
+
+	public void setSecret(String secret) {
+		this.secret = secret;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getGrant_type() {
+		return grant_type;
+	}
+}

+ 69 - 0
src/main/java/com/uas/platform/b2c/common/weixin/model/req/AuthUserParams.java

@@ -0,0 +1,69 @@
+package com.uas.platform.b2c.common.weixin.model.req;
+
+
+import com.uas.platform.b2c.common.weixin.model.base.AbstractParams;
+
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * 获取用户信息请求
+ * @author liuam
+ * @date 2018年6月12日
+ *
+ */
+public class AuthUserParams extends AbstractParams {
+
+	private static final long serialVersionUID = 66535717787322321L;
+	
+	private String accessToken;
+	private String openid;
+	private String lang;
+
+	public AuthUserParams() {
+		super();
+	}
+
+	public AuthUserParams(String accessToken, String openid, String lang) {
+		super();
+		this.accessToken = accessToken;
+		this.openid = openid;
+		this.lang = lang;
+	}
+
+	public String getAccessToken() {
+		return accessToken;
+	}
+
+	public void setAccessToken(String accessToken) {
+		this.accessToken = accessToken;
+	}
+
+	public String getOpenid() {
+		return openid;
+	}
+
+	public void setOpenid(String openid) {
+		this.openid = openid;
+	}
+
+	public String getLang() {
+		return lang;
+	}
+
+	public void setLang(String lang) {
+		this.lang = lang;
+	}
+
+	/**
+	 * 参数组装
+	 * @return
+	 */
+	public Map<String, String> getParams() {
+		Map<String, String> params = new TreeMap<String, String>();
+		params.put("access_token", this.accessToken);
+		params.put("openid", this.openid);
+		params.put("lang", this.lang);
+		return params;
+	}
+}

+ 62 - 0
src/main/java/com/uas/platform/b2c/common/weixin/model/req/RefreshAuthTokenParams.java

@@ -0,0 +1,62 @@
+package com.uas.platform.b2c.common.weixin.model.req;
+
+
+import com.uas.platform.b2c.common.weixin.model.base.AbstractParams;
+
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * 刷新token请求
+ *
+ * @author liuam
+ * @date 2018年6月12日
+ *
+ */
+public class RefreshAuthTokenParams extends AbstractParams {
+
+	private static final long serialVersionUID = -1748872326563685295L;
+	private String appid;
+	private String grant_type = "refresh_token";
+	private String refresh_token;
+
+	public RefreshAuthTokenParams(String appid, String grant_type, String refresh_token) {
+		super();
+		this.appid = appid;
+		this.grant_type = grant_type;
+		this.refresh_token = refresh_token;
+	}
+
+	/**
+	 * 参数组装
+	 * 
+	 * @return
+	 */
+	public Map<String, String> getParams() {
+		Map<String, String> params = new TreeMap<String, String>();
+		params.put("appid", this.appid);
+		params.put("grant_type", this.grant_type);
+		params.put("refresh_token", this.refresh_token);
+		return params;
+	}
+
+	public String getAppid() {
+		return appid;
+	}
+
+	public void setAppid(String appid) {
+		this.appid = appid;
+	}
+
+	public String getGrant_type() {
+		return grant_type;
+	}
+
+	public String getRefresh_token() {
+		return refresh_token;
+	}
+
+	public void setRefresh_token(String refresh_token) {
+		this.refresh_token = refresh_token;
+	}
+}

+ 65 - 0
src/main/java/com/uas/platform/b2c/common/weixin/model/req/WechatTemplateMsg.java

@@ -0,0 +1,65 @@
+package com.uas.platform.b2c.common.weixin.model.req;
+
+import java.util.TreeMap;
+
+/**
+ * 模板消息
+ * @author liuam
+ * @date 2018年6月12日
+ *
+ */
+public class WechatTemplateMsg {
+
+	private String touser; //接收者openid
+
+	private String template_id; //模板ID
+
+	private String url; //模板跳转链接
+
+	private TreeMap<String, TreeMap<String, String>> data; //data数据
+
+	public String getTouser() {
+		return touser;
+	}
+
+	public void setTouser(String touser) {
+		this.touser = touser;
+	}
+
+	public String getTemplate_id() {
+		return template_id;
+	}
+
+	public void setTemplate_id(String template_id) {
+		this.template_id = template_id;
+	}
+
+	public String getUrl() {
+		return url;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	public TreeMap<String, TreeMap<String, String>> getData() {
+		return data;
+	}
+
+	public void setData(TreeMap<String, TreeMap<String, String>> data) {
+		this.data = data;
+	}
+
+	/**
+	 * 参数
+	 * @param value
+	 * @param color 可不填
+	 * @return
+	 */
+	public static TreeMap<String, String> item(String value, String color) {
+		TreeMap<String, String> params = new TreeMap<String, String>();
+		params.put("value", value);
+		params.put("color", color);
+		return params;
+	}
+}

+ 32 - 0
src/main/java/com/uas/platform/b2c/common/weixin/model/resp/AccessToken.java

@@ -0,0 +1,32 @@
+package com.uas.platform.b2c.common.weixin.model.resp;
+
+/**
+ * 微信通用接口凭证
+ *
+ * @author liuam
+ * @date 2018年6月12日
+ * 
+ */
+public class AccessToken {
+	// 获取到的凭证
+	private String access_token;
+	// 凭证有效时间,单位:秒
+	private int expires_in;
+
+	public String getAccess_token() {
+		return access_token;
+	}
+
+	public void setAccess_token(String access_token) {
+		this.access_token = access_token;
+	}
+
+	public int getExpires_in() {
+		return expires_in;
+	}
+
+	public void setExpires_in(int expires_in) {
+		this.expires_in = expires_in;
+	}
+
+}

+ 40 - 0
src/main/java/com/uas/platform/b2c/common/weixin/model/resp/AuthAccessToken.java

@@ -0,0 +1,40 @@
+package com.uas.platform.b2c.common.weixin.model.resp;
+
+/**
+ * 网页授权access_token
+ *
+ * @author liuam
+ * @date 2018年6月12日
+ *
+ */
+public class AuthAccessToken extends AccessToken {
+
+	private String refresh_token; // 用户刷新access_token
+	private String openid; // 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
+	private String scope; // 用户授权的作用域,使用逗号(,)分隔
+
+	public String getRefresh_token() {
+		return refresh_token;
+	}
+
+	public void setRefresh_token(String refresh_token) {
+		this.refresh_token = refresh_token;
+	}
+
+	public String getOpenid() {
+		return openid;
+	}
+
+	public void setOpenid(String openid) {
+		this.openid = openid;
+	}
+
+	public String getScope() {
+		return scope;
+	}
+
+	public void setScope(String scope) {
+		this.scope = scope;
+	}
+
+}

+ 102 - 0
src/main/java/com/uas/platform/b2c/common/weixin/model/resp/AuthUserInfo.java

@@ -0,0 +1,102 @@
+package com.uas.platform.b2c.common.weixin.model.resp;
+
+import java.util.List;
+
+/**
+ * 通过网页授权获取的用户信息
+ * @author liuam
+ * @date 2018年6月12日
+ *
+ */
+public class AuthUserInfo {
+	// 用户标识
+	private String openid;
+	// 用户昵称
+	private String nickname;
+	// 性别(1是男性,2是女性,0是未知)
+	private String sex;
+	// 国家
+	private String country;
+	// 省份
+	private String province;
+	// 城市
+	private String city;
+	// 用户头像链接
+	private String headimgurl;
+	// 用户特权信息
+	private List<String> privilege;
+	// 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段
+	private String unionid;
+
+	public String getOpenid() {
+		return openid;
+	}
+
+	public void setOpenid(String openid) {
+		this.openid = openid;
+	}
+
+	public String getNickname() {
+		return nickname;
+	}
+
+	public void setNickname(String nickname) {
+		this.nickname = nickname;
+	}
+
+	public String getSex() {
+		return sex;
+	}
+
+	public void setSex(String sex) {
+		this.sex = sex;
+	}
+
+	public String getCountry() {
+		return country;
+	}
+
+	public void setCountry(String country) {
+		this.country = country;
+	}
+
+	public String getProvince() {
+		return province;
+	}
+
+	public void setProvince(String province) {
+		this.province = province;
+	}
+
+	public String getCity() {
+		return city;
+	}
+
+	public void setCity(String city) {
+		this.city = city;
+	}
+
+	public String getHeadimgurl() {
+		return headimgurl;
+	}
+
+	public void setHeadimgurl(String headimgurl) {
+		this.headimgurl = headimgurl;
+	}
+
+	public List<String> getPrivilege() {
+		return privilege;
+	}
+
+	public void setPrivilege(List<String> privilege) {
+		this.privilege = privilege;
+	}
+
+	public String getUnionid() {
+		return unionid;
+	}
+
+	public void setUnionid(String unionid) {
+		this.unionid = unionid;
+	}
+}

+ 38 - 0
src/main/java/com/uas/platform/b2c/common/weixin/model/resp/TemplateMsgResult.java

@@ -0,0 +1,38 @@
+package com.uas.platform.b2c.common.weixin.model.resp;
+
+/**
+ * 模板消息 返回的结果
+ * @author liuam
+ * @since 2018/6/12 0012 下午 14:20
+ *
+ */
+public class TemplateMsgResult {
+
+	private Long msgid; // 消息id(发送模板消息)
+	private Integer errcode; // 状态
+	private String errmsg; //信息
+
+	public Long getMsgid() {
+		return msgid;
+	}
+
+	public void setMsgid(Long msgid) {
+		this.msgid = msgid;
+	}
+
+	public Integer getErrcode() {
+		return errcode;
+	}
+
+	public void setErrcode(Integer errcode) {
+		this.errcode = errcode;
+	}
+
+	public String getErrmsg() {
+		return errmsg;
+	}
+
+	public void setErrmsg(String errmsg) {
+		this.errmsg = errmsg;
+	}
+}

+ 87 - 85
src/main/java/com/uas/platform/b2c/common/weixin/service/impl/WeChatServiceImpl.java

@@ -1,30 +1,36 @@
 package com.uas.platform.b2c.common.weixin.service.impl;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2c.common.account.dao.UserDao;
 import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.weixin.model.MessageModel;
-import com.uas.platform.b2c.common.weixin.model.TemplateData;
-import com.uas.platform.b2c.common.weixin.model.TemplateDataDetail;
-import com.uas.platform.b2c.common.weixin.model.TemplateMessage;
+import com.uas.platform.b2c.common.weixin.model.req.AuthTokenParams;
+import com.uas.platform.b2c.common.weixin.model.req.AuthUserParams;
+import com.uas.platform.b2c.common.weixin.model.req.WechatTemplateMsg;
+import com.uas.platform.b2c.common.weixin.model.resp.AccessToken;
+import com.uas.platform.b2c.common.weixin.model.resp.AuthAccessToken;
+import com.uas.platform.b2c.common.weixin.model.resp.AuthUserInfo;
+import com.uas.platform.b2c.common.weixin.model.resp.TemplateMsgResult;
 import com.uas.platform.b2c.common.weixin.service.WeChatService;
+import com.uas.platform.b2c.common.weixin.util.HttpReqUtil;
 import com.uas.platform.b2c.common.weixin.util.WeChatUtil;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
-import com.uas.sso.common.util.HttpUtil;
 import com.uas.sso.entity.UserAccount;
 import com.uas.sso.entity.UserView;
 import com.uas.sso.util.AccountUtils;
-import net.sf.json.JSONArray;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.concurrent.TimeUnit;
 
 /**
  * @author liusw
@@ -36,14 +42,23 @@ public class WeChatServiceImpl implements WeChatService{
     @Autowired
     private UserDao userDao;
 
+    @Autowired
+    private RedisTemplate redisTemplate;
+
+    /**
+     * 保存到 redis 里的过期时间(second)
+     */
+    private static final Integer ACCESS_TOKEN_EXPIRES_IN = 3600;
+
     @Override
     public ModelMap getWxUserInfo(String code, String state) {
         ModelMap result = new ModelMap();
         if (!StringUtils.isEmpty(code)) {
-            JSONObject userInfo = getAccessTokenByCode(code);
-            result.put("nickname", userInfo.getString("nickname"));
-            result.put("headimgurl", userInfo.getString("headimgurl"));
-            String openid = userInfo.getString("openid");
+            AuthUserInfo userInfo = getAccessTokenByCode(code);
+            result.put("nickname", userInfo.getNickname());
+            result.put("headimgurl", userInfo.getHeadimgurl());
+            String openid = userInfo.getOpenid();
+
             result.put("openid", openid);
             User user = userDao.findUsersByOpenId(openid);
             if (StringUtils.isEmpty(user)) {
@@ -74,53 +89,37 @@ public class WeChatServiceImpl implements WeChatService{
     @Override
     public ModelMap sendTemplateMessage(List<MessageModel> messages) {
         ModelMap result = new ModelMap();
-        String url = WeChatUtil.GET_ACCESS_TOKEN;
-        url = url.replace("APPID", WeChatUtil.APPID);
-        url = url.replace("SECRET", WeChatUtil.APPSECRET);
-        try {
-            HttpUtil.ResponseWrap res = HttpUtil.doGet(url);
-            JSONObject jsonObject = JSON.parseObject(res.getContent());
-            String access_token = jsonObject.getString("access_token");
-            String sendTemplateUrl = WeChatUtil.GET_ACCESS_TOKEN.replace("ACCESS_TOKEN", access_token);
-            // 模板内容设置
-            TemplateMessage templateMessage = new TemplateMessage();
-            templateMessage.setTemplateId(WeChatUtil.INQUIRY_TEMPLATE_ID);
-            templateMessage.setUrl("https://www.usoftmall.com/mobile/center/vendor/seek?seekType=wait");
-            TemplateDataDetail first = new TemplateDataDetail();
-            TemplateDataDetail keyword1 = new TemplateDataDetail();
-            TemplateDataDetail keyword2 = new TemplateDataDetail();
-            TemplateDataDetail keyword3 = new TemplateDataDetail();
-            TemplateDataDetail remark = new TemplateDataDetail();
-            for (MessageModel messageModel : messages) {
-                User user = userDao.findOne(messageModel.getReceiverUu());
-                if (!StringUtils.isEmpty(user.getOpenId())) {
-                    Map<String, TemplateDataDetail> data = new HashMap<>();
-                    templateMessage.setTouser(user.getOpenId());
-                    keyword1.setValue(messageModel.getName());
-                    keyword1.setColor("#173177");
-                    data.put("keyword1", keyword1);
-                    keyword2.setValue("点击查看详情");
-                    keyword2.setColor("#173177");
-                    data.put("keyword2", keyword2);
-                    keyword3.setColor("#173177");
-                    keyword3.setValue("点击查看详情");
-                    data.put("keyword2", keyword2);
-                    first.setValue("尊敬的用户,您有一条新的询价单");
-                    remark.setValue(messageModel.getContent());
-                    data.put("first", first);
-                    data.put("remark", remark);
-                    templateMessage.setData(data);
-                    HttpUtil.doPost(sendTemplateUrl, FlexJsonUtils.toJsonDeep(templateMessage));
-                }
+        List<TemplateMsgResult> templateMsgResults = new ArrayList<>();
+
+        TreeMap<String, TreeMap<String, String>> params = new TreeMap<>();
+
+        // 获取操作 api 需要的 access_token
+        String access_token = getAccessToken();
+        String sendTemplateUrl = WeChatUtil.SEND_TEMPLATE_URL.replace("ACCESS_TOKEN", access_token);
+        // 模板内容设置
+        for (MessageModel messageModel : messages) {
+            User user = userDao.findOne(messageModel.getReceiverUu());
+            if (!StringUtils.isEmpty(user.getOpenId())) {
+                WechatTemplateMsg wechatTemplateMsg = new WechatTemplateMsg();
+                wechatTemplateMsg.setTemplate_id(WeChatUtil.INQUIRY_TEMPLATE_ID);
+
+                params.put("first", WechatTemplateMsg.item("尊敬的用户,您所在的企业(" + messageModel.getName() + ")有一条新的询价单", null));
+                params.put("keyword1", WechatTemplateMsg.item(messageModel.getName(), "#173177"));
+                params.put("keyword2", WechatTemplateMsg.item("点击查看详情", "#173177"));
+                params.put("keyword3", WechatTemplateMsg.item("点击查看详情", "#173177"));
+                params.put("remark", WechatTemplateMsg.item(messageModel.getContent(), null));
+
+                wechatTemplateMsg.setUrl("https://www.usoftmall.com/mobile/applyPurchase/list/businessOpportunity?enuu=" + messageModel.getReceiverEnuu());
+                wechatTemplateMsg.setTouser(user.getOpenId());
+                wechatTemplateMsg.setData(params);
+                String json = HttpReqUtil.doPost(sendTemplateUrl, FlexJsonUtils.toJsonDeep(wechatTemplateMsg));
+
+                TemplateMsgResult templateMsgResult = FlexJsonUtils.fromJson(json, TemplateMsgResult.class);
+                templateMsgResults.add(templateMsgResult);
             }
-            result.put("success", true);
-            return result;
-        } catch (Exception e) {
-            e.printStackTrace();
-            result.put("success", false);
-            result.put("message", e.getMessage());
-            return result;
         }
+        result.put("data", templateMsgResults);
+        return result;
     }
 
     @Override
@@ -174,36 +173,39 @@ public class WeChatServiceImpl implements WeChatService{
      * 通过code获取用户openId
      * @param code
      */
-    private JSONObject getAccessTokenByCode(String code) {
-        String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
-        url = url.replace("APPID", WeChatUtil.APPID);
-        url = url.replace("SECRET", WeChatUtil.APPSECRET);
-        url = url.replace("CODE", code);
-        try {
-            HttpUtil.ResponseWrap res = HttpUtil.doGet(url);
-            JSONObject jsonObject = JSON.parseObject(res.getContent());
-            String accessToken = jsonObject.getString("access_token");
-            String openId = jsonObject.getString("openid");
-            String refreshToken = jsonObject.getString("refresh_token");
-            JSONObject userInfo = getUserInfo(accessToken, openId);
-            return userInfo;
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return null;
+    private AuthUserInfo getAccessTokenByCode(String code) {
+        AuthTokenParams authTokenParams = new AuthTokenParams(WeChatUtil.APPID, WeChatUtil.APPSECRET, code, "authorization_code");
+        String json = HttpReqUtil.doGet(WeChatUtil.GET_OAUTH_TOKEN_URL, authTokenParams.getParams());
+        AuthAccessToken authAccessToken = FlexJsonUtils.fromJson(json, AuthAccessToken.class);
+        String accessToken = authAccessToken.getAccess_token();
+        String openId = authAccessToken.getOpenid();
+        AuthUserInfo userInfo = getUserInfo(accessToken, openId);
+        return userInfo;
     }
 
-    private JSONObject getUserInfo(String accessToken, String openId) {
-        String url = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";
-        url = url.replace("ACCESS_TOKEN", accessToken);
-        url = url.replace("OPENID", openId);
-        try {
-            HttpUtil.ResponseWrap res = HttpUtil.doGet(url);
-            JSONObject jsonObject = JSON.parseObject(res.getContent());
-            return jsonObject;
-        } catch (Exception e) {
-            e.printStackTrace();
+    private AuthUserInfo getUserInfo(String accessToken, String openId) {
+        // 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语
+        AuthUserParams authUserParams = new AuthUserParams(accessToken, openId, "zh_CN");
+        String json = HttpReqUtil.doGet(WeChatUtil.SNS_USERINFO_URL, authUserParams.getParams());
+        AuthUserInfo authUserInfo = FlexJsonUtils.fromJson(json, AuthUserInfo.class);
+        return authUserInfo;
+
+    }
+
+    /**
+     * 获取调用api所需的access_token
+     * @exception Exception 获取 access_token 失败抛出异常
+     */
+    private String getAccessToken () {
+        String access_token = (String) redisTemplate.opsForValue().get("WX_ACCESS_TOKEN");
+        if (!StringUtils.isEmpty(access_token)) {
+            return access_token;
         }
-        return null;
+        AuthTokenParams authTokenParams = new AuthTokenParams(WeChatUtil.APPID, WeChatUtil.APPSECRET,"client_credential");
+        String json = HttpReqUtil.doGet(WeChatUtil.GET_ACCESS_TOKEN, authTokenParams.getParams());
+        AccessToken accessToken = FlexJsonUtils.fromJson(json, AccessToken.class);
+        access_token = accessToken.getAccess_token();
+        redisTemplate.opsForValue().set("WX_ACCESS_TOKEN", access_token, ACCESS_TOKEN_EXPIRES_IN, TimeUnit.SECONDS);
+        return access_token;
     }
 }

+ 145 - 0
src/main/java/com/uas/platform/b2c/common/weixin/util/HttpReqUtil.java

@@ -0,0 +1,145 @@
+package com.uas.platform.b2c.common.weixin.util;
+
+import com.uas.sso.common.util.HttpUtil;
+import org.apache.commons.collections4.MapUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+
+/**
+ * @author liuam
+ * @since 2018/6/12 0012 下午 14:20
+ */
+public class HttpReqUtil {
+
+    /**
+     * 默认的http请求执行方法,返回
+     *
+     * @param path   请求path 路径
+     * @param map    请求参数集合
+     * @return
+     */
+    public static String doGet(String path, Map<String, String> map) {
+        String result = "";
+        try {
+            String url = setParmas((TreeMap<String, String>) map, path, "");
+            HttpUtil.ResponseWrap responseWrap = HttpUtil.doGet(url);
+            result = responseWrap.getContent();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    /**
+     * 默认的http请求执行方法,返回
+     *
+     * @param path   请求path 路径
+     * @param json   请求json数据
+     * @return
+     */
+    public static String doPost(String path, String json) {
+        String result = "";
+        try {
+            HttpUtil.ResponseWrap responseWrap = HttpUtil.doPost(path, json);
+            result = responseWrap.getContent();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+
+    /**
+     * 设置参数
+     *
+     * @param map     参数map
+     * @param path    需要赋值的path
+     * @param charset 编码格式 默认编码为utf-8(取消默认)
+     * @return 已经赋值好的url 只需要访问即可
+     */
+    public static String setParmas(Map<String, String> map, String path, String charset) throws Exception {
+        String result = "";
+        boolean hasParams = false;
+        if (path != null && !"".equals(path)) {
+            if (MapUtils.isNotEmpty(map)) {
+                StringBuilder builder = new StringBuilder();
+                Set<Map.Entry<String, String>> params = map.entrySet();
+                for (Map.Entry<String, String> entry : params) {
+                    if (entry.getValue() == null) {
+                        continue;
+                    }
+                    String key = entry.getKey().trim();
+                    String value = entry.getValue().trim();
+                    if (hasParams) {
+                        builder.append("&");
+                    } else {
+                        hasParams = true;
+                    }
+                    if (charset != null && !"".equals(charset)) {
+                        // builder.append(key).append("=").append(URLDecoder.(value,charset));
+                        builder.append(key).append("=").append(urlEncode(value, charset));
+                    } else {
+                        builder.append(key).append("=").append(value);
+                    }
+                }
+                result = builder.toString();
+            }
+        }
+        return doUrlPath(path, result).toString();
+    }
+
+    /**
+     * 编码
+     *
+     * @param source
+     * @param encode
+     * @return
+     */
+    public static String urlEncode(String source, String encode) {
+        String result = source;
+        try {
+            result = URLEncoder.encode(source, encode);
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+
+    /**
+     * 设置连接参数
+     *
+     * @param path
+     *            路径
+     * @return
+     */
+    private static URL doUrlPath(String path, String query) throws Exception {
+        URL url = new URL(path);
+        if (StringUtils.isEmpty(path)) {
+            return url;
+        }
+        if (StringUtils.isEmpty(url.getQuery())) {
+            if (path.endsWith("?")) {
+                path += query;
+            } else {
+                path = path + "?" + query;
+            }
+        } else {
+            if (path.endsWith("&")) {
+                path += query;
+            } else {
+                path = path + "&" + query;
+            }
+        }
+        return new URL(path);
+    }
+}
+
+
+

+ 11 - 1
src/main/java/com/uas/platform/b2c/common/weixin/util/WeChatUtil.java

@@ -29,5 +29,15 @@ public class WeChatUtil {
     /**
      * 获取access_token
      */
-    public static final String GET_ACCESS_TOKEN = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET";
+    public static final String GET_ACCESS_TOKEN = "https://api.weixin.qq.com/cgi-bin/token";
+
+    /**
+     * 获取token的链接
+     */
+    public static final String GET_OAUTH_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token";
+
+    /**
+     * 获取授权用户信息
+     */
+    public static final String SNS_USERINFO_URL = "https://api.weixin.qq.com/sns/userinfo";
 }

+ 8 - 6
src/main/java/com/uas/platform/b2c/fa/payment/service/impl/InstallmentServiceImpl.java

@@ -113,7 +113,7 @@ public class InstallmentServiceImpl implements InstallmentService{
             throw new IllegalOperatorException("此订单不存在,请重新确认信息");
 
         installment.setOrderId(order.getId());
-        installment.setPrice(purchase.getPrice());
+        installment.setPrice(purchase.getEnsurePrice());
         installment.setInstallmentDetails(installmentDetails);
 
         // 保存分期信息
@@ -171,7 +171,7 @@ public class InstallmentServiceImpl implements InstallmentService{
             throw new IllegalOperatorException("此订单不存在,请重新确认信息");
 
         installment.setOrderId(order.getId());
-        installment.setPrice(purchase.getPrice());
+        installment.setPrice(purchase.getEnsurePrice());
         installment.setInstallmentDetails(installmentDetails);
 
         oldInstallment.getInstallmentDetails().clear();
@@ -275,14 +275,16 @@ public class InstallmentServiceImpl implements InstallmentService{
 
         Installment installment = installmentDao.findByPurchaseId(purchase.getId());
 
-        Double total = purchase.getPrice();
+        Double total = purchase.getEnsurePrice();
         Double installTotal = installment.getPrice();
         Double dvalue = 0d;
 
         if (NumberUtil.compare(total, installTotal) == 1) {
             InstallmentDetail installmentDetail = installmentDetailDao.findByInstallmentIdAndDetno(installment.getId(), installment.getCount().shortValue());
-            installmentDetail.setPrice(NumberUtil.pricesScaleTwo(total - installTotal + installmentDetail.getPrice()));
-            installmentDetailDao.save(installmentDetail);
+            if (installmentDetail != null) {
+                installmentDetail.setPrice(NumberUtil.pricesScaleTwo(total - installTotal + installmentDetail.getPrice()));
+                installmentDetailDao.save(installmentDetail);
+            }
         }
 
 
@@ -316,7 +318,7 @@ public class InstallmentServiceImpl implements InstallmentService{
             }
         }
 
-        installment.setPrice(purchase.getPrice());
+        installment.setPrice(purchase.getEnsurePrice());
         installment.setCount(installment.getInstallmentDetails().size());
 
         return installmentDao.save(installment);

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

@@ -221,6 +221,12 @@ public class GoodsSimple {
 	@Column(name = "go_isbreakup", columnDefinition = "TINYINT(1)")
 	private Boolean breakUp;
 
+	/**
+	 * 规格信息
+	 */
+	@Column(name ="go_spec")
+	private String spec;
+
 	/**
 	 * 包装
 	 */
@@ -518,6 +524,15 @@ public class GoodsSimple {
 		return this;
 	}
 
+	public String getSpec() {
+		return spec;
+	}
+
+	public GoodsSimple setSpec(String spec) {
+		this.spec = spec;
+		return this;
+	}
+
 	public GoodsSimple() {
 		
 	}
@@ -575,6 +590,7 @@ public class GoodsSimple {
 		this.status = goods.getStatus();
 		this.perQty = goods.getPerQty();
 		this.breakUp = goods.getBreakUp();
+		this.spec = goods.getSpec();
 	}
 
 	public Short getB2cDeliveryDemMaxTime() {

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

@@ -2630,7 +2630,14 @@ public class GoodsServiceImpl implements GoodsService {
             }
         }
         if (StringUtils.hasText(code)) {
-            pageInfo.expression(like("code", code, false));
+            CriterionExpression[] expressions = new CriterionExpression[5];
+            expressions[0] = PredicateUtils.like("code", code, true, true);
+            expressions[1] = PredicateUtils.like("brandNameCn", code, true, true);
+            expressions[2] = PredicateUtils.like("brandNameEn", code, true, true);
+            expressions[3] = PredicateUtils.like("kindNameCn", code, true, true);
+            expressions[4] = PredicateUtils.like("spec", code, true, true);
+            LogicalExpression logicalExpression = PredicateUtils.or(expressions);
+            pageInfo.expression(logicalExpression);
         }
         Page<Goods> goodsPage = goodsDao.findAll(new Specification<Goods>() {
             @Override
@@ -3131,11 +3138,12 @@ public class GoodsServiceImpl implements GoodsService {
 
         pageInfo.filter("status", 601, true);
         if (StringUtils.hasText(keyword)) {
-            CriterionExpression[] expressions = new CriterionExpression[4];
+            CriterionExpression[] expressions = new CriterionExpression[5];
             expressions[0] = PredicateUtils.like("code", keyword, true, true);
             expressions[1] = PredicateUtils.like("brandNameCn", keyword, true, true);
             expressions[2] = PredicateUtils.like("brandNameEn", keyword, true, true);
             expressions[3] = PredicateUtils.like("kindNameCn", keyword, true, true);
+            expressions[4] = PredicateUtils.like("spec", keyword, true, true);
             LogicalExpression logicalExpression = PredicateUtils.or(expressions);
             pageInfo.expression(logicalExpression);
         }

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

@@ -84,6 +84,12 @@ public class Component implements Serializable {
 	@Column(name = "cmp_encapsulation")
 	private String encapsulation;
 
+	/**
+	 * 规格信息
+	 */
+	@Column(name = "cmp_spec")
+	private String spec;
+
 	/**
 	 * 器件的标准单位
 	 */
@@ -330,6 +336,16 @@ public class Component implements Serializable {
 	// @Column(name = "cmp_wastageqty")
 	// private Double wastageQty;
 
+
+	public String getSpec() {
+		return spec;
+	}
+
+	public Component setSpec(String spec) {
+		this.spec = spec;
+		return this;
+	}
+
 	public Long getId() {
 		return id;
 	}

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

@@ -204,6 +204,12 @@ public class ComponentInfo implements Serializable {
 	@Column(name = "cmp_description", length = 4000)
 	private String description;
 
+	/**
+	 * 规格信息
+	 */
+	@Column(name = "cmp_spec")
+	private String spec;
+
 	/**
 	 * 废料数量
 	 */
@@ -501,6 +507,15 @@ public class ComponentInfo implements Serializable {
 		return this;
 	}
 
+	public String getSpec() {
+		return spec;
+	}
+
+	public ComponentInfo setSpec(String spec) {
+		this.spec = spec;
+		return this;
+	}
+
 	/*
 	 * public ComponentInfoUas convertUas(ComponentInfo info){ ComponentInfoUas uas = new ComponentInfoUas(); uas.setAttach(info.getAttach()); uas.setBrandid(info.getBrandid()); uas.setCode(info.getCode()); uas.setExcessQty(info.getExcessQty()); uas.setId(info.getId()); uas.setImg(info.getImg()); uas.setKindid(info.getKindid()); uas.setMaxDelivery(info.getMaxDelivery()); uas.setMinBuyQty(info.getMinBuyQty()); uas.setMinDelivery(info.getMinDelivery()); uas.setMinPrice(info.getMinPrice());
 	 * uas.setOrderNumber(info.getOrderNumber()); uas.setOrderQty(info.getOrderQty()); uas.setOriginalQty(info.getOriginalQty()); uas.setPackaging(info.getPackaging()); uas.setReserve(info.getReserve()); uas.setReserveType(info.getReserveType()); uas.setSampleQty(info.getSampleQty()); uas.setSpec(info.getSpec()); uas.setUnit(info.getUnit()); uas.setUuid(info.getUuid()); uas.setWeight(info.getWeight());; return uas; }

+ 7 - 5
src/main/java/com/uas/platform/b2c/prod/store/api/CommodityController.java

@@ -1,8 +1,6 @@
 package com.uas.platform.b2c.prod.store.api;
 
 import com.alibaba.fastjson.JSON;
-import com.uas.platform.b2c.common.account.model.User;
-import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.prod.commodity.model.Goods;
 import com.uas.platform.b2c.prod.commodity.service.GoodsService;
 import com.uas.platform.b2c.prod.product.component.modal.Component;
@@ -16,10 +14,14 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
-import org.springframework.web.bind.annotation.*;
+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 javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -105,7 +107,7 @@ public class CommodityController {
 	 *
 	 * @param storeid	店铺企业UUID
 	 * @param kindUuid	类目UUID
-	 * @param code		搜索型号
+	 * @param code		搜索型号  -- 2018年6月5日 11:44:02  扩展  作为关键词 搜索 品牌、类目、型号、规格
 	 * @param params	分页信息
 	 */
 	@RequestMapping(value = "/commodities", method = RequestMethod.GET, params = "origin=store", produces = "application/json")

+ 4 - 0
src/main/java/com/uas/platform/b2c/prod/store/facade/impl/StoreInFacadeImpl.java

@@ -80,6 +80,7 @@ public class StoreInFacadeImpl implements StoreInFacade {
 		}
 		store.setQualifications(qualifications);
         if ("BASIC_INFO".equals(kind)) {
+        	String description = newStoreInfo.getEnterprise().getDescription();
             Enterprise enter = enterpriseDao.findByUu(store.getEnUU());
             enter.setEnAddress(store.getEnterprise().getEnAddress());
             enter.setEnTel(store.getEnterprise().getEnTel());
@@ -87,6 +88,7 @@ public class StoreInFacadeImpl implements StoreInFacade {
             enter.setEnPhone(store.getEnterprise().getEnPhone());
             enter.setEnWeixin(store.getEnterprise().getEnWeixin());
             enter.setEnQQ(store.getEnterprise().getEnQQ());
+            enter.setDescription(description);
             enterpriseDao.save(enter);
         }
         store = storeInDao.save(store);
@@ -111,6 +113,7 @@ public class StoreInFacadeImpl implements StoreInFacade {
 			}
 			store.setStoreShortName(StringUtils.hasText(newStoreInfo.getStoreShortName()) ? newStoreInfo.getStoreShortName() : null);
 			store.setStoreName(StringUtils.hasText(newStoreInfo.getStoreName()) ? newStoreInfo.getStoreName() : null);
+			store.setStoreApplication(StringUtils.hasText(newStoreInfo.getStoreApplication()) ? newStoreInfo.getStoreApplication() : null);
 			store.setDescription(newStoreInfo.getDescription());
 			EnterpriseSimple enterprise = store.getEnterprise();
             EnterpriseSimple newEnterprise = newStoreInfo.getEnterprise();
@@ -121,6 +124,7 @@ public class StoreInFacadeImpl implements StoreInFacade {
             enterprise.setEnPhone(newEnterprise.getEnPhone());
             enterprise.setEnWeixin(newEnterprise.getEnWeixin());
             enterprise.setEnQQ(newEnterprise.getEnQQ());
+            enterprise.setDescription(newEnterprise.getDescription());
 			store.setEnterprise(enterprise);
 			return null;
 		}

+ 15 - 1
src/main/java/com/uas/platform/b2c/prod/store/model/StoreIn.java

@@ -55,6 +55,12 @@ public class StoreIn implements Serializable {
 	@Column(name = "st_short_name")
 	private String storeShortName;
 
+	/**
+	 * 应用领域
+	 */
+	@Column(name="st_application",length = 100)
+	private String storeApplication;
+
 	/**
 	 *	店铺LOGO URL
 	 */
@@ -68,7 +74,7 @@ public class StoreIn implements Serializable {
 	private String bannerUrl;
 
 	/**
-	 * 简介
+	 * 主营产品
 	 */
 	@Column(name = "st_description", length = 1000)
 	private String description;
@@ -191,6 +197,14 @@ public class StoreIn implements Serializable {
 	public StoreIn() {
 	}
 
+	public String getStoreApplication() {
+		return storeApplication;
+	}
+
+	public void setStoreApplication(String storeApplication) {
+		this.storeApplication = storeApplication;
+	}
+
 	public Long getId() {
 		return id;
 	}

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

@@ -354,6 +354,12 @@ public class OrderDetail extends Document implements Serializable{
 	 */
 	@Column(name = "go_usd_tax_rate")
 	private Double usdTaxRate;
+
+	/**
+	 * 规格信息
+	 */
+	@Column(name = "go_spec")
+	private String spec;
 	
 	/**
 	 * rmb分段报价
@@ -1808,6 +1814,15 @@ public class OrderDetail extends Document implements Serializable{
 		return this;
 	}
 
+	public String getSpec() {
+		return spec;
+	}
+
+	public OrderDetail setSpec(String spec) {
+		this.spec = spec;
+		return this;
+	}
+
 	/**
 	 * 计算确认总价
 	 *

+ 16 - 0
src/main/java/com/uas/platform/b2c/trade/order/model/PurchaseDetail.java

@@ -330,6 +330,12 @@ public class PurchaseDetail extends Document {
 	@Column(name = "go_b2cmindelivery")
 	private Short b2cMinDelivery;
 
+	/**
+	 * 规格字段
+	 */
+	@Column(name = "go_spec")
+	private String spec;
+
 
 	/********************************* 非持久化字段 *********************************/
 
@@ -1131,6 +1137,7 @@ public class PurchaseDetail extends Document {
 		this.b2cMinDelivery = oDetail.getB2cMinDelivery();
 		this.remark = oDetail.getRemark();
 		this.goodsnumber = oDetail.getGoodsnumber();
+		this.spec = oDetail.getSpec();
 	}
 
 	/**
@@ -1537,6 +1544,15 @@ public class PurchaseDetail extends Document {
 		return null;
 	}
 
+	public String getSpec() {
+		return spec;
+	}
+
+	public PurchaseDetail setSpec(String spec) {
+		this.spec = spec;
+		return this;
+	}
+
 	@Override
 	public String toString() {
 		return "PurchaseDetail [id=" + id + ", detno=" + detno + ", detailid=" + detailid + ", orderdetailid=" + orderdetailid + ", batchCode=" + batchCode + ", uuid=" + uuid + ", billStatus="

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

@@ -201,6 +201,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
 		orderDetail.setStoreid(goods.getStoreid());
 		orderDetail.setStoreName(goods.getStoreName());
 		orderDetail.setDeliveryTime(goods);
+		orderDetail.setSpec(goods.getSpec());
 		String detailid = EncodingRulesConstant.ORDER_DETAIL.replace("_TIMESTAP_NUMBER", createNumberService.getTimeNumber("trade$order_detail", 9));
 		orderDetail.setDetailid(detailid);
 		return orderDetail;

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

@@ -164,6 +164,7 @@ public class CollectionController {
 			if (componentInfo != null){
 				Collection store = new Collection();
 				store.setComponentid(componentInfo.getId());
+				store.setSpec(componentInfo.getSpec());
 				store.setUseruu(SystemSession.getUser().getUserUU());
 				if (SystemSession.getUser().getEnterprise() != null){
 					store.setDissociative(Type.ENTERPRISING.value());

+ 1 - 1
src/main/java/com/uas/platform/b2c/trade/presale/facade/impl/CartFacadeImpl.java

@@ -3,7 +3,6 @@ package com.uas.platform.b2c.trade.presale.facade.impl;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.prod.commodity.model.Goods;
 import com.uas.platform.b2c.prod.commodity.service.GoodsService;
-import com.uas.platform.b2c.prod.product.component.modal.Component;
 import com.uas.platform.b2c.prod.product.component.service.ComponentService;
 import com.uas.platform.b2c.trade.order.type.ResultMapType;
 import com.uas.platform.b2c.trade.presale.facade.CartFacade;
@@ -64,6 +63,7 @@ public class CartFacadeImpl implements CartFacade {
 		cart.setCode(goods.getCode());
 		cart.setKiName(goods.getKindNameCn());
 		cart.setBrName(goods.getBrandNameEn());
+		cart.setSpec(goods.getSpec());
 		cart.setUu(userUU);
 		cart.setEnuu(enUU);
 		ResultMap resultMap1 = cartService.saveCartRecord(cart);

+ 14 - 1
src/main/java/com/uas/platform/b2c/trade/presale/model/Cart.java

@@ -1,6 +1,5 @@
 package com.uas.platform.b2c.trade.presale.model;
 
-import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.platform.b2c.core.utils.NumberUtil;
 import com.uas.platform.b2c.prod.commodity.model.Goods;
 import com.uas.platform.b2c.prod.commodity.model.GoodsSimple;
@@ -218,6 +217,12 @@ public class Cart {
 	@Transient
 	private Integer similarCount;
 
+	/**
+	 * 规格信息
+	 */
+	@Column(name = "cart_spec")
+	private String spec;
+
 	public Long getId() {
 		return id;
 	}
@@ -581,4 +586,12 @@ public class Cart {
 				+ returnInWeek + ", tax=" + tax + ", currencyName=" + currencyName + ", goods=" + goods + "]";
 	}
 
+	public String getSpec() {
+		return spec;
+	}
+
+	public Cart setSpec(String spec) {
+		this.spec = spec;
+		return this;
+	}
 }

+ 15 - 0
src/main/java/com/uas/platform/b2c/trade/presale/model/Collection.java

@@ -81,6 +81,12 @@ public class Collection implements Serializable {
 	@Column(name = "store_dissociative")
 	private Integer dissociative;
 
+	/**
+	 * 规格信息
+	 */
+	@Column(name = "store_spec")
+	private String spec;
+
 	/**
 	 * 收藏类型
 	 */
@@ -196,4 +202,13 @@ public class Collection implements Serializable {
 	public void setDissociative(Integer dissociative) {
 		this.dissociative = dissociative;
 	}
+
+	public String getSpec() {
+		return spec;
+	}
+
+	public Collection setSpec(String spec) {
+		this.spec = spec;
+		return this;
+	}
 }

+ 15 - 0
src/main/java/com/uas/platform/b2c/trade/presale/model/CollectionInfo.java

@@ -56,6 +56,12 @@ public class CollectionInfo implements Serializable{
 	@Column(name = "store_dissociative")
 	private Integer dissociative;
 
+	/**
+	 * 规格信息
+	 */
+	@Column(name = "store_spec")
+	private String spec;
+
 	public Long getUseruu() {
 		return useruu;
 	}
@@ -111,4 +117,13 @@ public class CollectionInfo implements Serializable{
 	public void setDissociative(Integer dissociative) {
 		this.dissociative = dissociative;
 	}
+
+	public String getSpec() {
+		return spec;
+	}
+
+	public CollectionInfo setSpec(String spec) {
+		this.spec = spec;
+		return this;
+	}
 }

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

@@ -158,6 +158,7 @@ public class CartServiceImpl implements CartService {
 			cart.setCode(code);
 			cart.setBrName(component.getBrand().getNameCn());
 			cart.setKiName(component.getKind().getNameCn());
+			cart.setSpec(component.getSpec());
 			cart.setImg(component.getImg());
 			// 设置商品信息
 			Goods goods = goodsService.findGoodsByBatchCode(cart.getBatchCode());

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

@@ -102,25 +102,31 @@ public class SeekPurchaseBomServiceImpl implements SeekPurchaseBomService {
     /**
      * 模板列
      */
-    private int mallColNum = 6;
+    private final int SEEK_TEMPLATE_COLNUM = 6;
     /**
      * 上限行数
      */
-    private int mallRowNum = 500;
+    private final int MAX_SEEK_NUM = 500;
 
     /**
      * excel列名
      */
-    public static final int CODENUM = 0;
-    public static final int BRANDNUM = 1;
-    public static final int DEADLINENUM = 2;
-    public static final int AMOUNTNUM = 3;
+    // 型号
+    public final int CODENUM = 2;
+    // 品牌
+    public final int BRANDNUM = 0;
+    // 截止日期
+    public final int DEADLINENUM = 4;
+    // 采购数量
+    public final int AMOUNTNUM = 5;
 //    public static final int CURRENCYNUM = 6;
 //    public static final int UNITPRICENUM = 7;
 //    public static final int ENCAPSULATIONNUM = 8;
 //    public static final int PRODUCEDATENUM = 9;
-    public static final int KINDNUM = 4;
-    public static final int SPECNUM = 5;
+    // 类目
+    public final int KINDNUM = 1;
+    // 规格
+    public final int SPECNUM = 3;
 
 
     /**
@@ -136,12 +142,12 @@ public class SeekPurchaseBomServiceImpl implements SeekPurchaseBomService {
         Sheet sheet = workbook.getSheetAt(0);
         int colNum = sheet.getRow(0).getPhysicalNumberOfCells();
 
-        if (colNum != mallColNum) {
+        if (colNum != SEEK_TEMPLATE_COLNUM) {
             return new ResultMap(CodeType.PARAMETER_ERROR, "表格模板不正确!请重新下载最新模板");
         }
         int rowNum = sheet.getLastRowNum();
-        if (rowNum > mallRowNum) {
-            return new ResultMap(CodeType.PARAMETER_ERROR, "您上传的信息超过500条,请拆分成2000以再在上传");
+        if (rowNum > MAX_SEEK_NUM) {
+            return new ResultMap(CodeType.PARAMETER_ERROR, "您上传的信息超过500条,请拆分成500以下再在上传");
         }
         // 插入Bom求购中
         SeekPurchaseBom seekPurchaseBom = new SeekPurchaseBom();
@@ -151,7 +157,6 @@ public class SeekPurchaseBomServiceImpl implements SeekPurchaseBomService {
         seekPurchaseBom = seekPurchaseBomDao.save(seekPurchaseBom);
         // 获取第一行的信息
         Row headerRow = sheet.getRow(0);
-        int blankNum = 0;
         if (headerRow != null) {
             // 验证是否为商城模板
             if (!vaildTemplete(headerRow)) {
@@ -165,10 +170,9 @@ public class SeekPurchaseBomServiceImpl implements SeekPurchaseBomService {
             for (int r = startRow; r <= rowNum; r++) {
                 Row row = sheet.getRow(r);
                 if (row != null) {
-
                     SeekPurchaseByBatch seekPurchaseByBatch = new SeekPurchaseByBatch();
-                    blankNum = convertValueToSeekPurchaseByBatch(row, seekPurchaseByBatch, r);
-                    if (blankNum >= 3) {
+                    int blankNum = convertValueToSeekPurchaseByBatch(row, seekPurchaseByBatch, r);
+                    if (blankNum >= 4) {
                         continue;
                     }
                     seekPurchaseByBatch.setBomId(seekPurchaseBom.getId());
@@ -198,9 +202,6 @@ public class SeekPurchaseBomServiceImpl implements SeekPurchaseBomService {
         Object brandCellObj = readWorkBookCell(row.getCell(BRANDNUM), Cell.CELL_TYPE_STRING,
                 0, BRANDNUM);
         String brandString = StringUtilB2C.getStr(brandCellObj);
-//        Object produceDateCellObj = readWorkBookCell(row.getCell(PRODUCEDATENUM), Cell.CELL_TYPE_STRING,
-//                0, PRODUCEDATENUM);
-//        String produceDateString = StringUtilB2C.getStr(produceDateCellObj);
         if ("只能填数字、英文、英文特殊符号".equals(codeString) || "请勿用中文特殊符号".equals(brandString)) {
             return true;
         }
@@ -228,11 +229,6 @@ public class SeekPurchaseBomServiceImpl implements SeekPurchaseBomService {
         if (!"截止时间".equals(StringUtilB2C.getStr(deadlineCellObj))) {
             return false;
         }
-//        Object produceDateCellObj = readWorkBookCell(headerRow.getCell(PRODUCEDATENUM), Cell.CELL_TYPE_STRING,
-//                0, PRODUCEDATENUM);
-//        if (!"生产日期".equals(StringUtilB2C.getStr(produceDateCellObj))) {
-//            return false;
-//        }
         return true;
     }
 
@@ -306,6 +302,15 @@ public class SeekPurchaseBomServiceImpl implements SeekPurchaseBomService {
             }
         }
 
+        // 类目
+        Object kindValue = readWorkBookCell(row.getCell(KINDNUM), Cell.CELL_TYPE_STRING,
+                rowNum, KINDNUM);
+        if (!StringUtils.isEmpty(kindValue)) {
+            seekPurchaseByBatch.setKind(convert(kindValue, 50));
+        } else {
+            result += 1;
+        }
+
         // 求购数量
         Object amountValue = readWorkBookCell(row.getCell(AMOUNTNUM), Cell.CELL_TYPE_STRING,
                 rowNum, AMOUNTNUM);
@@ -386,13 +391,6 @@ public class SeekPurchaseBomServiceImpl implements SeekPurchaseBomService {
         if (!StringUtils.isEmpty(specValue)) {
             seekPurchaseByBatch.setSpec(convert(specValue, 50));
         }
-
-        // 类目
-        Object kindValue = readWorkBookCell(row.getCell(KINDNUM), Cell.CELL_TYPE_STRING,
-                rowNum, KINDNUM);
-        if (!StringUtils.isEmpty(kindValue)) {
-            seekPurchaseByBatch.setKind(convert(kindValue, 50));
-        }
         return result;
     }
 

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

@@ -59,7 +59,6 @@ public class VendorIntroductionServiceImpl implements VendorIntroductionService
 	 */
 	@Override
 	public Page<VendorIntroduction> getVendorIntroduction(int page, int size, String keyword, String field) {
-		long start = System.currentTimeMillis();
 		String enterpriseCondition = " 1=1 ";
 		String productCondition = "";
 		// 拼接查询条件
@@ -99,7 +98,6 @@ public class VendorIntroductionServiceImpl implements VendorIntroductionService
 		} else {
 			vendorIntroductions = getEnterpriseWithoutProductCondition(enUU, enterpriseCondition,  page, size);
 		}
-		System.out.println("查找完企业UU" + (System.currentTimeMillis() - start));
 		return new Page<VendorIntroduction>(page, size, vendorIntroductions, total);
 	}
 
@@ -170,7 +168,6 @@ public class VendorIntroductionServiceImpl implements VendorIntroductionService
 		vendorIntroductionUusSql.append(",(select count(1) from ( select pr_enuu from v$product$private where ").append(productCondition)
 				.append(" and ifnull(pr_b2cenabled, 1) = 1 and pr_pbranden is not null and pr_pcmpcode is not null) p1 where pr_enuu = enUU) prodCounts");
 		vendorIntroductionUusSql.append(" from (").append(enterpriseSql).append(rownumSql);
-		System.out.println("ens:" + vendorIntroductionUusSql);
 		return commonDao.query(vendorIntroductionUusSql.toString(), VendorIntroduction.class);
 	}
 
@@ -217,7 +214,6 @@ public class VendorIntroductionServiceImpl implements VendorIntroductionService
 			enCountSql.append("right join ( select pr_enuu from v$product$private where ").append(productCondition).append(") p on pr_enuu = en_uu");
 		}
 		enCountSql.append(" group by en_uu )a");
-        System.out.println("en_count:" + enCountSql.toString());
 		return commonDao.queryForObject(enCountSql.toString(), Integer.class);
 	}
 

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


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

@@ -1825,7 +1825,7 @@ define([ 'app/app' ], function(app) {
   /**
    * 左侧导航栏控制器
    */
-	app.controller('leftNavCtrl', ["$scope", "toaster", "$modal", "$rootScope", function($scope, toaster, $modal, $rootScope){
+	app.controller('leftNavCtrl', ["$scope", "toaster", "$modal", "$rootScope", '$q', function($scope, toaster, $modal, $rootScope, $q){
         //安全设置提醒框
         // $scope.openHomeCenterModel = function() {
         //     var modalInstance = $modal.open({
@@ -1846,6 +1846,9 @@ define([ 'app/app' ], function(app) {
 				$scope.openHomeCenterModel();
 			}*/
 		// };
+		$q.all[$rootScope.pcbPromise].then(function (res) {
+			$rootScope.isPcbStore = res == 1;
+		})
 	}]);
 
     function checkNullStr (str) {

+ 5 - 1
src/main/webapp/resources/js/common/query/storeInfo.js

@@ -201,7 +201,11 @@ define([ 'ngResource' ], function() {
 			 */
 			getContactInfo: {
 				url: 'store-service/storeids',
-				method: 'GET',
+				method: 'GET'
+			},
+			isPcb: {
+				url: '/api/store-service/ispcb',
+				method: 'GET'
 			}
         });
     }]).factory('ConsignmentAgreementRecord', ['$resource', 'BaseService', function ($resource, BaseService) {

+ 1 - 1
src/main/webapp/resources/js/usercenter/controllers/forstore/bom_detail_ctrl.js

@@ -687,7 +687,7 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
                     file: file,
                     method: 'POST'
                   }).success(function (data) {
-                    window.open("http://10.1.51.90:3000/applyPurchase/"
+                    window.open("applyPurchase/"
                         + data.data);
                   }).error(function (response) {
                   });

+ 1 - 0
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_cart_ctrl.js

@@ -73,6 +73,7 @@ define(["app/app", 'jquery-summernote'], function(app) {
 						$scope.cartMap.push(obj);
 					}
 				});
+				console.log($scope.cartMap)
 				$scope.cartIsEmpty = !$scope.carts.length ? true : false;
 				//设置全选的复选框
 				$scope.isChooseAll = $scope.isAllSelect($scope.carts);

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

@@ -285,14 +285,14 @@ define(['app/app'], function (app) {
 			606: true
 		};
 
-		var getRecommendComps = function (userUU, usedFor, pageable) {
-			Recommendation.getRecommendComps({page: pageable.page, size: pageable.size}, function (data) {
-				$scope.recommendComps = data.content;
-			}, function (error) {
-				toaster.pop('error', '获取推荐器件失败');
-			})
-		};
-		getRecommendComps(null, null, {page: 0, size: 12});
+		// var getRecommendComps = function (userUU, usedFor, pageable) {
+		// 	Recommendation.getRecommendComps({page: pageable.page, size: pageable.size}, function (data) {
+		// 		$scope.recommendComps = data.content;
+		// 	}, function (error) {
+		// 		toaster.pop('error', '获取推荐器件失败');
+		// 	})
+		// };
+		// getRecommendComps(null, null, {page: 0, size: 12});
 
 		// 重新加载数据
 		$scope.reload = function () {

+ 1 - 1
src/main/webapp/resources/js/usercenter/controllers/forstore/messagePersonalCtrl.js

@@ -377,7 +377,7 @@ define(['app/app'], function(app) {
                         angular.forEach($scope.messageCurrent, function (message) {
                             message.content = $sce.trustAsHtml(message.content);
                             if(message.type =="MALL跳转卖家待报价页面"){
-                                message.url='/vendor#/seekPurchase';
+                                message.url='/vendor#/seekPurchase?type=1';
                             }else if (message.type =="MALL公共询价"){
                                 message.url='/user#/seekPurchase';
                             }else if (message.type =="商城公共询价采纳结果"){

+ 54 - 39
src/main/webapp/resources/js/usercenter/controllers/forstore/seek_purchase_ctrl.js

@@ -98,22 +98,24 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
             }
           $scope.toogleTab('waitOffer');
           $scope.applyObj = {
-            code: '',
-            brand: '',
-            unitPrice: '',
-            currency: 'RMB',
-            encapsulation: '',
-            produceDate: '',
-            amount: '',
-            deadline: ''
+              code: '',
+              brand: '',
+              unitPrice: '',
+              currency: 'RMB',
+              encapsulation: '',
+              produceDate: '',
+              amount: '',
+              deadline: '',
+              prodTitle: ''
           };
           $scope.validObj = {
-            code: true,
-            brand: true,
-            unitPrice: true,
-            amount: true,
-            deadline: true,
-            spec: true
+              code: true,
+              brand: true,
+              unitPrice: true,
+              amount: true,
+              deadline: true,
+              spec: true,
+              prodTitle: true
           };
 
           // 买家求购列表
@@ -229,6 +231,13 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
             }
             return $scope.validObj.brand;
           }
+          $scope.checkProdTitle = function () {
+              $scope.validObj.prodTitle = $scope.applyObj.prodTitle && $scope.applyObj.prodTitle !== '';
+              if (!$scope.validObj.prodTitle) {
+                  toaster.pop('error', '类目不能为空');
+              }
+              return $scope.validObj.prodTitle;
+          }
           $scope.checkUnitPrice = function () {
             $scope.validObj.unitPrice = ($scope.applyObj.unitPrice === '' || !$scope.applyObj.unitPrice ) ? true
                 : $scope.applyObj.unitPrice > 0 && $scope.applyObj.unitPrice
@@ -338,8 +347,8 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
             return $scope.validObj.amount;
           }
           $scope.checkAll = function () {
-            return $scope.checkCode() && $scope.checkBrand() && $scope.checkDeadline()
-                && $scope.checkUnitPrice() && $scope.checkAmount() && $scope.checkSpec();
+            return $scope.checkBrand() && $scope.checkProdTitle() && $scope.checkCode() && $scope.checkDeadline()
+                && $scope.checkSpec() && $scope.checkAmount();
           }
           $scope.checkDeadline = function () {
             $scope.validObj.deadline = $scope.applyObj.deadline
@@ -378,6 +387,7 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
               inquiryItem.currency = $scope.applyObj.unitPrice ? $scope.applyObj.currency : null;
               inquiryItem.cmpCode = $scope.applyObj.code.toUpperCase();
               inquiryItem.unitPrice = $scope.applyObj.unitPrice;
+              inquiryItem.spec = $scope.applyObj.spec;
               inquiryItem.produceDate = $scope.applyObj.produceDate;
               inquiryItem.date = new Date();
               inquiryItem.endDate = $scope.applyObj.deadline;
@@ -413,24 +423,21 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
           $scope.release = function () {
             // 校验
             if ($scope.checkAll()) {
-                if (!$scope.applyObj.prodTitle || $scope.applyObj.prodTitle.length === 0) {
-                    var materialUrl = seekUrl;
-                    if (seekUrl == 'https://api-inquiry.usoftmall.com') {
-                        materialUrl = 'https://api-product.usoftmall.com/';
-                    }
-                    $http({
-                        method: 'get',
-                        dataType: 'json',
-                        url: materialUrl + '/productuser/match/getKind',
-                        params: {cmpCode: $scope.applyObj.code, brand: $scope.applyObj.brand}
-                    }).success(function (data) {
-                        startRelease(data && data.length ? data : '其他');
-                    }).error(function (response) {
-                        toaster.pop('error', response || '获取关联类目失败');
-                    });
-                } else {
-                    startRelease();
+                var materialUrl = seekUrl;
+                if (seekUrl == 'https://api-inquiry.usoftmall.com') {
+                    materialUrl = 'https://api-product.usoftmall.com/';
                 }
+                $http({
+                    method: 'get',
+                    dataType: 'json',
+                    url: materialUrl + '/productuser/match/getKind',
+                    params: {cmpCode: $scope.applyObj.code, brand: $scope.applyObj.brand}
+                }).success(function (data) {
+                    startRelease(data && data.length ? data : $scope.applyObj.prodTitle);
+                }).error(function (response) {
+                    startRelease($scope.applyObj.prodTitle);
+                    toaster.pop('error', response || '获取关联类目失败');
+                });
             } else {
               if (!$scope.validObj.deadline) {
                 toaster.pop('error', '截止日期不能为空');
@@ -488,17 +495,21 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
             }
           }
           // 采纳报价
-          $scope.adopt = function (id) {
+          $scope.adopt = function (of) {
             $http({
+                headers:{
+                    'content-Type':'application/x-www-form-urlencoded'
+                },
               method: 'POST',
               dataType: 'json',
               url: seekUrl + '/inquiry/buyer/adopt',
-              params: {id: id, status: 1}
+              params: {id: of.id, status: 1}
             }).success(function (data) {
               toaster.pop('success', '采纳报价成功');
-              $scope.seekPurchaseTableParams.reload();
+                of.agreed = 1;
+              // $scope.seekPurchaseTableParams.reload();
             }).error(function (response) {
-              toaster.pop('error', response);
+              toaster.pop('error', response ? response.message : '该单据可能已被操作,请刷新后重试');
             });
           }
 
@@ -521,6 +532,9 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
               // 选择理由
               $scope.refuse = function (choice) {
                   $http({
+                      headers:{
+                          'content-Type':'application/x-www-form-urlencoded'
+                      },
                       method: 'POST',
                       dataType: 'json',
                       url: seekUrl + '/inquiry/buyer/refuse',
@@ -528,9 +542,10 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
                   }).success(function (data) {
                       toaster.pop('refuse', '已拒绝报价');
                       $scope.setShowCurrentRefuseOffer(false);
-                      $scope.seekPurchaseTableParams.reload();
+                      $scope.currentRefuseOffer.agreed = 0;
+                      // $scope.seekPurchaseTableParams.reload();
                   }).error(function (response) {
-                      toaster.pop('error', response);
+                      toaster.pop('error', response ? response.message : '该单据可能已被操作,请刷新后重试');
                   });
               }
 

+ 24 - 13
src/main/webapp/resources/js/vendor/app.js

@@ -677,6 +677,15 @@ define([ 'angularAMD', 'ngLocal', 'common/services', 'common/directives', 'commo
 		});
 		var applyPromise = deferred1.promise;
 
+		// 是否pcb
+		var deferred2 = $q.defer();
+		StoreInfo.isPcb({enuu: $rootScope.userInfo.enterprise.uu}, function (result) {
+			deferred1.resolve(result);
+		}, function (error) {
+			deferred1.reject(error);
+		});
+		$rootScope.pcbPromise = deferred2.promise;
+
 		// 合并多个Promise对象
 		$q.all([storePromise, applyPromise]).then(function (result) {
 			$rootScope.store = result[0] && result[0].uuid ? result[0] : null;
@@ -687,24 +696,26 @@ define([ 'angularAMD', 'ngLocal', 'common/services', 'common/directives', 'commo
 			} else {
 				$rootScope.applyStatus = 'NONE';
 			}
-
-			if ($location.$$path === '/index') {
-                AuthenticationService.getAuthentication().success(function (data) {
-                    angular.forEach(data.enterprises, function (item) {
-                        if (item.current) {
-                            data.enterprise = item;
-                        }
-                    });
-                    $rootScope.userInfo = data;
+			AuthenticationService.getAuthentication().success(function (data) {
+				angular.forEach(data.enterprises, function (item) {
+					if (item.current) {
+						data.enterprise = item;
+					}
+				});
+				$rootScope.userInfo = data;
+				if ($location.$$path === '/index') {
 					if ($rootScope.applyStatus === 'NONE') {
 						$state.go('vendor_store_apply');
 					} else if ($rootScope.applyStatus === 'PASS') {
 						$state.go('vendor_store_maintain');
 					}
-                }).error(function (error) {
-                    toaster.pop('error', '获取登录信息失败');
-                })
-			}
+				}
+				$q.all[$rootScope.pcbPromise].then(function (res) {
+					$rootScope.isPcbStore = res == 1;
+				})
+			}).error(function (error) {
+				toaster.pop('error', '获取登录信息失败');
+			})
 
 			$rootScope.$on('$stateChangeStart', function (event, toState) {
 

+ 1 - 1
src/main/webapp/resources/js/vendor/controllers/forstore/messagePersonalCtrl.js

@@ -337,7 +337,7 @@ define(['app/app'], function(app) {
                         angular.forEach($scope.messageCurrent, function (message) {
                             message.content = $sce.trustAsHtml(message.content);
                             if(message.type =="MALL跳转卖家待报价页面"){
-                                message.url='/vendor#/seekPurchase';
+                                message.url='/vendor#/seekPurchase?type=1';
                             }else if (message.type =="MALL公共询价"){
                                 message.url='/user#/seekPurchase';
                             }else if (message.type =="商城公共询价采纳结果"){

+ 1 - 1
src/main/webapp/resources/js/vendor/controllers/forstore/purchase_detail.js

@@ -462,7 +462,7 @@ define(['app/app'], function(app) {
 					$scope.installmentBox = false
 				}
 				$scope.purchase.purchaseHistory = angular.fromJson($scope.purchase.statushistory);
-				$scope.purchase.currentTotal = $scope.purchase.price;
+				$scope.purchase.currentTotal = $scope.purchase.price + $scope.purchase.fare;
 				if ($scope.purchase.jsonRule){
 					$scope.rule = angular.fromJson($scope.purchase.jsonRule);
 				}

+ 23 - 14
src/main/webapp/resources/js/vendor/controllers/forstore/seek_purchase_ctrl.js

@@ -1,8 +1,8 @@
 define(['app/app'], function (app) {
   app.register.controller('seekPurchaseCtrl',
-      ['$scope', '$rootScope', '$stateParams', '$state', 'toaster',
+      ['$scope', '$location', '$rootScope', '$stateParams', '$state', 'toaster',
         'seekPurchase', 'BaseService', 'ngTableParams', '$modal', '$upload', '$http',
-        function ($scope, $rootScope, $stateParams, $state, toaster,
+        function ($scope, $location, $rootScope, $stateParams, $state, toaster,
             seekPurchase, BaseService, ngTableParams, $modal, $upload, $http) {
           document.title = '求购询价-优软商城';
           $rootScope.active = 'vendor_seek_purchase';
@@ -19,7 +19,12 @@ define(['app/app'], function (app) {
           $scope.initInquiryItem();
 
             //卖家待报价推送信息,self为与我相关,all为全部
-            $scope.vendorType = 'self';
+            if ($location.search().type === '1') {
+              $scope.vendorType = 'self';
+              console.log(1)
+            } else {
+              $scope.vendorType = 'all';
+            }
 
           // 获取当前卖家求购推送列表
           $scope.seekPurchaseTableParams = new ngTableParams({
@@ -44,14 +49,17 @@ define(['app/app'], function (app) {
                 $scope.isSearch = false;
               }
               var isSelf = $scope.vendorType == 'self';
-              if (!isSelf) {
-                param.enUU = $scope.userInfo.enterprise.uu;
-                param.userUU = $scope.userInfo.userUU;
-              } else {
-                param.enuu = $scope.userInfo.enterprise.uu;
-                param.useruu = $scope.userInfo.userUU;
-              }
-              var target = isSelf ? '/inquiry/sale/remind' : '/inquiry/public';
+              // if (!isSelf) {
+              //   param.enUU = $scope.userInfo.enterprise.uu;
+              //   param.userUU = $scope.userInfo.userUU;
+              // } else {
+              //   param.enuu = $scope.userInfo.enterprise.uu;
+              //   param.useruu = $scope.userInfo.userUU;
+              // }
+              param.enuu = $scope.userInfo.enterprise.uu;
+              param.useruu = $scope.userInfo.userUU;
+              param.enableOffer = 1;
+              var target = isSelf ? '/inquiry/sale/remind' : '/inquiry/sale/enremind';
               $http({
                 method: 'get',
                 dataType: 'json',
@@ -196,9 +204,10 @@ define(['app/app'], function (app) {
               if (!$scope.inquiryItem.currency) {
                 $scope.inquiryItem.currency = $scope.seekCurrency[0];
               }
-              if ($scope.vendorType == 'self') {
-                  $scope.inquiryItem.id = $scope.inquiryItem.itemId;
-              }
+              // if ($scope.vendorType == 'self') {
+              //     $scope.inquiryItem.id = $scope.inquiryItem.itemId;
+              // }
+              $scope.inquiryItem.id = $scope.inquiryItem.itemId;
               if (seekUrl == 'https://api-inquiry.usoftmall.com') {
                 seekPurchase.saveOfferProd($scope.inquiryItem, function (data) {
                   toaster.pop('success', '报价成功');

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

@@ -1106,14 +1106,14 @@ define(['app/app'], function (app) {
             });
         };
 
-        var getRecommendComps = function (userUU, usedFor, pageable) {
-            Recommendation.getRecommendComps({page: pageable.page, size: pageable.size}, function (data) {
-                $scope.recommendComps = data.content;
-            }, function (error) {
-                toaster.pop('error', '获取推荐器件失败', error);
-            })
-        };
-        getRecommendComps(null, null, {page: 0, size: 12});
+        // var getRecommendComps = function (userUU, usedFor, pageable) {
+        //     Recommendation.getRecommendComps({page: pageable.page, size: pageable.size}, function (data) {
+        //         $scope.recommendComps = data.content;
+        //     }, function (error) {
+        //         toaster.pop('error', '获取推荐器件失败', error);
+        //     })
+        // };
+        // getRecommendComps(null, null, {page: 0, size: 12});
 
 
         // 根据输入单号搜索单据

+ 7 - 4
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_store_maintain_ctrl.js

@@ -75,6 +75,7 @@ define(['app/app'], function (app) {
 			$scope.sampleStore.storeShortName = $scope.storeInfo.storeShortName;
             $scope.sampleStore.storeName = $scope.storeInfo.storeName;
 			$scope.sampleStore.description = $scope.storeInfo.description;
+			$scope.sampleStore.storeApplication = $scope.storeInfo.storeApplication;
 
             $scope.sampleStore.enPhone = '';
             $scope.sampleStore.enWeixin = '';
@@ -170,6 +171,7 @@ define(['app/app'], function (app) {
 				$scope.sampleStore.description = $scope.storeInfo.description;
 				$scope.sampleStore.enterprise = angular.copy($scope.storeInfo.enterprise);
 				$scope.sampleStore.enterprise.address = $scope.sampleStore.enterprise.address;
+				$scope.sampleStore.storeApplication = $scope.storeInfo.storeApplication;
 				return $scope.closeEdit(module);
 			}
 			if (module == 'QUALIFICATIONS') {
@@ -273,10 +275,10 @@ define(['app/app'], function (app) {
 				toaster.pop('error', '企业官网地址不能为空');
 				return false;
 			}*/
-			if (!$scope.sampleStore.enterprise.address || $scope.sampleStore.enterprise.address == '') {
-				toaster.pop('error', '店铺地址不能为空');
-				return false;
-			}
+			// if (!$scope.sampleStore.enterprise.address || $scope.sampleStore.enterprise.address == '') {
+			// 	toaster.pop('error', '店铺地址不能为空');
+			// 	return false;
+			// }
 			if (!$scope.sampleStore.enterprise.enTel || $scope.sampleStore.enterprise.enTel == '') {
 				toaster.pop('error', '请输入正确的电话号码');
 				return false;
@@ -305,6 +307,7 @@ define(['app/app'], function (app) {
             store.storeName = $scope.sampleStore.storeName;
 			store.description = $scope.sampleStore.description;
 			store.enterprise = angular.copy($scope.sampleStore.enterprise);
+			store.storeApplication = $scope.sampleStore.storeApplication;
 			saveChanges(store, 'BASIC_INFO');
 		};
 

+ 20 - 12
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_upload_ctrl.js

@@ -71,14 +71,19 @@ define([ 'app/app' ], function(app) {
 
 		//选择相应的销售类型
 		$scope.sellType = function(type) {
-			if($scope.batch.selfSellEabled) {
-				$scope.batch.sellType = type;
-				if (type == 'UAS') {
-					$scope.setShowSelfSellRemindBox(true);
-				}
-			}else {
-				$scope.batch.sellType = 'UAS';
-			}
+            if (type == 'self') {
+                $scope.batch.selfSellEabled && ($scope.batch.sellType = type);
+            } else if (type == 'UAS') {
+                !$rootScope.isPcbStore && ($scope.batch.sellType = type && $scope.setShowSelfSellRemindBox(true));
+            }
+			// if($scope.batch.selfSellEabled) {
+			// 	$scope.batch.sellType = type;
+			// 	if (type == 'UAS') {
+			// 		$scope.setShowSelfSellRemindBox(true);
+			// 	}
+			// }else {
+			// 	$scope.batch.sellType = 'UAS';
+			// }
 
         };
 
@@ -242,8 +247,9 @@ define([ 'app/app' ], function(app) {
 			} else {
                 var param = {selfSale : $scope.batch.sellType == 'self', currency : $scope.batch.currency, repeatImport : $scope.repeatImport};
 			}
+			var uploadUrl = $rootScope.isPcbStore ? '/release/product/batchRelease/pcb' : 'release/product/release/excel';
 			$upload.upload({
-				url: 'release/product/release/excel',
+				url: uploadUrl,
 				file: file,
 				method: 'POST',
 				params : param
@@ -298,6 +304,7 @@ define([ 'app/app' ], function(app) {
         // 下载模板
         $scope.download = function() {
             var show = SessionService.get($scope.userInfo.userUU + "-releasetip");
+            var downloadUrl = $rootScope.isPcbStore ? '/release/product/release/template/pcb' : '/release/product/release/template'
             if (!show) {
                 var modalInstance = $modal.open({
                     animation: true,
@@ -306,10 +313,10 @@ define([ 'app/app' ], function(app) {
                 });
                 modalInstance.result.then(function(response) {
                 }, function(res) {
-                    window.location.href = $rootScope.rootPath + '/release/product/release/template?currency' + '=' + $scope.batch.currency + ($rootScope.$$productOn.tab == 'bathOnPerson' ? '&isPerson=1' : '');
+                    window.location.href = $rootScope.rootPath + downloadUrl + '?currency=' + $scope.batch.currency + ($rootScope.$$productOn.tab == 'bathOnPerson' ? '&isPerson=1' : '');
                 });
             } else {
-                window.location.href = $rootScope.rootPath + '/release/product/release/template?currency' + '=' + $scope.batch.currency + ($rootScope.$$productOn.tab == 'bathOnPerson' ? '&isPerson=1' : '');
+                window.location.href = $rootScope.rootPath + downloadUrl + '?currency=' + $scope.batch.currency + ($rootScope.$$productOn.tab == 'bathOnPerson' ? '&isPerson=1' : '');
             }
         };
 
@@ -395,6 +402,7 @@ define([ 'app/app' ], function(app) {
             } else {
                 var datatem = {isAjax : true, batch : $scope.result.batch};
             }
+            var downloadFailureUrl = $rootScope.isPcbStore ? '/release/product/release/failure/pcb/xls' : 'release/product/release/failure/xls';
             if($scope.result && $scope.result.batch && $scope.result.filter) {
                 var form = document.getElementById('load-error');
                 form.action= 'release/product/release/failure/xls';
@@ -404,7 +412,7 @@ define([ 'app/app' ], function(app) {
                 var getDownLoadStatus = function () {
                     $.ajax({
                         type: 'GET',
-                        url: 'release/product/release/failure/xls',
+                        url: downloadFailureUrl,
                         data : datatem,
                         dataType : 'json',
                         success: function (data) {

+ 2 - 1
src/main/webapp/resources/view/usercenter/componentStore.html

@@ -79,7 +79,7 @@ td {
 }
 .collect-item{
     width: 193px;
-    height: 210px;
+    height: 222px;
     float:left;
     margin:8px 4px;
 	border: 1px solid #d8d8d8;
@@ -276,6 +276,7 @@ td {
 												<p ng-bind="item.componentinfo.brand.nameEn">
 												<p ng-bind="item.componentinfo.kind.nameCn">
 												<p ng-bind="item.componentinfo.code"></p>
+											  <p ng-bind="item.componentinfo.spec"></p>
                     </div> 
                 </a>
                 <span class="collect-delete" ng-click="cancleStore(item.id)" ng-show="show && !isBatch"><i class="fa fa-trash fa-2x"></i></span>      

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

@@ -664,12 +664,13 @@
 								<div class="pro_xq">
 									<a href="store/productDetail/{{::cart.batchCode}}" target="_blank">
                                         <img ng-src="{{cart.img || 'static/img/store/common/default.png'}}" width="60" height="60"/></a>
-									<div class="car_pro_xq">
+									<div class="car_pro_xq" style="padding-top: 10px">
 											<i class="text-hidden" ng-if="!cart.uuid">品牌:<a ng-bind="::cart.goods.brandNameEn || '-'" title="{{::cart.goods.brandNameEn}}" class="unstand"></a></i>
 									   <i class="text-hidden" ng-if="cart.uuid">品牌:<a href="product/brand/{{::cart.goods.branduuid}}/" target="_blank" ng-bind="::cart.goods.brandNameEn" title="{{::cart.goods.brandNameEn}}"></a></i>
 									    <i class="text-hidden" ng-if="!cart.uuid">类目:<a ng-bind="::cart.kiName || '-'" title="{{::cart.kiName}}" class="unstand"></a></i>
 									    <i class="text-hidden" ng-if="cart.uuid">类目:<a href="product/kind/{{cart.goods.kindUuid}}" target="_blank" ng-bind="::cart.kiName" title="{{::cart.kiName}}"></a></i>
 									    <i class="text-hidden">型号:<a href="store/productDetail/{{::cart.batchCode}}" target="_blank" ng-bind="::cart.code || '-'" title="{{::cart.code}}"></a></i>
+											<i class="text-hidden">规格:<a ng-bind="::cart.goods.spec || '-'" title="{{::cart.goods.spec}}" class="unstand"></a></i>
 									   </div>
 								</div>
                         	</span>

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

@@ -903,11 +903,14 @@
 							<div class="pro_xq">
 								<a href="store/productDetail/{{::detail.batchCode}}" target="_blank"><img ng-src="{{detail.img || 'static/img/store/common/default.png'}}" width="55" height="55"/></a>
 								<p>
-									品牌:<a href="product/brand/{{::detail.branduuid}}/" target="_blank" ng-if="detail.uuid"><em ng-bind="::detail.brName || '-'" title="{{::detail.brName}}"></em></a><br/>
+									品牌:<a href="product/brand/{{::detail.branduuid}}/" target="_blank" ng-if="detail.uuid">
+									<em ng-bind="::detail.brName || '-'" title="{{::detail.brName}}"></em></a><br ng-if="detail.uuid"/>
+									<a class="unstand" ng-if="!detail.uuid"><em ng-bind="::detail.brName || '-'" title="{{::detail.brName}}"></em></a><br ng-if="!detail.uuid"/>
 									类目:<a href="product/kind/{{::detail.kindUuid}}" target="_blank" ng-if="detail.uuid"><em ng-bind="::detail.kiName || '-'" title="{{::detail.kiName}}"></em></a><br ng-if="detail.uuid"/>
 									<a class="unstand" ng-if="!detail.uuid"><em ng-bind="detail.kiName || '-'" title="{{::detail.kiName}}"></em></a><br ng-if="!detail.uuid"/>
 									型号:<a href="store/productDetail/{{::detail.batchCode}}" target="_blank"><em ng-bind="::detail.cmpCode || '-'" title="{{::detail.cmpCode}}"></em></a>
-									<a  class="unstand" ng-if="!detail.uuid"><em ng-bind="detail.brName || '-'" title="{{::detail.brName}}"></em></a>
+									<a  class="unstand" ng-if="!detail.uuid"><em ng-bind="detail.brName || '-'" title="{{::detail.brName}}"></em></a><br/>
+									规格:<a><em ng-bind="::detail.spec || '-'" title="{{::detail.spec}}"></em></a><br/>
 								</p>
 							</div>
 						</span>

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

@@ -437,11 +437,14 @@
                             <p class="style01" ng-if="detail.uuid">类目:
 								<a ng-bind="detail.kiName || '-'" href="product/kind/{{::detail.kindUuid}}" title="{{detail.kiName}}" target="_blank"></a>
 							</p>
-							 <p class="style01" style="margin-top: 10px;" ng-if="!detail.uuid">类目:
+							 <p class="style01" ng-if="!detail.uuid">类目:
 								<a ng-bind="detail.kiName || '-'"  title="{{detail.kiName}}" class="unstand"></a>
 							</p>
 							<p class="style01">型号:
 								<a ng-bind="detail.cmpCode || '-'" href="store/productDetail/{{::detail.batchCode}}" title="{{detail.cmpCode}}" target="_blank"></a>
+							</p>
+													<p class="style01">规格:
+								<a ng-bind="detail.spec || '-'" title="{{detail.spec}}" target="_blank"></a>
 							</p>
 												</span>
 							<span class="wd01">交期:

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

@@ -278,6 +278,7 @@
 		margin-left: 4px;
 	}
 	.oder_xq_list dl .oder_l{
+		height: 104px;
 		background: #f6f9ff;
 		border-bottom: #fff 1px solid;
 	}
@@ -734,6 +735,7 @@
 								<p title="{{detail.kiName}}" ng-if="detail.uuid"><a href="product/kind/{{detail.goodsHistory.kindUuid}}" target="_blank" style="color: #323232">类目:<b ng-bind="detail.kiName || '-'"></b></a></p>
 								<p title="{{detail.kiName}}" ng-if="!detail.uuid"><a style="color: #323232" class="unstand">类目:<b ng-bind="detail.kiName || '-'"></b></a></p>
 								<p><a href="store/productDetail/{{::detail.batchCode}}" target="_blank" style="color: #323232">型号:<b ng-bind="detail.cmpCode || '-'" title="{{detail.cmpCode}}"></b></a></p>
+								<p><a style="color: #323232">规格:<b ng-bind="detail.spec || '-'" title="{{detail.spec}}"></b></a></p>
 								</div>
                         </span>
 						<span class="wd01" ng-if="order.status == 501">
@@ -772,7 +774,7 @@
 							<span ng-if="order.status != 501" ng-bind="detail.number" class="number" style="border: none;"></span>
                             </div>
                         </span>
-							<span class="price-step"  style="width: 10%" ng-class="{'none': detail.goodsHistory.prices.length > 1}">
+							<span class="price-step"  style="width: 10%;text-overflow: ellipsis;overflow: hidden;white-space: nowrap;" ng-class="{'none': detail.goodsHistory.prices.length > 1}">
 								<em ng-bind="detail.ensurePrice | formateNumber : 6 | currencySysmbol : detail.currencyName" class="red"></em>
 								<p>
 									<a name="{{detail.id}}" ng-click="togglePrice(detail)" ng-if="detail.goodsHistory.prices.length > 1" ng-blur="togglePriceBlur(detail)" style="font-size: 12px">价格梯度</a>

+ 6 - 6
src/main/webapp/resources/view/usercenter/forstore/seekPurchase.html

@@ -29,7 +29,7 @@
         position: relative;
     }
     .seek-purchase .seek-purchase-content .publish-purchase .fl .form-block >span {
-        width: 103px;
+        width: 105px;
         height: 24px;
         line-height: 24px;
         display: inline-block;
@@ -71,7 +71,7 @@
     .seek-purchase .seek-purchase-content .publish-purchase .fl .form-block ul.similar-list {
         position: absolute;
         top: 23px;
-        left: 103px;
+        left: 105px;
         background: #fff;
         border: 1px solid #b5b5b5;
         z-index: 1;
@@ -896,8 +896,8 @@
                     </ul>
                 </div>
                 <div class="form-block">
-                    <span>类目(产品名称)</span>
-                    <input type="text" class="form-group" ng-model="applyObj.prodTitle" ng-change="onProdTitleInput()">
+                    <span><i>*</i>类目(产品名称)</span>
+                    <input type="text" class="form-group" ng-model="applyObj.prodTitle" ng-class="{'error': !validObj.prodTitle}" ng-change="onProdTitleInput()" ng-blur="checkProdTitle()">
                 </div>
                 <div class="form-block">
                     <span><i>*</i>型号</span>
@@ -1209,8 +1209,8 @@
 
                                             <img ng-if="of.agreed == 1" src="static/img/seekPurchase/recieved.png" alt="" class="ng-scope">
                                             <img ng-if="of.agreed == 0" src="static/img/seekPurchase/refused.png" alt="" class="ng-scope">
-                                            <span class="seek-btn" ng-if="!seek.agreed && !of.agreed && of.agreed != 0" ng-click="adopt(of.id)">采纳</span>
-                                            <a class="seek-btn" ng-if="!of.agreed && of.agreed != 0" ng-click="setActiveRefuse(of)">拒绝</a>
+                                            <span class="seek-btn" ng-if="of.agreed != 0 && of.agreed != 1" ng-click="adopt(of)">采纳</span>
+                                            <a class="seek-btn" ng-if="of.agreed != 0 && of.agreed != 1" ng-click="setActiveRefuse(of)">拒绝</a>
                                         </td>
                                     </tr>
                                     </tbody>

+ 1 - 1
src/main/webapp/resources/view/vendor/forstore/purchaseOffer.html

@@ -712,7 +712,7 @@
                 <td class="left-time" ng-if="seek.remainingTime == null"><span style="color: red;">-</span></td>
                 <td class="operate" ng-switch="seek.agreed">
                     <a ng-click="setLinkBoxIndex($index)">联系买家<img src="static/img/seekPurchase/link-buyer.png" alt=""></a>
-                    <div class="is-say-price" ng-if="seek.agreed != 1 &&seek.agreed != 0">已报价 <img src="static/img/seekPurchase/check.png" alt="">
+                    <div class="is-say-price" ng-if="seek.agreed != 1 && seek.agreed != 0 || seek.replies">已报价 <img src="static/img/seekPurchase/check.png" alt="">
                         <div class="say-price-history">
                             <p class="price-title">历史报价</p>
                             <div>

+ 11 - 8
src/main/webapp/resources/view/vendor/forstore/purchase_detail.html

@@ -478,20 +478,23 @@
 						<dd class="oder_l" ng-repeat="detail in purchase.purchaseDetails">
 						<span class="wd02">
 							<a href="store/productDetail/{{::detail.batchCode}}" target="_blank"><img ng-src="{{detail.img ? detail.img : 'static/img/store/common/default.png'}}"/></a>
-							<p class="style01" style="margin-top: 10px;" ng-if="detail.uuid">类目:
+							<p class="style01" ng-if="detail.uuid" style="margin-top: 10px;">品牌:
+								<a ng-bind="detail.brName || '-'" href="product/brand/{{::detail.branduuid}}/" title="{{detail.brName}}" target="_blank"></a>
+							</p>
+							<p class="style01" ng-if="!detail.uuid" style="margin-top: 10px;">品牌:
+								<a ng-bind="detail.brName || '-'" title="{{detail.brName}}" class="unstand"></a>
+							</p>
+							<p class="style01"  ng-if="detail.uuid">类目:
 								<a ng-bind="detail.kiName || '-'" href="product/kind/{{::detail.kindUuid}}" title="{{detail.kiName}}" target="_blank"></a>
 							</p>
-							<p class="style01" style="margin-top: 10px;" ng-if="!detail.uuid">类目:
+							<p class="style01"  ng-if="!detail.uuid">类目:
 								<a ng-bind="detail.kiName || '-'" title="{{detail.kiName}}" class="unstand"></a>
 							</p>
 							<p class="style01">型号:
 								<a ng-bind="detail.cmpCode || '-'" href="store/productDetail/{{::detail.batchCode}}" title="{{detail.cmpCode}}" target="_blank"></a>
 							</p>
-							<p class="style01" ng-if="detail.uuid">品牌:
-								<a ng-bind="detail.brName || '-'" href="product/brand/{{::detail.branduuid}}/" title="{{detail.brName}}" target="_blank"></a>
-							</p>
-							<p class="style01" ng-if="!detail.uuid">品牌:
-								<a ng-bind="detail.brName || '-'" title="{{detail.brName}}" class="unstand"></a>
+							<p class="style01">型号:
+								<a ng-bind="detail.spec || '-'" title="{{detail.spec}}" target="_blank"></a>
 							</p>
 						</span>
 						<span class="wd01">交期:
@@ -973,7 +976,7 @@
 <style>
 	.com-out-box{
 		position: fixed;
-		z-index: 2;
+		z-index: 999;
 		height: 150px;
 		opacity: 1;
 		background-color: white;

+ 113 - 5
src/main/webapp/resources/view/vendor/forstore/seekPurchase.html

@@ -201,12 +201,13 @@
         color: #f62d37;
     }
     .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate {
+        position: relative;
         font-size: 12px;
     }
     .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate a{
         color: #4290f7;
     }
-    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate div {
+    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate > div {
         width: 64px;
         height: 24px;
         line-height: 24px;
@@ -220,7 +221,7 @@
     .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate div.disable{
         background: #cccbcb;
     }
-    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate span {
+    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate > span {
         color: #39ae05;
         display: block;
     }
@@ -611,6 +612,90 @@
         border: 1px solid #4290f7;
         color: #333;
     }
+    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price {
+        color: #39ae05;
+        background: transparent;
+        width: 100%;
+    }
+    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price .say-price-history {
+        position: absolute;
+        top: 91px;
+        right: 11px;
+        line-height: normal;
+        width: 198px;
+        height: 0;
+        background: #fff;
+        border: 1px solid #fab89a;
+        overflow: hidden;
+        transition: height 1s;
+        -moz-transition: height 1s; /* Firefox 4 */
+        -webkit-transition: height 1s; /* Safari 和 Chrome */
+        -o-transition: height 1s; /* Opera */
+        opacity: 0;
+        z-index: 10;
+    }
+    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price .say-price-history p {
+        color: #020202;
+        font-weight: bold;
+        margin: 0;
+    }
+    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price .say-price-history p.price-title {
+        background: #fee6db;
+        height: 28px;
+        line-height: 28px;
+    }
+    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price .say-price-history p.price-level {
+        margin: 6px 0;
+        text-align: left;
+    }
+    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price .say-price-history > div {
+        padding: 9px 12px;
+    }
+    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price .say-price-history > div > div {
+        display: inline-block;
+        text-align: left;
+    }
+    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price .say-price-history > div > div:nth-child(1) {
+        /*float: left;*/
+    }
+    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price .say-price-history > div > div:nth-child(2) {
+        margin-left: 32px;
+    }
+    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price .say-price-history > div > div span {
+        color: #020202;
+        margin: 0;
+    }
+    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price .say-price-history > div > div span.red-text {
+        color: #f62d37;
+    }
+    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price .say-price-history > div > div.pre-line {
+        display: block;
+        padding: 13px 0;
+        border-bottom: 1px dashed #fee6db;
+    }
+    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price .say-price-history > div ul li {
+        color: #333;
+        height: 22px;
+        line-height: 22px;
+        padding: 0 6px;
+    }
+    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price .say-price-history > div ul li:nth-child(odd) {
+        background: #f6f5f4;
+    }
+    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price .say-price-history > div ul li span {
+        color: #333;
+        display: inline-block;
+        text-align: left;
+        width: 50%;
+        margin: 0;
+    }
+    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price .say-price-history > div ul li:last-child span {
+        color: #4290f7;
+    }
+    .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price:hover .say-price-history {
+        opacity: 1;
+        height: 210px;
+    }
 </style>
 <div class="user_right fr seek-purchase">
     <!--求购询价-->
@@ -659,8 +744,8 @@
             <div class="sreach fr">
                 <span>求购筛选</span>
                 <select class="form-control select-adder vendor-type" ng-model="vendorType" ng-change="onVendorTypeChange(vendorType)">
-                    <option value="self">推荐询价</option>
-                    <option value="all">全部</option>
+                    <option value="all">公司商机</option>
+                    <option value="self">我的商机</option>
                 </select>
                 <span>发布时间&nbsp;</span>
                 <div class="date fl">
@@ -751,7 +836,30 @@
                         <!--<a ng-click="setLinkBoxIndex($index)">联系买家 <img src="static/img/seekPurchase/link-buyer.png" alt=""></a>-->
                         <div ng-if="!seek.newId && userInfo.enterprise.uu != seek.inquiry.enUU && seek.quoted != 1 && seek.remainingTime > 0" ng-click="setSeekActive(seek, true, index)">我要报价</div>
                         <div class="disable" ng-if="userInfo.enterprise.uu == seek.inquiry.enUU && seek.quoted != 1 && seek.remainingTime > 0" title="此为贵公司的求购" ng-disabled="true">我要报价</div>
-                        <span ng-if="seek.quoted == 1 || seek.newId">已报价 <img src="static/img/seekPurchase/check.png" alt=""></span>
+                        <!--<span ng-if="seek.quoted == 1 || seek.newId">已报价 <img src="static/img/seekPurchase/check.png" alt=""></span>-->
+                        <div class="is-say-price" ng-if="seek.quoted == 1 || seek.newId">已报价 <img src="static/img/seekPurchase/check.png" alt="">
+                            <div class="say-price-history">
+                                <p class="price-title">历史报价</p>
+                                <div>
+                                    <div>
+                                        <span>交期:</span><span class="red-text" ng-bind="seek.quotation.leadtime + '天'">6 天</span>
+                                    </div>
+                                    <!--<div>-->
+                                    <!--<span>附件:</span><a href="">下载</a>-->
+                                    <!--</div>-->
+                                    <!--<div class="pre-line">-->
+                                    <!--<span>:</span>2016-05-21-->
+                                    <!--</div>-->
+                                    <p class="price-level">价格梯度</p>
+                                    <ul>
+                                        <li ng-repeat="re in seek.quotation.replies">
+                                            <span ng-bind="re.lapQty + '+'">1333+</span>
+                                            <span title="{{seek.quotation.currency + re.price | currencyStr}}">{{seek.quotation.currency + re.price | currencyStr}}</span>
+                                        </li>
+                                    </ul>
+                                </div>
+                            </div>
+                        </div>
                         <!--<img ng-if="seek.quoted == 1" src="static/img/seekPurchase/recieved.png" alt="">-->
                     </td>
                 </tr>

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

@@ -1055,14 +1055,14 @@
                   </div>
                 </div>
               </li>
-                <li>
+               <!-- <li>
                     <div class="fl">企业简介</div>
                     <div class="col-sm-10" ng-if="updateState">
                         <textarea class="form-control" style="border-radius: inherit;resize: none;height: 200px;" title="description" ng-model="enterpriseInfo.description" maxlength="500" required></textarea>
                     </div>
                     <div class="fr" ng-if="!updateState"><span
                             ng-bind="enterpriseInfo.description || '暂无信息'"></span></div>
-                </li>
+                </li>-->
             </ul>
             <!--<div class="deal-btn" ng-if="userInfo.sys">-->
             <!--<button type="button" class="edit btn btn-primary" ng-if=" !updateState"  ng-click="changeToUpdate(true)">修改</button>-->

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

@@ -1948,9 +1948,10 @@
 				<li ng-class="{'active': tab == 'material_person'}"><a ui-sref="vendor_material_person">个人产品库</a></li>
 				<li ng-class="{'active': tab == 'onSale'}"><a ui-sref="vendor_onSale">在售产品</a></li>
 				<li ng-class="{'active': tab == 'undercarriage'}"><a ui-sref="vendor_undercarriage">上下架历史</a></li>
+				<li ng-if="isPcbStore"><a ui-sref="vendor_upload">产品导入</a></li>
 			</ul>
 		</div>
-		<div class="com_tab com_tab2" style="margin-bottom: 0px">
+		<div class="com_tab com_tab2" ng-if="!isPcbStore" style="margin-bottom: 0px">
 			<ul class="fl distance" style="width: 100%">
 				<li ng-class="{active : standard_tab == 'unstandard'}"  ng-click="toggleStandard('unstandard')" title="非标产品({{nCount}})"><a href="" class="standard">非标产品(<em class="count">{{nCount}}</em>)</a></li>
 				<li ng-class="{active : standard_tab =='standard'}" ng-click="toggleStandard('standard')" title="标准产品({{sCount}})"><a href="" class="standard">标准产品(<em class="count">{{sCount}}</em>)</a></li>
@@ -1975,7 +1976,7 @@
 							{{item.userName}}({{item.userUU}})
 						</li>
 					</ul>-->
-					<input type="text" class="form-control keyword-material" ng-model="param.keyword" ng-search="onSearch()" placeholder="品牌/类目/型号"/>
+					<input type="text" class="form-control keyword-material" ng-model="param.keyword" ng-search="onSearch()" placeholder="品牌/型号"/>
 					<button ng-click="onSearch()">搜索</button>
 					<!--<a ng-click="download()">批量导出</a>-->
 				</div>

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

@@ -1814,6 +1814,7 @@
 				<li ng-class="{'active': tab == 'material_person'}"><a ui-sref="vendor_material_person">个人产品库</a></li>
 				<li ng-class="{'active': tab == 'onSale'}"><a ui-sref="vendor_onSale">在售产品</a></li>
 				<li ng-class="{'active': tab == 'undercarriage'}"><a ui-sref="vendor_undercarriage">上下架历史</a></li>
+				<li ng-if="isPcbStore"><a ui-sref="vendor_upload">产品导入</a></li>
 			</ul>
 		</div>
 		<!--<div class="com_tab">
@@ -1833,7 +1834,7 @@
 		<div ng-if="standard_tab == 'unstandard' || standard_tab =='standard'">
 			<div class="search-check">
 				<div class="search fl">
-					<input type="text" class="form-control" ng-model="param.keyword" ng-search="onSearch()" placeholder="品牌/类目/型号"/>
+					<input type="text" class="form-control" ng-model="param.keyword" ng-search="onSearch()" placeholder="品牌/型号"/>
 					<button ng-click="onSearch()">搜索</button>
 					<!--<a ng-click="download()">批量导出</a>-->
 				</div>

+ 1 - 0
src/main/webapp/resources/view/vendor/forstore/vendor_onSale.html

@@ -961,6 +961,7 @@
                 <li ng-class="{'active': tab == 'material_person'}"><a ui-sref="vendor_material_person">个人产品库</a></li>
                 <li ng-class="{'active': tab == 'onSale'}"><a ui-sref="vendor_onSale">在售产品</a></li>
                 <li ng-class="{'active': tab == 'undercarriage'}"><a ui-sref="vendor_undercarriage">上下架历史</a></li>
+                <li ng-if="isPcbStore"><a ui-sref="vendor_upload">产品导入</a></li>
                 <li class="down-goods">
                     <!--<span ng-click="downGoods()">
                         <i class="fa fa-file-excel-o fa-fw"></i>导出Excel

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

@@ -1388,8 +1388,8 @@
                                     <a ng-if="!detail.uuid" class="unstand"><em ng-bind="detail.brName || '-'" title="{{::detail.brName}}"></em></a><br/>
                                     类目:<a href="product/kind/{{::detail.kindUuid}}" target="_blank" ng-if="detail.uuid"><em ng-bind="detail.kiName || '-'" title="{{::detail.kiName}}"></em></a><br ng-if="detail.uuid"/>
                                     <a ng-if="!detail.uuid" class="unstand"><em ng-bind="detail.kiName || '-'" title="{{::detail.kiName}}"></em></a><br ng-if="!detail.uuid"/>
-                                    型号:<a href="store/productDetail/{{::detail.batchCode}}" target="_blank"><em ng-bind="detail.cmpCode || '-'" title="{{::detail.cmpCode}}"></em></a>
-
+																	  型号:<a href="store/productDetail/{{::detail.batchCode}}" target="_blank"><em ng-bind="detail.cmpCode || '-'" title="{{::detail.cmpCode}}"></em></a><br />
+																		规格:<a><em ng-bind="detail.spec || '-'" title="{{::detail.spec}}"></em></a>
                                 </p>
                             </div>
                         </span>

+ 43 - 7
src/main/webapp/resources/view/vendor/forstore/vendor_store_maintain.html

@@ -594,7 +594,7 @@
 				</div>
 			</div>
 			<!-- 企业信息展示 start -->
-			<div class="row com_row title_row">
+		<!--	<div class="row com_row title_row">
 				<div class="col-md-12 custom_col">
 					<h2>企业信息</h2>
 				</div>
@@ -630,7 +630,7 @@
 				<div class="col-md-10 custom_col">
 					<span ng-if="enterprise">{{sampleStore.enterprise.enUrl || '暂无信息'}}</span>
 				</div>
-			</div>
+			</div>-->
 			<div class="row com_row" ng-if="enterprise.enType.length > 0">
 				<div class="col-md-2 custom_col">
 					<span>企业类型</span>
@@ -702,7 +702,23 @@
 					<span>主营产品</span>
 				</div>
 				<div class="col-md-10 custom_col">
-					<textarea class="form-control" style="border-radius: inherit;resize: none;height: 200px;" title="description" ng-model="sampleStore.description" maxlength="500"></textarea>
+					<textarea class="form-control" style="border-radius: inherit;resize: none;height: 200px;margin-top: 10px;" title="description" ng-model="sampleStore.description" maxlength="500"></textarea>
+				</div>
+			</div>
+			<div class="row com_row">
+				<div class="col-md-2 custom_col">
+					<span>应用领域</span>
+				</div>
+				<div class="col-md-10 custom_col">
+					<textarea class="form-control" style="border-radius: inherit;resize: none;height: 200px;margin-top: 10px;" title="application" ng-model="sampleStore.storeApplication" maxlength="100"></textarea>
+				</div>
+			</div>
+			<div class="row com_row">
+				<div class="col-md-2 custom_col">
+					<span>企业介绍</span>
+				</div>
+				<div class="col-md-10 custom_col">
+					<textarea class="form-control" style="border-radius: inherit;resize: none;height: 200px;margin-top: 10px;" title="description" ng-model="sampleStore.enterprise.description" maxlength="500"></textarea>
 				</div>
 			</div>
 			<!--<div class="row com_row" style="margin-top: 10px;">
@@ -713,14 +729,14 @@
 					<input type="text" class="form-control" style="border-radius: inherit;" title="enUrl" ng-model="sampleStore.enterprise.enUrl" maxlength="50"/>
 				</div>
 			</div>-->
-			<div class="row com_row" style="margin-top: 10px;">
+			<!--<div class="row com_row" style="margin-top: 10px;">
 				<div class="col-md-2 custom_col">
 					<span>店铺地址<strong class="text-inverse">*</strong></span>
 				</div>
 				<div class="col-md-10 custom_col">
 					<input type="text" class="form-control" style="border-radius: inherit;" title="address" ng-model="sampleStore.enterprise.address" maxlength="50"/>
 				</div>
-			</div>
+			</div>-->
 			<div class="row com_row" style="margin-top: 10px;">
 				<div class="col-md-2 custom_col">
 					<span>电&nbsp;&nbsp;&nbsp;&nbsp;话<strong class="text-inverse">*</strong></span>
@@ -806,6 +822,26 @@
 					</div>
 				</div>
 			</div>
+			<div class="row com_row">
+				<div class="col-md-2 custom_col">
+					<span>应用领域</span>
+				</div>
+				<div class="col-md-10 custom_col show_info">
+					<div style="word-break: break-all;">
+						{{sampleStore.storeApplication || '暂无信息'}}
+					</div>
+				</div>
+			</div>
+			<div class="row com_row">
+				<div class="col-md-2 custom_col">
+					<span>企业介绍</span>
+				</div>
+				<div class="col-md-10 custom_col show_info">
+					<div style="word-break: break-all;">
+						{{sampleStore.enterprise.description || '暂无信息'}}
+					</div>
+				</div>
+			</div>
 			<!--<div class="row com_row" style="margin-top: 10px;">
 				<div class="col-md-2 custom_col">
 					<span>官网地址</span>
@@ -816,7 +852,7 @@
 					</div>
 				</div>
 			</div>-->
-			<div class="row com_row" style="margin-top: 10px;">
+			<!--<div class="row com_row" style="margin-top: 10px;">
 				<div class="col-md-2 custom_col">
 					<span>店铺地址</span>
 				</div>
@@ -825,7 +861,7 @@
 						{{sampleStore.enterprise.address || '暂无信息'}}
 					</div>
 				</div>
-			</div>
+			</div>-->
 			<div class="row com_row" style="margin-top: 10px;">
 				<div class="col-md-2 custom_col">
 					<span>电&nbsp;&nbsp;&nbsp;&nbsp;话</span>

+ 1 - 0
src/main/webapp/resources/view/vendor/forstore/vendor_undercarriage.html

@@ -580,6 +580,7 @@
                 <li ng-class="{'active': tab == 'material_person'}"><a ui-sref="vendor_material_person">个人产品库</a></li>
                 <li ng-class="{'active': tab == 'onSale'}"><a ui-sref="vendor_onSale">在售产品</a></li>
                 <li ng-class="{'active': tab == 'undercarriage'}"><a ui-sref="vendor_undercarriage">上下架历史</a></li>
+                <li ng-if="isPcbStore"><a ui-sref="vendor_upload">产品导入</a></li>
             </ul>
         </div>
         <div class="search-check">

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

@@ -528,10 +528,17 @@
     <!--货品管理-->
     <div class="pro_management device">
         <div class="com_tab">
-            <ul class="fl" style="width: 100%">
+            <ul class="fl" style="width: 100%" ng-if="!isPcbStore">
                 <li ng-class="{'active': $$productOn.tab == 'bathOn'}" ng-click="toggleActive('bathOn')"><a href="">导入企业库</a></li>
                 <li ng-class="{'active': $$productOn.tab == 'bathOnPerson'}" ng-click="toggleActive('bathOnPerson')"><a href="">导入个人库</a></li>
             </ul>
+            <ul class="fl" style="width: 100%" ng-if="isPcbStore">
+                <li><a ui-sref="vendor_material">企业产品库</a></li>
+                <li><a ui-sref="vendor_material_person">个人产品库</a></li>
+                <li><a ui-sref="vendor_onSale">在售产品</a></li>
+                <li><a ui-sref="vendor_undercarriage">上下架历史</a></li>
+                <li class="active"><a ui-sref="vendor_upload">产品导入</a></li>
+            </ul>
         </div>
         <div class="remind-line" ng-show="$$productOn.tab == 'bathOn' && showTip"><span class="fl">导入企业库的产品同时会进行上架销售并展示在店铺</span><a ng-click="closeTip()" class="fr">&times;</a></div>
         <div class="remind-line" ng-show="$$productOn.tab == 'bathOnPerson' && showTip"><span class="fl">创建您的个人产品库,可为您精准推送客户需求</span><a href="help/helpDetail/56" target="_blank" class="operate-introduce">操作说明</a><a ng-click="closeTip()" class="fr">&times;</a></div>
@@ -565,7 +572,7 @@
                                 <label for="sellbyself" ng-disabled="!batch.selfSellEabled"></label>
                                 <span ng-disabled="!batch.selfSellEabled">店铺自营</span>
                             </label>-->
-                            <span>
+                            <span ng-disabled="isPcbStore">
                                 <img ng-show="batch.sellType == 'self'" src="static/img/upload/daishou-default.png" alt="" ng-click="sellType('UAS')">
                                 <img ng-hide="batch.sellType == 'self'" src="static/img/upload/daishou-active.png" alt="">
                             </span>

+ 5 - 5
src/main/webapp/resources/view/vendor/left_nav.html

@@ -46,8 +46,8 @@
 		<div>
 		<li ng-class="{'active' : active == 'vendor_order'}"><span  ui-sref="vendor_order">订单中心</span></li>
 			<!--	<li ng-class="{'active' : active == 'vendor_productOn'}"><span  ui-sref="vendor_productOn">产品导入</span></li>-->
-			<li ng-class="{'active' : active == 'vendor_productOn'}"><span  ui-sref="vendor_upload">产品导入</span></li>
-			<li ng-class="{'active' : active == 'vendor_material'}"><span  ui-sref="vendor_material">产品管理</span></li>
+			<li ng-class="{'active' : active == 'vendor_productOn'}" ng-if="!isPcbStore"><span  ui-sref="vendor_upload">产品导入</span></li>
+			<li ng-class="{'active' : active == 'vendor_material'}"><span  ui-sref="vendor_material" ng-bind="isPcbStore ? 'PCB产品管理' : '产品管理'">产品管理</span></li>
 			<li ng-class="{'active' : active == 'vendor_store'}">
 				<!-- 我要开店 !store && applyStatus == 'NONE' -->
 				<span  ui-sref="vendor_store_apply" ng-if="!store && applyStatus == 'NONE'">开店申请</span>
@@ -60,7 +60,7 @@
 				<!-- 我的店铺申述 store -->
 				<span  ui-sref="vendor_store_maintain" ng-if="store && store.status && store.status !== 'OPENED'">我的店铺</span>
 			</li>
-			<li ng-class="{'active' : active == 'vendor_seek_purchase'}"><span ui-sref="vendorSeekPurchase">我的商机</span></li>
+			<li ng-class="{'active' : active == 'vendor_seek_purchase'}"><span ui-sref="vendorSeekPurchase">商机管理</span></li>
 		<li ng-class="{'active' : active == 'vendor_logistics'}">
 			<span  ui-sref="vendor_logistics" ng-hide="store && (!store.status || store.status === 'OPENED')">物流管理</span>
 			<span  ui-sref="vendor_deliveryRule" ng-if="store && (!store.status || store.status === 'OPENED')">物流管理</span>
@@ -69,8 +69,8 @@
 		<li ng-class="{'active' : active == 'vendor_invoice'}"><span  ui-sref="vendorInvoice">发票管理</span></li>
 	<!--	<li ng-class="{'active' : active == 'vendor_logistics'}"><span  ui-sref="vendor_logistics">物流管理</span></li>-->
 		<li ng-class="{'active' : active == 'pay_center'}"><span  ui-sref="pay_center">结算中心</span></li>
-		<li ng-class="{'active' : active == 'vendor_brand_apply'}"><span  ui-sref="vendor_brand_apply">品牌申请</span></li>
-		<li ng-class="{'active' : active == 'vendor_component_apply'}"><span  ui-sref="vendor_component_apply">器件申请</span></li>
+		<li ng-class="{'active' : active == 'vendor_brand_apply'}" ng-if="!isPcbStore"><span  ui-sref="vendor_brand_apply">品牌申请</span></li>
+		<li ng-class="{'active' : active == 'vendor_component_apply'}" ng-if="!isPcbStore"><span  ui-sref="vendor_component_apply">器件申请</span></li>
 
 		<!--<li ng-class="{'active' : active == 'vendor_repository'}"><span  ui-sref="vendor_repository">仓库管理</span></li>-->
 		<!--<li ng-class="{'active' : active == 'vendor_after_sale'}" class="undo">-->