Browse Source

Merge branch 'dev-mysql' of ssh://10.10.100.21/source/platform-b2c into dev-mysql

yujia 8 years ago
parent
commit
d166efdfb2
100 changed files with 5162 additions and 371 deletions
  1. 1 1
      pom.xml
  2. 18 1
      src/main/java/com/uas/platform/b2c/common/account/controller/AuthenticationController.java
  3. 51 1
      src/main/java/com/uas/platform/b2c/common/account/controller/EnterpriseController.java
  4. 72 0
      src/main/java/com/uas/platform/b2c/common/account/controller/SecQuestionController.java
  5. 4 1
      src/main/java/com/uas/platform/b2c/common/account/controller/SecurityController.java
  6. 534 22
      src/main/java/com/uas/platform/b2c/common/account/controller/UserController.java
  7. 10 0
      src/main/java/com/uas/platform/b2c/common/account/dao/SecQuestionDao.java
  8. 13 0
      src/main/java/com/uas/platform/b2c/common/account/dao/UserCacheEnterpriseDao.java
  9. 16 0
      src/main/java/com/uas/platform/b2c/common/account/dao/UserQuestionDao.java
  10. 39 1
      src/main/java/com/uas/platform/b2c/common/account/model/Enterprise.java
  11. 125 0
      src/main/java/com/uas/platform/b2c/common/account/model/FormEnterprise.java
  12. 74 0
      src/main/java/com/uas/platform/b2c/common/account/model/SecQuestion.java
  13. 14 10
      src/main/java/com/uas/platform/b2c/common/account/model/UsageLog.java
  14. 96 2
      src/main/java/com/uas/platform/b2c/common/account/model/User.java
  15. 1 1
      src/main/java/com/uas/platform/b2c/common/account/model/UserBaseInfo.java
  16. 186 0
      src/main/java/com/uas/platform/b2c/common/account/model/UserCacheEnterprise.java
  17. 92 1
      src/main/java/com/uas/platform/b2c/common/account/model/UserInfo.java
  18. 113 0
      src/main/java/com/uas/platform/b2c/common/account/model/UserQuestion.java
  19. 10 2
      src/main/java/com/uas/platform/b2c/common/account/service/EnterpriseService.java
  20. 38 0
      src/main/java/com/uas/platform/b2c/common/account/service/SecQuestionService.java
  21. 24 0
      src/main/java/com/uas/platform/b2c/common/account/service/UserQuestionService.java
  22. 55 7
      src/main/java/com/uas/platform/b2c/common/account/service/UserService.java
  23. 51 11
      src/main/java/com/uas/platform/b2c/common/account/service/impl/EnterpriseServiceImpl.java
  24. 62 0
      src/main/java/com/uas/platform/b2c/common/account/service/impl/SecQuestionServiceImpl.java
  25. 42 0
      src/main/java/com/uas/platform/b2c/common/account/service/impl/UserQuestionServiceImpl.java
  26. 106 21
      src/main/java/com/uas/platform/b2c/common/account/service/impl/UserServiceImpl.java
  27. 1 0
      src/main/java/com/uas/platform/b2c/common/account/v2/controller/UserController.java
  28. 22 2
      src/main/java/com/uas/platform/b2c/common/account/v2/service/impl/EnterpriseServiceImpl.java
  29. 83 22
      src/main/java/com/uas/platform/b2c/common/account/v2/service/impl/UserServiceImpl.java
  30. 4 0
      src/main/java/com/uas/platform/b2c/core/constant/Status.java
  31. 25 5
      src/main/java/com/uas/platform/b2c/core/support/log/UsageBufferedLogger.java
  32. 38 0
      src/main/java/com/uas/platform/b2c/external/erp/commodity/service/impl/BankInfoServiceImpl.java
  33. 130 0
      src/main/java/com/uas/platform/b2c/external/erp/commodity/service/impl/ProductDetailERPServiceImpl.java
  34. 37 0
      src/main/java/com/uas/platform/b2c/external/erp/commodity/util/ModelConverter.java
  35. 51 0
      src/main/java/com/uas/platform/b2c/external/erp/common/util/ModelConverter.java
  36. 154 0
      src/main/java/com/uas/platform/b2c/external/erp/order/service/impl/B2cOrderServiceImpl.java
  37. 72 12
      src/main/java/com/uas/platform/b2c/external/erp/order/service/impl/OrderServiceImpl.java
  38. 70 1
      src/main/java/com/uas/platform/b2c/external/erp/order/util/ModelConverter.java
  39. 111 0
      src/main/java/com/uas/platform/b2c/external/erp/prod/service/impl/ProdServiceImpl.java
  40. 2 1
      src/main/java/com/uas/platform/b2c/external/erp/product/service/impl/OperationInfoServiceImpl.java
  41. 41 4
      src/main/java/com/uas/platform/b2c/external/erp/product/util/ModelConverter.java
  42. 18 20
      src/main/java/com/uas/platform/b2c/fa/payment/controller/BankInfoController.java
  43. 46 2
      src/main/java/com/uas/platform/b2c/fa/payment/controller/BankTransferController.java
  44. 75 41
      src/main/java/com/uas/platform/b2c/fa/payment/dao/BankInfoDao.java
  45. 32 18
      src/main/java/com/uas/platform/b2c/fa/payment/model/BankInfo.java
  46. 63 0
      src/main/java/com/uas/platform/b2c/fa/payment/model/BankTransfer.java
  47. 21 4
      src/main/java/com/uas/platform/b2c/fa/payment/service/BankInfoService.java
  48. 12 1
      src/main/java/com/uas/platform/b2c/fa/payment/service/BankTransferService.java
  49. 138 67
      src/main/java/com/uas/platform/b2c/fa/payment/service/impl/BankInfoServiceImpl.java
  50. 58 7
      src/main/java/com/uas/platform/b2c/fa/payment/service/impl/BankTransferServiceImpl.java
  51. 7 1
      src/main/java/com/uas/platform/b2c/fa/settlement/service/impl/SettlementServiceImpl.java
  52. 11 15
      src/main/java/com/uas/platform/b2c/logistics/service/impl/InvoiceFPurchaseServiceImpl.java
  53. 35 2
      src/main/java/com/uas/platform/b2c/prod/commodity/controller/ProductController.java
  54. 26 0
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/GoodsDao.java
  55. 17 0
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductDao.java
  56. 20 0
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductDetailDao.java
  57. 5 1
      src/main/java/com/uas/platform/b2c/prod/commodity/facade/impl/ProductFacadeImpl.java
  58. 1 1
      src/main/java/com/uas/platform/b2c/prod/commodity/model/Goods.java
  59. 30 1
      src/main/java/com/uas/platform/b2c/prod/commodity/model/Product.java
  60. 245 0
      src/main/java/com/uas/platform/b2c/prod/commodity/model/ProductDetail.java
  61. 10 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/GoodsService.java
  62. 24 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java
  63. 21 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java
  64. 132 3
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductServiceImpl.java
  65. 30 1
      src/main/java/com/uas/platform/b2c/prod/product/brand/controller/BrandSubmitController.java
  66. 1 1
      src/main/java/com/uas/platform/b2c/prod/product/brand/modal/Brand.java
  67. 8 2
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/BrandSubmitService.java
  68. 47 1
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/BrandSubmitServiceImpl.java
  69. 1 1
      src/main/java/com/uas/platform/b2c/prod/product/common/CommonTask.java
  70. 15 3
      src/main/java/com/uas/platform/b2c/prod/product/common/api/CommonCountController.java
  71. 3 3
      src/main/java/com/uas/platform/b2c/prod/product/common/model/CommonCount.java
  72. 6 0
      src/main/java/com/uas/platform/b2c/prod/product/component/service/impl/ComponentSubmitServiceImpl.java
  73. 58 5
      src/main/java/com/uas/platform/b2c/trade/order/controller/OrderController.java
  74. 3 0
      src/main/java/com/uas/platform/b2c/trade/order/dao/OrderDetailDao.java
  75. 14 0
      src/main/java/com/uas/platform/b2c/trade/order/model/Order.java
  76. 1 1
      src/main/java/com/uas/platform/b2c/trade/order/model/OrderDetail.java
  77. 24 0
      src/main/java/com/uas/platform/b2c/trade/order/model/OrderSimpleInfo.java
  78. 84 0
      src/main/java/com/uas/platform/b2c/trade/order/model/PayRecord.java
  79. 23 0
      src/main/java/com/uas/platform/b2c/trade/order/service/OrderService.java
  80. 82 3
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderServiceImpl.java
  81. 9 2
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/PurchaseServiceImpl.java
  82. 30 21
      src/main/java/com/uas/platform/b2c/trade/presale/service/impl/CartServiceImpl.java
  83. 6 1
      src/main/java/com/uas/platform/b2c/trade/support/CodeType.java
  84. 1 1
      src/main/resources/dev/account.properties
  85. 2 2
      src/main/resources/dev/sys.properties
  86. BIN
      src/main/resources/jxls-tpl/trade/bankTransfer.xls
  87. BIN
      src/main/resources/jxls-tpl/trade/payRecord.xls
  88. 1 1
      src/main/resources/test/account.properties
  89. 42 1
      src/main/webapp/WEB-INF/spring/hessian.xml
  90. 4 1
      src/main/webapp/WEB-INF/spring/webmvc.xml
  91. 3 1
      src/main/webapp/WEB-INF/views/normal/adminWithNav.html
  92. 65 3
      src/main/webapp/WEB-INF/views/normal/default/404.html
  93. 107 0
      src/main/webapp/WEB-INF/views/normal/erp/user_center.html
  94. 116 0
      src/main/webapp/WEB-INF/views/normal/erp/vendor_center.html
  95. 4 0
      src/main/webapp/WEB-INF/views/normal/user_center.html
  96. 3 0
      src/main/webapp/WEB-INF/views/normal/vendor_center.html
  97. 2 2
      src/main/webapp/WEB-INF/web.xml
  98. 8 1
      src/main/webapp/resources/css/common.css
  99. 621 0
      src/main/webapp/resources/css/commonComponent.css
  100. 3 0
      src/main/webapp/resources/css/erp/align.css

+ 1 - 1
pom.xml

@@ -71,7 +71,7 @@
 		<dependency>
 			<groupId>com.uas.api</groupId>
 			<artifactId>b2c-erp-api</artifactId>
-			<version>0.0.2</version>
+			<version>0.0.2-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>com.uas.api</groupId>

+ 18 - 1
src/main/java/com/uas/platform/b2c/common/account/controller/AuthenticationController.java

@@ -2,8 +2,11 @@ package com.uas.platform.b2c.common.account.controller;
 
 import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.account.model.UserInfo;
+import com.uas.platform.b2c.common.account.model.UserQuestion;
+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 java.util.List;
 import net.sf.ehcache.CacheManager;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -21,6 +24,9 @@ public class AuthenticationController {
 	@Autowired
 	private UserService userService;
 
+	@Autowired
+	private UserQuestionService userQuestionService;
+
 	@RequestMapping(method = RequestMethod.GET, headers = "Accept=application/json")
 	@ResponseBody
 	@ResponseStatus(value = HttpStatus.OK)
@@ -28,7 +34,18 @@ public class AuthenticationController {
 		if (SystemSession.getUser() == null) {
 			return null;
 		}
-		return new UserInfo(SystemSession.getUser());
+		User sysUser = SystemSession.getUser();
+		List<UserQuestion> userQuestion = userQuestionService.findUserQuestionByUserUUOrderBySortAsc(sysUser.getUserUU());
+		User user = userService.findUserByUserUU(sysUser.getUserUU());
+		user.setEnterprise(sysUser.getEnterprise());
+		UserInfo userInfo = new UserInfo(user);
+		if(userQuestion!=null){
+			if(userQuestion.size()>0){
+				userInfo.setHaveUserQuestion(true);
+				userInfo.setSecLevel((short)(1+userInfo.getSecLevel()));
+			}
+		}
+		return userInfo;
 	}
 
 	/**

+ 51 - 1
src/main/java/com/uas/platform/b2c/common/account/controller/EnterpriseController.java

@@ -1,6 +1,11 @@
 package com.uas.platform.b2c.common.account.controller;
 
+import com.uas.account.entity.UserSpaceDetail;
+import com.uas.account.util.AccountUtils;
 import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.account.model.FormEnterprise;
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.common.account.model.UserBaseInfo;
 import com.uas.platform.b2c.common.account.service.EnterpriseService;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.prod.store.service.StoreInService;
@@ -33,6 +38,20 @@ public class EnterpriseController {
 		return enterpriseService.getEnterpriseInfo(enuu);
 	}
 
+	/**
+	 * 根据UU获取完整企业信息
+	 * @param enuu 企业uu号
+	 * @return 完整的企业信息
+	 */
+	@RequestMapping(value = "/{enuu}/detailInfo", method = RequestMethod.GET)
+	public UserSpaceDetail getUserSpaceDetailByEnuu(@PathVariable Long enuu){
+		try {
+			return AccountUtils.findByBusinessCode(enterpriseService.getEnterpriseInfo(enuu).getEnBussinessCode()) ;
+		}catch (Exception e){
+			return null;
+		}
+	}
+
 	/**
 	 * 修改企业基本资料
 	 *
@@ -68,7 +87,7 @@ public class EnterpriseController {
 	 * @return
 	 */
 	@RequestMapping(value = "/register", method = RequestMethod.POST)
-	public ResultMap registerEnterprise(@RequestBody Enterprise enterprise, String filePath) {
+	public ResultMap registerEnterprise(@RequestBody FormEnterprise enterprise, String filePath) {
 		return enterpriseService.registerEnterprise(enterprise,filePath,SystemSession.getUser());
 	}
 
@@ -90,4 +109,35 @@ public class EnterpriseController {
 		return enterpriseService.validBusinessCode(businessCode);
 	}
 
+
+	/**
+	 * 开通企业卖家功能
+	 *
+	 * @param enUU
+	 */
+	@RequestMapping(value = "/openVendor/{enUU}", method = RequestMethod.POST)
+	public void openVendor(@PathVariable("enUU") long enUU) {
+		enterpriseService.openVendor(enUU,true, true);
+	}
+
+	/**
+	 * 设置卖家中心预开通状态
+	 *
+	 * @param enUU
+	 */
+	@RequestMapping(value = "/openVendorSetRead/{enUU}", method = RequestMethod.POST)
+	public void setOpenVendor(@PathVariable("enUU") long enUU) {
+		enterpriseService.openVendor(enUU,true,false);
+	}
+
+	/**
+	 * 设置卖家中心非预开通状态
+	 *
+	 * @param enUU
+	 */
+	@RequestMapping(value = "/openVendorSetNotRead/{enUU}", method = RequestMethod.POST)
+	public void setOpenNotVendor(@PathVariable("enUU") long enUU) {
+		enterpriseService.openVendor(enUU,false,false);
+	}
+
 }

+ 72 - 0
src/main/java/com/uas/platform/b2c/common/account/controller/SecQuestionController.java

@@ -0,0 +1,72 @@
+package com.uas.platform.b2c.common.account.controller;
+
+import com.uas.platform.b2c.common.account.model.SecQuestion;
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.common.account.service.SecQuestionService;
+import com.uas.platform.b2c.prod.product.property.model.Property;
+import com.uas.platform.core.model.PageParams;
+import com.uas.platform.core.util.serializer.FlexJsonUtils;
+import com.wordnik.swagger.annotations.ApiOperation;
+import com.wordnik.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+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.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping(value = "/user/secQuestion")
+public class SecQuestionController {
+
+    @Autowired
+    private SecQuestionService secQuestionService;
+
+    /**
+     * 添加密保问题
+     * @param secQuestion
+     * @return
+     */
+    @RequestMapping(value = "/add", method = RequestMethod.POST)
+    public ResponseEntity<String> add(@RequestBody SecQuestion secQuestion) {
+        secQuestionService.save(secQuestion);
+        return new ResponseEntity<String>(HttpStatus.OK);
+    }
+
+    /**
+     * 分页获取密保问题
+     * @param pageInfo
+     * @return
+     */
+    @RequestMapping(value = "/getPageInfo", method = RequestMethod.GET)
+    @ApiOperation(value = "分页获取密保问题", httpMethod = "GET")
+    public Page<SecQuestion> getPageStatusRealAuth(@ApiParam(required = true, value = "分页参数") PageParams pageInfo) {
+        return secQuestionService.getPageSecQuestion(pageInfo);
+    }
+
+    /**
+     * 根据Id获取密保问题信息
+     * @param id
+     * @return
+     */
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public SecQuestion getProperty(@PathVariable("id") Long id) {
+        return secQuestionService.findById(id);
+    }
+
+    /**
+     * 删除密保问题
+     * @param id
+     * @return
+     */
+    @RequestMapping(value = "/delete", method = RequestMethod.GET)
+    public ResponseEntity<String> delete(Long id) {
+        secQuestionService.delete(id);
+        return new ResponseEntity<String>(HttpStatus.OK);
+    }
+}

+ 4 - 1
src/main/java/com/uas/platform/b2c/common/account/controller/SecurityController.java

@@ -201,7 +201,7 @@ public class SecurityController {
 	 */
 	@RequestMapping(value = "/login/other")
 	@ResponseBody
-	public String afterCrossLogin(HttpServletRequest request, HttpServletResponse response, UserView userView) {
+	public String afterCrossLogin(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) {
@@ -209,6 +209,9 @@ public class SecurityController {
 				tk.setUid(userView.getUid());
 				tk.setTime(System.currentTimeMillis());
 				tk.setData(JSON.toJSONString(userView));
+				if (null != maxage) {
+					request.setAttribute("sso_cookie_maxage", maxage);
+				}
 				SSOHelper.setSSOCookie(request, response, tk, true);
 				User user = getUserByToken(tk);
 				if (user != null) {

+ 534 - 22
src/main/java/com/uas/platform/b2c/common/account/controller/UserController.java

@@ -1,34 +1,43 @@
 package com.uas.platform.b2c.common.account.controller;
 
-import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.message.mail.service.MailService;
+import com.uas.message.sms.service.SmsService;
 import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.common.account.model.UserCacheEnterprise;
 import com.uas.platform.b2c.common.account.model.UserInfo;
+import com.uas.platform.b2c.common.account.model.UserQuestion;
+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.trade.inquiry.model.TradeCharge;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
+import com.uas.platform.core.util.StringUtil;
 import com.uas.platform.core.util.encry.Md5Utils;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
+import com.wordnik.swagger.annotations.ApiOperation;
+import com.wordnik.swagger.annotations.ApiParam;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
-import org.springframework.data.jpa.domain.Specification;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
+import org.springframework.ui.ModelMap;
 import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
-
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import java.util.List;
+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.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * 用户信息的请求
@@ -43,6 +52,15 @@ public class UserController {
 	@Autowired
 	private UserService userService;
 
+	@Autowired
+	private MailService mailService;
+
+	@Autowired
+	private SmsService smsService;
+
+	@Autowired
+	private UserQuestionService uqService;
+
 	private final static UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
 
 	/**
@@ -66,6 +84,8 @@ public class UserController {
 			throw new IllegalOperatorException("您当前的账号不存在,或未登录!不能设置图像。");
 		}
 		user.setImageUrl(imageUrl);
+		assert logger != null;
+		logger.log("用户信息", "设置头像路径,UU:" + user.getUserUU());
 		return userService.save(user);
 	}
 
@@ -80,7 +100,7 @@ public class UserController {
 	 * @param password 用户输入密码
 	 */
 	@RequestMapping(value = "/checkPassword", method = RequestMethod.GET)
-	public ResponseEntity<String> checkPassword(String password) {
+	public ResponseEntity<String> checkPassword(final String password) {
 		User sysUser = SystemSession.getUser();
 		User user = userService.findUserPwdByUserUU(sysUser.getUserUU());
 		if (!StringUtils.isEmpty(password)) {
@@ -100,16 +120,24 @@ public class UserController {
 	 * @param password	用户输入密码
 	 */
 	@RequestMapping(value = "/updatePassword", method = RequestMethod.POST)
-	public ResponseEntity<String> updatePassword(HttpSession session, String password, String newPassword) {
-		if (password.equals(newPassword)){
+	public ResponseEntity<String> updatePassword(final HttpSession session, final String password, final String newPassword,final Short secLevel) {
+		if (password.equals(newPassword)) {
 			throw new IllegalOperatorException("新密码与旧密码相同");
 		}
+		if(newPassword.length()<8 || newPassword.matches("^[0-9]*$") || newPassword.matches("^[A-Za-z]*$")){
+			throw new IllegalOperatorException("密码强度不够,请重新输入");
+		}
+		if(newPassword.length()>20){
+			throw new IllegalOperatorException("密码超过20位,请重新输入");
+		}
 		User sysUser = SystemSession.getUser();
 		User user = userService.findUserPwdByUserUU(sysUser.getUserUU());
-		Enterprise enterprise = user.getEnterprise();
 		if (!StringUtils.isEmpty(newPassword)) {
+			user.setPwdSecLevel(secLevel);
 			user = userService.updatePassword(user, password, newPassword);
-			user.setEnterprise(enterprise);
+			if(sysUser.getEnterprise()!=null){
+				user.setCurrentEnterprise(sysUser.getEnterprise().getUu());
+			}
 			session.setAttribute("user", user);
 			SystemSession.setUser(user);
 			assert logger != null;
@@ -119,16 +147,421 @@ public class UserController {
 			throw new IllegalOperatorException("新密码不能为空");
 	}
 
+	/**
+	 * 验证用户输入的邮箱地址是否正确
+	 *
+	 * @param userEmail 用户输入邮箱地址
+	 */
+	@RequestMapping(value = "/checkUserEmail", method = RequestMethod.GET)
+	public ResponseEntity<String> checkUserEmail(final String userEmail) {
+		User sysUser = SystemSession.getUser();
+		User user = userService.findUserPwdByUserUU(sysUser.getUserUU());
+		if (!StringUtils.isEmpty(userEmail)) {
+			boolean result = user.getUserEmail().equals(userEmail);
+			if (result) {
+				return new ResponseEntity<>(HttpStatus.OK);
+			}
+		}
+		return new ResponseEntity<>(HttpStatus.EXPECTATION_FAILED);
+	}
+
+	/**
+	 * 发送邮箱验证码
+	 *
+	 * @param newUserEmail 用户输入新邮箱地址
+	 */
+	@RequestMapping(value = "/sendCheckCode", method = RequestMethod.GET)
+	public ResponseEntity<String> sendCheckCode(final String newUserEmail, final HttpSession session) {
+		User sysUser = SystemSession.getUser();
+		User user = userService.findUserPwdByUserUU(sysUser.getUserUU());
+		if (!StringUtils.isEmpty(newUserEmail)) {
+			//发送邮件
+			ModelMap data = new ModelMap();
+			String checkCode = String.valueOf((int) ((Math.random() * 9 + 1) * 100000));
+			data.put("checkcode", checkCode);
+			try {
+				mailService.send("a4c45a22-436a-430c-9667-4edfd7d04a27", newUserEmail, data);
+				session.setAttribute("checkCode", checkCode);
+				session.setAttribute("checkTime", new Date().getTime());
+				session.setAttribute("newUserEmail",newUserEmail);
+				assert logger != null;
+				logger.log("用户信息", "发送用户邮箱地址,UU:" + user.getUserUU());
+				return new ResponseEntity<>(HttpStatus.OK);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		return new ResponseEntity<>(HttpStatus.EXPECTATION_FAILED);
+	}
+
+	/**
+	 * 校验验证码是否正确
+	 * @param checkCode 用户输入验证码
+	 * @param request
+	 * @return
+	 */
+	@RequestMapping(value = "/validCheckCode", method = RequestMethod.GET)
+	public Map<String, Object> validCheckCode(final String checkCode, final String newUserEmail,final HttpServletRequest request) {
+		HttpSession session = request.getSession();
+		Map<String,Object> result = new HashMap<String,Object>();
+		if (!StringUtils.isEmpty(checkCode) && !StringUtils.isEmpty(newUserEmail)) {
+			Long checkTime = (Long) session.getAttribute("checkTime");
+			Long nowTime = new Date().getTime();
+			String _checkCode = (String) session.getAttribute("checkCode");
+			String _newUserEmail = (String) session.getAttribute("newUserEmail");
+			//验证码失效
+			if((nowTime-checkTime)>10 * 60 * 1000 || _checkCode == null) {
+				result.put("status", 2);
+				result.put("message", "验证码失效");
+				return result;
+			}
+			//验证码错误
+			if (!_checkCode.equals(checkCode) || !_newUserEmail.equals(newUserEmail)) {
+				result.put("status", 0);
+				result.put("message", "验证码错误");
+				return result;
+			}
+			//验证码正确
+			if (_checkCode.equals(checkCode)) {
+				result.put("status", 1);
+				result.put("message", "验证码正确");
+				return result;
+			}
+		}
+		result.put("status", 0);
+		result.put("message", "验证码错误");
+		return result;
+	}
+
+	/**
+	 * 修改用户邮箱
+	 * @param session
+	 * @param userEmail
+	 * @param newUserEmail
+	 * @return
+	 */
+	@RequestMapping(value = "/updateUserEmail", method = RequestMethod.POST)
+	public ResponseEntity<String> updateUserEmail(final HttpSession session, final String userEmail, final String newUserEmail,final String checkCode) {
+		if (userEmail!=null && userEmail.equals(newUserEmail)) {
+			throw new IllegalOperatorException("新邮箱地址与旧邮箱地址相同");
+		}
+		//正则校验邮箱地址
+		if(!newUserEmail.matches("^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+")){
+			throw new IllegalOperatorException("新邮箱地址格式不正确");
+		}
+		String _checkCode = (String) session.getAttribute("checkCode");
+		if(!_checkCode.equals(checkCode)){
+			throw new IllegalOperatorException("验证码错误");
+		}
+		String _newUserEmail = (String) session.getAttribute("newUserEmail");
+		if(!_newUserEmail.equals(newUserEmail)){
+			throw new IllegalOperatorException("邮箱地址错误");
+		}
+		User sysUser = SystemSession.getUser();
+		User user = userService.findUserPwdByUserUU(sysUser.getUserUU());
+		if (!StringUtils.isEmpty(newUserEmail)) {
+			if (!userService.isEmailUseable(newUserEmail)) {
+				throw new IllegalOperatorException("邮箱已被注册...");
+			}
+			if(userEmail!=null && !userEmail.equals(user.getUserEmail())){
+				throw new IllegalOperatorException("旧邮箱地址校验错误");
+			}
+			user.setUserEmail(newUserEmail);
+			user = userService.save(user);
+			if(sysUser.getEnterprise()!=null){
+				user.setCurrentEnterprise(sysUser.getEnterprise().getUu());
+			}
+			session.setAttribute("user", user);
+			SystemSession.setUser(user);
+			assert logger != null;
+			logger.log("用户信息", "修改用户邮箱地址,UU:" + user.getUserUU());
+			return new ResponseEntity<>(HttpStatus.OK);
+		} else
+			throw new IllegalOperatorException("新邮箱地址不能为空");
+	}
+
+	/**
+	 * 验证原手机号输入是否正确
+	 * @param userTel
+	 * @return
+	 */
+	@RequestMapping(value = "/checkUserTel", method = RequestMethod.GET)
+	public ResponseEntity<String> checkUserTel(final String userTel) {
+		User sysUser = SystemSession.getUser();
+		User user = userService.findUserPwdByUserUU(sysUser.getUserUU());
+		if (!StringUtils.isEmpty(userTel)) {
+			boolean result = user.getUserTel().equals(userTel);
+			if (result) {
+				assert logger != null;
+				logger.log("用户信息", "验证用户手机,UU:" + user.getUserUU());
+				return new ResponseEntity<>(HttpStatus.OK);
+			}
+		}
+		return new ResponseEntity<>(HttpStatus.EXPECTATION_FAILED);
+	}
+
+	/**
+	 * 发送手机验证码
+	 * @param newUserTel 用户输入新手机号
+	 * @param session
+	 */
+	@RequestMapping(value = "/sendTelCheckCode", method = RequestMethod.GET)
+	public ResponseEntity<String> sendTelCheckCode(final String newUserTel, final HttpSession session) {
+		User sysUser = SystemSession.getUser();
+		User user = userService.findUserPwdByUserUU(sysUser.getUserUU());
+		if (!StringUtils.isEmpty(newUserTel)) {
+			//页面Token校验
+			String pageToken = (String) session.getAttribute("pageToken");
+			if (pageToken == null || pageToken.equals("")) {
+				throw new IllegalOperatorException("页面信息获取失败!");
+			}
+			String checkCode = String.valueOf((int) ((Math.random() * 9 + 1) * 100000));
+			try {
+				smsService.send("1eba04ae-f3d9-4105-ad32-0196309fabb3", newUserTel, new Object[] {checkCode});
+				session.setAttribute("telCheckCode", checkCode);
+				session.setAttribute("telCheckTime", new Date().getTime());
+				session.setAttribute("newUserTel", newUserTel);
+				assert logger != null;
+				logger.log("用户信息", "发送手机验证码,UU:" + user.getUserUU());
+				return new ResponseEntity<>(HttpStatus.OK);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		return new ResponseEntity<>(HttpStatus.EXPECTATION_FAILED);
+	}
+
+	/**
+	 * 校验手机验证码
+	 * @param telCheckCode
+	 * @param session
+	 * @return
+	 */
+	@RequestMapping(value = "/validTelCheckCode", method = RequestMethod.GET)
+	public Map<String, Object> validTelCheckCode(final String telCheckCode, final String newUserTel,final HttpSession session) {
+		Map<String, Object> result = new HashMap<String, Object>();
+		if (!StringUtils.isEmpty(telCheckCode) && !StringUtils.isEmpty(newUserTel)) {
+			Long checkTime = (Long) session.getAttribute("telCheckTime");
+			Long nowTime = new Date().getTime();
+			String _checkCode = (String) session.getAttribute("telCheckCode");
+			String _newUserTel = (String) session.getAttribute("newUserTel");
+			//验证码失效
+			if ((nowTime - checkTime) > 10 * 60 * 1000 || _checkCode == null) {
+				result.put("status", 2);
+				result.put("message", "验证码失效");
+				return result;
+			}
+			//验证码错误
+			if (!_checkCode.equals(telCheckCode) || !_newUserTel.equals(newUserTel)) {
+				result.put("status",0);
+				result.put("message", "验证码错误");
+				return result;
+			}
+			//验证码正确
+			if (_checkCode.equals(telCheckCode)) {
+				result.put("status", 1);
+				result.put("message", "验证码正确");
+				return result;
+			}
+		}
+		result.put("status", 0);
+		result.put("message", "验证码错误");
+		return result;
+	}
+
+	/**
+	 * 修改手机号
+	 * @param session
+	 * @param userTel
+	 * @param newUserTel
+	 * @return
+	 */
+	@RequestMapping(value = "/updateUserTel", method = RequestMethod.POST)
+	public ResponseEntity<String> updateUserTel(final HttpSession session, final String userTel, final String newUserTel,final String telCheckCode) {
+		if (userTel.equals(newUserTel)) {
+			throw new IllegalOperatorException("新手机号与旧手机号相同");
+		}
+		//手机号码正则表达式校验
+		if(!newUserTel.matches("^[0-9]{8,11}$")){
+			throw new IllegalOperatorException("新手机号格式不正确...");
+		}
+		//防止用户非法操作
+		String _checkCode = (String) session.getAttribute("telCheckCode");
+		if(!_checkCode.equals(telCheckCode)){
+			throw new IllegalOperatorException("验证码错误");
+		}
+		String _newUserTel = (String) session.getAttribute("newUserTel");
+		if(!_newUserTel.equals(newUserTel)){
+			throw new IllegalOperatorException("手机号错误");
+		}
+		User sysUser = SystemSession.getUser();
+		User user = userService.findUserPwdByUserUU(sysUser.getUserUU());
+		if (!StringUtils.isEmpty(newUserTel)) {
+			if (!userService.isTelUseable(newUserTel)) {
+				throw new IllegalOperatorException("手机号不可用...");
+			}
+			user.setUserTel(newUserTel);
+			user = userService.save(user);
+			if(sysUser.getEnterprise()!=null){
+				user.setCurrentEnterprise(sysUser.getEnterprise().getUu());
+			}
+			session.setAttribute("user", user);
+			SystemSession.setUser(user);
+			assert logger != null;
+			logger.log("用户信息", "修改用户手机号,UU:" + user.getUserUU());
+			return new ResponseEntity<>(HttpStatus.OK);
+		} else
+			throw new IllegalOperatorException("新手机号不能为空");
+	}
+
+	/**
+	 * 验证是否设置支付密码
+	 * @return
+	 */
+	@RequestMapping(value = "/checkHaveUserPay", method = RequestMethod.GET)
+	public ResponseEntity<Boolean> checkHaveUserPay() {
+		User sysUser = SystemSession.getUser();
+		User user = userService.findUserPwdByUserUU(sysUser.getUserUU());
+		HttpHeaders headers = new HttpHeaders();
+		headers.add("Content-Type", "application/text; charset=utf-8");
+		if (!StringUtils.isEmpty(user.getUserPay())) {
+			assert logger != null;
+			logger.log("用户信息", "是否设置支付密码,UU:" + user.getUserUU());
+			return new ResponseEntity<>(true, headers, HttpStatus.OK);
+		}
+		return new ResponseEntity<>(false, headers, HttpStatus.OK);
+	}
+
+	/**
+	 * 验证用户支付密码
+	 * @param userPay 用户输入的支付密码
+	 * @return
+	 */
+	@RequestMapping(value = "/checkUserPay", method = RequestMethod.GET)
+	public ResponseEntity<String> checkUserPay(final String userPay) {
+		User sysUser = SystemSession.getUser();
+		User user = userService.findUserPwdByUserUU(sysUser.getUserUU());
+		if (!StringUtils.isEmpty(userPay)) {
+			boolean result = user.getUserPay().equals(Md5Utils.encode(userPay, user.getUserUU()));
+			if (result) {
+				return new ResponseEntity<>(HttpStatus.OK);
+			}
+			assert logger != null;
+			logger.log("用户信息", "验证用户支付密码,UU:" + user.getUserUU());
+		}
+		return new ResponseEntity<>(HttpStatus.EXPECTATION_FAILED);
+	}
+
+	/**
+	 * 修改用户支付密码
+	 * @param session
+	 * @param userPay
+	 * @param newUserPay
+	 * @return
+	 */
+	@RequestMapping(value = "/updateUserPay", method = RequestMethod.POST)
+	public ResponseEntity<String> updateUserPay(final HttpSession session, final String userPay, final String newUserPay) {
+		if (userPay != null && userPay.equals(newUserPay)) {
+			throw new IllegalOperatorException("新密码与旧密码相同");
+		}
+		//新密码正则校验
+		if(!newUserPay.matches("^\\d{6}$")){
+			throw new IllegalOperatorException("新密码格式不正确...");
+		}
+		User sysUser = SystemSession.getUser();
+		User user = userService.findUserPwdByUserUU(sysUser.getUserUU());
+		if (!StringUtils.isEmpty(newUserPay)) {
+			user = userService.updateUserPay(user, userPay, newUserPay);
+			if(sysUser.getEnterprise()!=null){
+				user.setCurrentEnterprise(sysUser.getEnterprise().getUu());
+			}
+			session.setAttribute("user", user);
+			SystemSession.setUser(user);
+			assert logger != null;
+			logger.log("用户信息", "修改用户支付密码,UU:" + user.getUserUU());
+			return new ResponseEntity<>(HttpStatus.OK);
+		} else
+			throw new IllegalOperatorException("新密码不能为空");
+	}
+
+	/**
+	 * 查询当前用户的密保问题
+	 * @return
+	 */
+	@RequestMapping(value = "/getUserQuestion", method = RequestMethod.GET)
+	public List<UserQuestion> getUserQuestion() {
+		User sysUser = SystemSession.getUser();
+		HttpHeaders headers = new HttpHeaders();
+		headers.add("Content-Type", "application/json; charset=utf-8");
+		List<UserQuestion> questions = uqService.findUserQuestionByUserUUOrderBySortAsc(sysUser.getUserUU());
+		Map<String, List<UserQuestion>> result = new HashMap<String, List<UserQuestion>>();
+		result.put("questions", questions);
+		return questions;
+	}
+
+	/**
+	 * 设置密保问题
+	 * @param userQuestions
+	 * @return
+	 */
+	@RequestMapping(value = "/updateUserQuestion", method = RequestMethod.POST)
+	public ResponseEntity<String> updateUserQuestion(@RequestBody final List<UserQuestion> userQuestions) {
+		User sysUser = SystemSession.getUser();
+		for (UserQuestion uq : userQuestions) {
+			uq.setUser(sysUser);
+			uq.setUserUU(sysUser.getUserUU());
+			if(uq.getAnswer()==null && uq.getQuestion()==null && uq.getAnswer().length()>30){
+				throw new IllegalOperatorException("请按照要求输入信息...");
+			}
+			uqService.save(uq);
+		}
+		assert logger != null;
+		logger.log("用户信息", "设置密保问题,UU:" + sysUser.getUserUU());
+		return new ResponseEntity<>(HttpStatus.OK);
+	}
+
+	/**
+	 * 实名认证
+	 * @param userName
+	 * @param userIdcode
+	 * @param idImgUrl
+	 * @return
+	 */
+	@RequestMapping(value = "/updateRealAuth", method = RequestMethod.POST)
+	public ResponseEntity<String> updateRealAuth(final String userName, final String userIdcode, final String idImgUrl,HttpServletRequest request) {
+		User sysUser = SystemSession.getUser();
+		User user = userService.findUserByUserUU(sysUser.getUserUU());
+		if(user!=null){
+			user.setUserName(userName);
+			user.setUserIccode(userIdcode);
+			user.setIdImgUrl(idImgUrl);
+			user.setIdEnable((short)2);
+			user.setIdDate(new Date());
+			user = userService.saveRealAuth(user);
+			if(sysUser.getEnterprise()!=null){
+				user.setCurrentEnterprise(sysUser.getEnterprise().getUu());
+			}
+			request.getSession().setAttribute("user", user);
+			SystemSession.setUser(user);
+			assert logger != null;
+			logger.log("用户信息", "提交实名认证信息,UU:" + sysUser.getUserUU());
+			return new ResponseEntity<>(HttpStatus.OK);
+		}else{
+			throw new IllegalOperatorException("找不到用户...");
+		}
+	}
+
 	/**
 	 * 根据UU获取该企业所有人员信息
 	 * @param enuu 企业uu号
 	 * @return 完整的企业人员信息
 	 */
 	@RequestMapping(value = "/enterprise/info",method = RequestMethod.GET)
-	public Page<User> getEnterpriseAllUsersInfo(PageParams params, Long enuu){
+	public Page<User> getEnterpriseAllUsersInfo(final PageParams params,Long enuu){
 		PageInfo pageInfo = new PageInfo(params);
 		return userService.findUsersPageByEnUU(pageInfo,enuu);
 	}
+
 	/**
 	 * 通过关键词获取该企业所有人员信息
 	 * @param enuu 企业uu号
@@ -155,6 +588,7 @@ public class UserController {
 		}
 		return new ResponseEntity<String>(HttpStatus.OK);
 	}
+
 	/**
 	 * 删除用户
 	 *
@@ -190,7 +624,7 @@ public class UserController {
 	 */
 	@RequestMapping(value = "/searchUser", method = RequestMethod.GET)
 	@ResponseBody
-	public UserInfo getUser(String keyWord) {
+	public UserInfo getUser(final String keyWord) {
 		return userService.findUserByKeyWord(keyWord);
 	}
 
@@ -203,7 +637,7 @@ public class UserController {
 	 */
 	@RequestMapping(value = "/bindUser", method = RequestMethod.GET)
 	@ResponseBody
-	public ResponseEntity<String> bindUser(Long userUU) {
+	public ResponseEntity<String> bindUser(final Long userUU) {
 		userService.bindUserToMyEnterprise(userUU);
 		return new ResponseEntity<String>(HttpStatus.OK);
 	}
@@ -214,7 +648,7 @@ public class UserController {
 	 * @return
 	 */
 	@RequestMapping(value = "/telEnable", method = RequestMethod.GET)
-	public ResponseEntity<Boolean> telEnable(String tel) {
+	public ResponseEntity<Boolean> telEnable(final String tel) {
 		if (tel == null) {
 			throw new IllegalOperatorException("手机号不能为空!");
 		} else {
@@ -232,7 +666,7 @@ public class UserController {
 	 * @return
 	 */
 	@RequestMapping(value = "/emailEnable", method = RequestMethod.GET)
-	public ResponseEntity<Boolean> emailEnable(String email) {
+	public ResponseEntity<Boolean> emailEnable(final String email) {
 		if (email == null) {
 			throw new IllegalOperatorException("邮箱不能为空");
 		} else {
@@ -242,4 +676,82 @@ public class UserController {
 					HttpStatus.OK);
 		}
 	}
+
+	/**
+	 * 设置注册企业的缓存信息
+	 *
+	 * @return
+	 */
+	@RequestMapping(value = "/userCacheEnterprise", method = RequestMethod.POST)
+	public ResponseEntity<Boolean> newUserCacheEnterprise(@RequestBody UserCacheEnterprise userCacheEnterprise) {
+		UserCacheEnterprise userCacheEnterprise1 = userService.saveUserCacheEnterprise(SystemSession.getUser(),userCacheEnterprise);
+		if (userCacheEnterprise1 == null) {
+			throw new IllegalOperatorException("保存失败");
+		} else {
+			HttpHeaders headers = new HttpHeaders();
+			headers.add("Content-Type", "application/text; charset=utf-8");
+			return new ResponseEntity<Boolean>(true, headers,
+					HttpStatus.OK);
+		}
+	}
+
+	/**
+	 * 获取注册企业的缓存信息
+	 *
+	 * @return
+	 */
+	@RequestMapping(value = "/userCacheEnterprise", method = RequestMethod.GET)
+	@ResponseBody
+	public UserCacheEnterprise getUserCacheEnterprise() {
+		return userService.getUserCacheEnterprise(SystemSession.getUser());
+	}
+
+	/**
+	 * 删除注册企业的缓存信息
+	 *
+	 * @return
+	 */
+	@RequestMapping(value = "/userCacheEnterprise", method = RequestMethod.DELETE)
+	@ResponseBody
+	public void deleteUserCacheEnterprise() {
+		userService.deleteUserCacheEnterprise(SystemSession.getUser());
+	}
+
+	/**
+	 * 获取页面token,防止恶意发送手机验证码
+	 * @param request
+	 * @return
+	 */
+	@RequestMapping(value = "/getPageToken", method = RequestMethod.GET)
+	public ResponseEntity<String> getPageToken(final HttpServletRequest request) {
+		String pageToken = StringUtil.uuid();
+		HttpSession session = request.getSession();
+		session.setAttribute("pageToken", pageToken);
+		return new ResponseEntity<String>(HttpStatus.OK);
+	}
+
+	/**
+	 * 分页获取实名认证
+	 * @param pageInfo
+	 * @param status
+	 * @return
+	 */
+	@RequestMapping(value = "/getPageStatusRealAuth", method = RequestMethod.GET)
+	@ApiOperation(value = "分页获取实名认证", httpMethod = "GET")
+	public Page<User> getPageStatusRealAuth(@ApiParam(required = true, value = "分页参数") PageParams pageInfo, @ApiParam(required = true, value = "用户状态") Short status) {
+		return userService.getPageStatusRealAuth(pageInfo, status);
+	}
+
+	/**
+	 * 审核实名认证
+	 * @param user
+	 * @return
+	 */
+	@RequestMapping(value = "/updateIdEnable", method = RequestMethod.POST)
+	public ResponseEntity<String> updateIdEnable(final User user,HttpServletRequest request) {
+		User newUser = userService.saveRealAuth(user);
+		assert logger != null;
+		logger.log("用户信息", SystemSession.getUser().getUserUU()+"后台审核实名认证,UU:" + newUser.getUserUU());
+		return new ResponseEntity<String>(HttpStatus.OK);
+	}
 }

+ 10 - 0
src/main/java/com/uas/platform/b2c/common/account/dao/SecQuestionDao.java

@@ -0,0 +1,10 @@
+package com.uas.platform.b2c.common.account.dao;
+
+import com.uas.platform.b2c.common.account.model.SecQuestion;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface SecQuestionDao extends JpaSpecificationExecutor<SecQuestion>,
+        JpaRepository<SecQuestion, Long> {
+
+}

+ 13 - 0
src/main/java/com/uas/platform/b2c/common/account/dao/UserCacheEnterpriseDao.java

@@ -0,0 +1,13 @@
+package com.uas.platform.b2c.common.account.dao;
+
+import com.uas.platform.b2c.common.account.model.UserCacheEnterprise;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Created by wangdy on 2017-08-25.
+ */
+@Repository
+public interface UserCacheEnterpriseDao extends JpaSpecificationExecutor<UserCacheEnterprise>, JpaRepository<UserCacheEnterprise, Long> {
+}

+ 16 - 0
src/main/java/com/uas/platform/b2c/common/account/dao/UserQuestionDao.java

@@ -0,0 +1,16 @@
+package com.uas.platform.b2c.common.account.dao;
+
+import com.uas.platform.b2c.common.account.model.UserQuestion;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.QueryHints;
+import org.springframework.stereotype.Repository;
+
+import javax.persistence.QueryHint;
+import java.util.List;
+
+@Repository
+public interface UserQuestionDao extends JpaSpecificationExecutor<UserQuestion>, JpaRepository<UserQuestion, Long> {
+    @QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value = "true") })
+    public List<UserQuestion> findUserQuestionByUserUUOrderBySortAsc(Long userUU);
+}

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

@@ -18,7 +18,7 @@ import java.util.Date;
 @Entity
 @Table(name = "sec$enterprises")
 @Cacheable
-@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "com.uas.platform.b2c.model.Enterprise")
+@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "com.uas.platform.b2c.model.EnterpriseUas")
 public class Enterprise implements Serializable {
 
 	/**
@@ -90,6 +90,13 @@ public class Enterprise implements Serializable {
 	 */
 	@Column(name = "en_businesscode")
 	private String enBussinessCode;
+
+	/**
+	 * 商业登记证图片
+	 */
+	@Column(name = "en_businesscodeimg")
+	private String enBussinessCodeImage;
+
 	/**
 	 * 公司主页地址
 	 */
@@ -131,6 +138,12 @@ public class Enterprise implements Serializable {
 	@Column(name = "en_saasstatus")
 	private Short enSaasStatus;
 
+	/**
+	 * 是否开通卖家中心状态
+	 */
+	@Column(name = "en_mallvendorstatus")
+	private Short enMallVendorStatus;
+
 	/**
 	 * enIsErp
 	 */
@@ -316,6 +329,14 @@ public class Enterprise implements Serializable {
 		this.enSaasStatus = enSaasStatus;
 	}
 
+	public Short getEnMallVendorStatus() {
+		return enMallVendorStatus;
+	}
+
+	public void setEnMallVendorStatus(Short enMallVendorStatus) {
+		this.enMallVendorStatus = enMallVendorStatus;
+	}
+
 	public Integer getReceiptStatus() {
 		return receiptStatus;
 	}
@@ -369,6 +390,14 @@ public class Enterprise implements Serializable {
 		this.enLogoUrl = enLogoUrl;
 	}
 
+	public String getEnBussinessCodeImage() {
+		return enBussinessCodeImage;
+	}
+
+	public void setEnBussinessCodeImage(String enBussinessCodeImage) {
+		this.enBussinessCodeImage = enBussinessCodeImage;
+	}
+
 	/**
 	 * saas用户
 	 * 
@@ -378,4 +407,13 @@ public class Enterprise implements Serializable {
 		return this.enSaasStatus != null && Status.ENABLED.value() == this.enSaasStatus;
 	}
 
+	/**
+	 * 是否开通卖家中心
+	 *
+	 * @return
+	 */
+	public boolean isMallVendor() {
+		return this.enMallVendorStatus != null && Status.ENABLED.value() == this.enMallVendorStatus;
+	}
+
 }

+ 125 - 0
src/main/java/com/uas/platform/b2c/common/account/model/FormEnterprise.java

@@ -0,0 +1,125 @@
+package com.uas.platform.b2c.common.account.model;
+
+/**
+ * Created by wangdy on 2017-09-13.
+ */
+public class FormEnterprise {
+
+    private String name;
+    private String lawPerson;
+    private String url;
+    private String licenceId;
+    private String address;
+    private String linkman;
+    private String phone;
+    private String email;
+    private String fax;
+    private String website;
+    private String profession;
+    private String logoUrl;
+    private String[] tagsData;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getLawPerson() {
+        return lawPerson;
+    }
+
+    public void setLawPerson(String lawPerson) {
+        this.lawPerson = lawPerson;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getLicenceId() {
+        return licenceId;
+    }
+
+    public void setLicenceId(String licenceId) {
+        this.licenceId = licenceId;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public String getLinkman() {
+        return linkman;
+    }
+
+    public void setLinkman(String linkman) {
+        this.linkman = linkman;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getFax() {
+        return fax;
+    }
+
+    public void setFax(String fax) {
+        this.fax = fax;
+    }
+
+    public String getWebsite() {
+        return website;
+    }
+
+    public void setWebsite(String website) {
+        this.website = website;
+    }
+
+    public String getProfession() {
+        return profession;
+    }
+
+    public void setProfession(String profession) {
+        this.profession = profession;
+    }
+
+    public String getLogoUrl() {
+        return logoUrl;
+    }
+
+    public void setLogoUrl(String logoUrl) {
+        this.logoUrl = logoUrl;
+    }
+
+    public String[] getTagsData() {
+        return tagsData;
+    }
+
+    public void setTagsData(String[] tagsData) {
+        this.tagsData = tagsData;
+    }
+}

+ 74 - 0
src/main/java/com/uas/platform/b2c/common/account/model/SecQuestion.java

@@ -0,0 +1,74 @@
+package com.uas.platform.b2c.common.account.model;
+
+import java.io.Serializable;
+import javax.persistence.Cacheable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+
+/**
+ * 密保问题
+ */
+@Entity
+@Table(name = "sec$secquestion")
+@Cacheable
+@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "com.uas.platform.b2b.model.User")
+public class SecQuestion implements Serializable {
+    /**
+     *
+     */
+    private static final long serialVersionUID = 1L;
+
+    public SecQuestion() {
+    }
+
+    /**
+     * id
+     */
+    @Id
+    @Column(name = "sq_id")
+    @GeneratedValue
+    private Long id;
+
+    /**
+     * 问题内容
+     */
+    @Column(name = "sq_question")
+    private String question;
+
+    /**
+     * 问题类型
+     */
+    @Column(name = "sq_type")
+    private Long type;
+
+    public Long getId() {
+        return id;
+    }
+
+    public String getQuestion() {
+        return question;
+    }
+
+    public Long getType() {
+        return type;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public void setQuestion(String question) {
+        this.question = question;
+    }
+
+    public void setType(Long type) {
+        this.type = type;
+    }
+}

+ 14 - 10
src/main/java/com/uas/platform/b2c/common/account/model/UsageLog.java

@@ -38,7 +38,6 @@ public class UsageLog extends BufferedLogable implements Serializable {
 	@JoinColumn(name = "log_useruu", insertable = false, updatable = false)
 	private UserBaseInfo user;
 
-	@NotNull
 	@Column(name = "log_useruu")
 	private Long userUU;
 
@@ -195,14 +194,14 @@ public class UsageLog extends BufferedLogable implements Serializable {
 	}
 
 	public String getUserTel() {
-		if(user.getUserTel()!=null){
+		if(user != null && user.getUserTel()!=null){
 			return user.getUserTel().substring(0,user.getUserTel().length()-(user.getUserTel().substring(3)).length())+"****"+user.getUserTel().substring(7);
 		}
 		return user.getUserTel();
 	}
 
 	public String getUserEmail() {
-		if(user.getUserEmail()!=null){
+		if(user != null && user.getUserEmail()!=null){
 			String email = user.getUserEmail();
 			int index = org.apache.commons.lang.StringUtils.indexOf(user.getUserEmail(), "@");
 			if (index <= 1)
@@ -225,27 +224,31 @@ public class UsageLog extends BufferedLogable implements Serializable {
 	}
 
 	public UsageLog(String title, String message, String detail, String code, Long key) {
-		this.enUU = SystemSession.getUser().getEnterprise() != null ? SystemSession.getUser().getEnterprise().getUu() : null;
 		this.title = title;
 		this.message = message;
 		this.detail = detail;
 		this.code = code;
 		this.key = key;
 		this.time = new Date().getTime();
-		this.userUU = SystemSession.getUser().getUserUU();
-		this.ip = SystemSession.getUser().getIp();
+		if(SystemSession.getUser() != null) {
+			this.userUU = SystemSession.getUser().getUserUU();
+			this.enUU = SystemSession.getUser().getEnterprise() != null ? SystemSession.getUser().getEnterprise().getUu() : null;
+			this.ip = SystemSession.getUser().getIp();
+		}
 	}
 
 	public UsageLog(String title, String message, String detail, String code, Long key, Long enuu, Long useruu) {
 		this.enUU = enuu;
+		this.userUU = useruu;
 		this.title = title;
 		this.message = message;
 		this.detail = detail;
 		this.code = code;
 		this.key = key;
 		this.time = new Date().getTime();
-		this.userUU = useruu;
-		this.ip = SystemSession.getUser().getIp();
+		if(SystemSession.getUser() != null) {
+			this.ip = SystemSession.getUser().getIp();
+		}
 	}
 
 	public UsageLog(String title, String message, Long userUU, String ip, String code, Long key) {
@@ -264,9 +267,10 @@ public class UsageLog extends BufferedLogable implements Serializable {
 		if (strArray.length == 9) {
 			this.time = Long.parseLong(strArray[0]);
 			this.ip = strArray[1];
-			if (!strArray[2].equals("null"))
+			if (!"null".equals(strArray[2]))
 				this.enUU = Long.parseLong(strArray[2]);
-			this.userUU = Long.parseLong(strArray[3]);
+			if (!"null".equals(strArray[3]))
+				this.userUU = Long.parseLong(strArray[3]);
 			this.title = strArray[4];
 			this.message = strArray[5];
 			this.detail = StringUtils.hasText(strArray[6]) ? strArray[6] : null;

+ 96 - 2
src/main/java/com/uas/platform/b2c/common/account/model/User.java

@@ -2,6 +2,7 @@ package com.uas.platform.b2c.common.account.model;
 
 import com.alibaba.fastjson.annotation.JSONField;
 import com.uas.platform.core.model.Constant;
+import java.util.Date;
 import org.codehaus.jackson.annotate.JsonIgnore;
 import org.hibernate.annotations.Cache;
 import org.hibernate.annotations.CacheConcurrencyStrategy;
@@ -43,7 +44,6 @@ public class User implements Serializable {
 	 * uu号,ID
 	 */
 	@Id
-	@GeneratedValue
 	@Column(name = "user_uu")
 	private Long userUU;
 
@@ -63,7 +63,6 @@ public class User implements Serializable {
 	 * 邮箱
 	 */
 	@Column(name = "user_email", length = 50)
-	@NotNull
 	private String userEmail;
 
 	/**
@@ -114,6 +113,12 @@ public class User implements Serializable {
 	@Column(name = "user_type", length = 20)
 	private String userType;
 
+	/**
+	 * 支付密码
+	 */
+	@Column(name = "user_pay", length = 32)
+	private String userPay;
+
 	/**
 	 * 所属所有公司
 	 */
@@ -152,6 +157,87 @@ public class User implements Serializable {
 	@Column(name = "user_imageurl")
 	private String imageUrl;
 
+	/**
+	 * 实名认证的身份证照片地址
+	 */
+	@Column(name = "user_idimgurl")
+	private String idImgUrl;
+
+	/**
+	 * 是否通过审核  1:通过  0:未认证  2:正在审核
+	 */
+	@Column(name = "user_idenable")
+	private Short idEnable;
+
+	/**
+	 * 实名认证申请时间
+	 */
+	@Column(name = "user_iddate")
+	private Date idDate;
+
+	/**
+	 * 账户安全等级
+	 */
+	@Column(name = "user_seclevel")
+	private Short secLevel;
+
+	/**
+	 * 密码安全等级(1、低,2、中,3、高)
+	 */
+	@Column(name = "user_pwdseclevel")
+	private Short pwdSecLevel;
+
+	@Column(name = "user_lastlogintime")
+	private Long lastLoginTime;
+
+	public Long getLastLoginTime() {
+		return lastLoginTime;
+	}
+
+	public void setLastLoginTime(Long lastLoginTime) {
+		this.lastLoginTime = lastLoginTime;
+	}
+
+	public Short getPwdSecLevel() {
+		return pwdSecLevel;
+	}
+
+	public void setPwdSecLevel(Short pwdSecLevel) {
+		this.pwdSecLevel = pwdSecLevel;
+	}
+
+	public Short getSecLevel() {
+		return secLevel;
+	}
+
+	public void setSecLevel(Short secLevel) {
+		this.secLevel = secLevel;
+	}
+
+	public Date getIdDate() {
+		return idDate;
+	}
+
+	public void setIdDate(Date idDate) {
+		this.idDate = idDate;
+	}
+
+	public Short getIdEnable() {
+		return idEnable;
+	}
+
+	public void setIdEnable(Short idEnable) {
+		this.idEnable = idEnable;
+	}
+
+	public String getIdImgUrl() {
+		return idImgUrl;
+	}
+
+	public void setIdImgUrl(String idImgUrl) {
+		this.idImgUrl = idImgUrl;
+	}
+
 	public String getImageUrl() {
 		return imageUrl;
 	}
@@ -256,6 +342,14 @@ public class User implements Serializable {
 		this.userIdcode = userIdcode;
 	}
 
+	public String getUserPay() {
+		return userPay;
+	}
+
+	public void setUserPay(String userPay) {
+		this.userPay = userPay;
+	}
+
 	@JsonIgnore
 	@JSONField(serialize = false)
 	public Set<Enterprise> getEnterprises() {

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

@@ -18,7 +18,7 @@ import java.io.Serializable;
 public class UserBaseInfo implements Serializable {
 
 	/**
-	 * 
+	 *
 	 */
 	private static final long serialVersionUID = 1L;
 

+ 186 - 0
src/main/java/com/uas/platform/b2c/common/account/model/UserCacheEnterprise.java

@@ -0,0 +1,186 @@
+package com.uas.platform.b2c.common.account.model;
+
+import javax.persistence.*;
+
+/**
+ * Created by wangdy on 2017-08-25.
+ */
+@Entity
+@Table(name = "sec$user_cache_enterprise")
+public class UserCacheEnterprise {
+    /**
+     * uu号,ID
+     */
+    @Id
+    @Column(name = "user_uu")
+    private Long userUU;
+
+
+
+    @Column(name = "name")
+    private String name;
+
+    @Column(name = "lawPerson")
+    private String lawPerson;
+
+    @Column(name = "url")
+    private String url;
+
+    @Column(name = "licenceId")
+    private String licenceId;
+
+    @Column(name = "address")
+    private String address;
+
+    @Column(name = "linkman")
+    private String linkman;
+
+    @Column(name = "phone")
+    private String phone;
+
+    @Column(name = "email")
+    private String email;
+
+    @Column(name = "fax")
+    private String fax;
+
+    @Column(name = "website")
+    private String website;
+
+    @Column(name = "profession")
+    private String profession;
+
+    @Column(name = "logoUrl")
+    private String logoUrl;
+
+    @Column(name = "tagsData")
+    private String[] tagsData;
+
+
+    /**
+     * 是否阅读开店协议
+     */
+    @Column(name = "en_isread")
+    private boolean enIsRead;
+
+
+    public Long getUserUU() {
+        return userUU;
+    }
+
+    public void setUserUU(Long userUU) {
+        this.userUU = userUU;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getLawPerson() {
+        return lawPerson;
+    }
+
+    public void setLawPerson(String lawPerson) {
+        this.lawPerson = lawPerson;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getLicenceId() {
+        return licenceId;
+    }
+
+    public void setLicenceId(String licenceId) {
+        this.licenceId = licenceId;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public String getLinkman() {
+        return linkman;
+    }
+
+    public void setLinkman(String linkman) {
+        this.linkman = linkman;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getFax() {
+        return fax;
+    }
+
+    public void setFax(String fax) {
+        this.fax = fax;
+    }
+
+    public String getWebsite() {
+        return website;
+    }
+
+    public void setWebsite(String website) {
+        this.website = website;
+    }
+
+    public String getProfession() {
+        return profession;
+    }
+
+    public void setProfession(String profession) {
+        this.profession = profession;
+    }
+
+    public String getLogoUrl() {
+        return logoUrl;
+    }
+
+    public void setLogoUrl(String logoUrl) {
+        this.logoUrl = logoUrl;
+    }
+
+    public String[] getTagsData() {
+        return tagsData;
+    }
+
+    public void setTagsData(String[] tagsData) {
+        this.tagsData = tagsData;
+    }
+
+    public boolean isEnIsRead() {
+        return enIsRead;
+    }
+
+    public void setEnIsRead(boolean enIsRead) {
+        this.enIsRead = enIsRead;
+    }
+}

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

@@ -24,6 +24,7 @@ public class UserInfo {
 		this.userName = user.getUserName();
 		this.userTel = user.getUserTel();
 		this.userSex = user.getUserSex();
+		this.pwdEnable = user.getPwdSecLevel()!=null && user.getPwdSecLevel()>1?true:false;
 		this.sys = user.isSys();
 		if (user.getRoles() != null && user.getRoles().size() > 0) {
 			StringBuffer sb = new StringBuffer();
@@ -41,15 +42,45 @@ public class UserInfo {
 				Map<String, Object> map = new HashMap<String, Object>();
 				map.put("enName", enterprise.getEnName());
 				map.put("uu", enterprise.getUu());
+				map.put("isVendor",enterprise.getEnMallVendorStatus());
 				if(enterprise.getEnSaasStatus() != null && enterprise.getEnSaasStatus() == Status.ENABLED.value()) {
 					map.put("enSaasUrl", enterprise.getEnSaasUrl());
 				}
-				if (enterprise.equals(current))
+				if (enterprise.equals(current)){
 					map.put("current", true);
+				}
 				list.add(map);
 			}
 			this.enterprises = list;
 		}
+		this.havePayPwd = user.getUserPay()==null || user.getUserPay().equals("") ?false:true;
+		this.idEnable = user.getIdEnable()==null?0:user.getIdEnable();
+		this.haveUserQuestion = haveUserQuestion;
+		this.lastLoginTime = user.getLastLoginTime();
+		this.secLevel = countSecLevel();
+	}
+
+	private Short countSecLevel(){
+		Short count = 0;
+		if(getIdEnable()!=null && getIdEnable()==1){
+			count++;
+		}
+		if(isPwdEnable()){
+			count++;
+		}
+		if(isHavePayPwd()){
+			count++;
+		}
+		if(getUserEmail()!=null){
+			count++;
+		}
+		if(getUserTel()!=null){
+			count++;
+		}
+		if(isHaveUserQuestion()){
+			count++;
+		}
+		return count;
 	}
 
 	public static Page<UserInfo> getUserInfo(Page<User> page) {
@@ -76,8 +107,68 @@ public class UserInfo {
 	
 	private boolean sys;
 
+	private boolean pwdEnable;
+
+	private Short idEnable;
+
 	private List<Map<String, Object>> enterprises;
 
+	private boolean havePayPwd;
+
+	private boolean haveUserQuestion;
+
+	private Short secLevel;
+
+	private Long lastLoginTime;
+
+	public Long getLastLoginTime() {
+		return lastLoginTime;
+	}
+
+	public void setLastLoginTime(Long lastLoginTime) {
+		this.lastLoginTime = lastLoginTime;
+	}
+
+	public Short getSecLevel() {
+		return secLevel;
+	}
+
+	public void setSecLevel(Short secLevel) {
+		this.secLevel = secLevel;
+	}
+
+	public boolean isHaveUserQuestion() {
+		return haveUserQuestion;
+	}
+
+	public void setHaveUserQuestion(boolean haveUserQuestion) {
+		this.haveUserQuestion = haveUserQuestion;
+	}
+
+	public boolean isHavePayPwd() {
+		return havePayPwd;
+	}
+
+	public void setHavePayPwd(boolean havePayPwd) {
+		this.havePayPwd = havePayPwd;
+	}
+
+	public Short getIdEnable() {
+		return idEnable;
+	}
+
+	public void setIdEnable(Short idEnable) {
+		this.idEnable = idEnable;
+	}
+
+	public boolean isPwdEnable() {
+		return pwdEnable;
+	}
+
+	public void setPwdEnable(boolean pwdEnable) {
+		this.pwdEnable = pwdEnable;
+	}
+
 	public Long getUserUU() {
 		return userUU;
 	}

+ 113 - 0
src/main/java/com/uas/platform/b2c/common/account/model/UserQuestion.java

@@ -0,0 +1,113 @@
+package com.uas.platform.b2c.common.account.model;
+
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * 用户密保问题
+ * @author liusw
+ */
+@Entity
+@Table(name = "sec$userquestion")
+@Cacheable
+@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "com.uas.platform.b2b.model.User")
+public class UserQuestion implements Serializable {
+    /**
+     *
+     */
+    private static final long serialVersionUID = 1L;
+
+    public UserQuestion() {
+    }
+
+    /**
+     * id
+     */
+    @Id
+    @Column(name = "uq_id")
+    @GeneratedValue
+    private Long id;
+
+    /**
+     * 用户uu
+     */
+    @OneToOne(cascade = { CascadeType.REFRESH })
+    @JoinColumn(name = "uq_useruu", insertable = false, updatable = false)
+    private User user;
+
+    /**
+     * 密保用户的UU号
+     */
+    @Column(name = "uq_useruu")
+    private Long userUU;
+
+
+    /**
+     * 密保问题
+     */
+    @Column(name = "uq_question")
+    private String question;
+
+    /**
+     * 密保答案
+     */
+    @Column(name = "uq_answer")
+    private String answer;
+
+    /**
+     * 排序
+     */
+    @Column(name = "uq_sort")
+    private Short sort;
+
+    public Long getId() {
+        return id;
+    }
+
+    public String getQuestion() {
+        return question;
+    }
+
+    public String getAnswer() {
+        return answer;
+    }
+
+    public Short getSort() {
+        return sort;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public User getUser() {
+        return user;
+    }
+
+    public void setUser(User user) {
+        this.user = user;
+    }
+
+    public void setQuestion(String question) {
+        this.question = question;
+    }
+
+    public void setAnswer(String answer) {
+        this.answer = answer;
+    }
+
+    public void setSort(Short sort) {
+        this.sort = sort;
+    }
+
+    public Long getUserUU() {
+        return userUU;
+    }
+
+    public void setUserUU(Long userUU) {
+        this.userUU = userUU;
+    }
+}

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

@@ -1,6 +1,8 @@
 package com.uas.platform.b2c.common.account.service;
 
+import com.uas.platform.b2c.common.account.controller.EnterpriseController;
 import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.account.model.FormEnterprise;
 import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.trade.support.ResultMap;
 
@@ -14,7 +16,7 @@ public interface EnterpriseService {
 	/**
 	 * 批量获取企业的信息
 	 * @param enuus uu号
-	 * @return List<Enterprise>
+	 * @return List<EnterpriseUas>
 	 */
 	List<Enterprise> getEnterpriseInfos(List<Long> enuus);
 	
@@ -38,7 +40,7 @@ public interface EnterpriseService {
 	 * 个人用户注册企业信息
 	 * @return 店铺信息
 	 */
-	ResultMap registerEnterprise(Enterprise enterprise, String filePath,User user);
+	ResultMap registerEnterprise(FormEnterprise enterprise, String filepath, User user);
 
 	/**
 	 * 个人用户注册企业信息(验证名称)
@@ -51,4 +53,10 @@ public interface EnterpriseService {
 	 * @return 店铺信息
 	 */
 	ResultMap validBusinessCode(String businessCode);
+
+	/**
+	 * 开启企业卖家功能
+	 * @return 企业
+	 */
+	Enterprise openVendor(Long enUU , boolean isRead , boolean isOpen);
 }

+ 38 - 0
src/main/java/com/uas/platform/b2c/common/account/service/SecQuestionService.java

@@ -0,0 +1,38 @@
+package com.uas.platform.b2c.common.account.service;
+
+import com.uas.platform.b2c.common.account.dao.SecQuestionDao;
+import com.uas.platform.b2c.common.account.model.SecQuestion;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import java.util.List;
+import org.springframework.data.domain.Page;
+
+public interface SecQuestionService {
+
+    /**
+     * 保存密保问题
+     * @param secQuestion
+     * @return
+     */
+    SecQuestion save(SecQuestion secQuestion);
+
+    /**
+     * 分页获取所有密保问题
+     * @return
+     */
+    Page<SecQuestion> getPageSecQuestion(PageParams pageInfo);
+
+    /**
+     * 根据id查询密保问题
+     * @param id
+     * @return
+     */
+    SecQuestion findById(Long id);
+
+    /**
+     * 根据id删除密保问题
+     * @param id
+     * @return
+     */
+    void delete(Long id);
+}

+ 24 - 0
src/main/java/com/uas/platform/b2c/common/account/service/UserQuestionService.java

@@ -0,0 +1,24 @@
+package com.uas.platform.b2c.common.account.service;
+
+import com.uas.platform.b2c.common.account.model.UserQuestion;
+
+import java.util.List;
+
+/**
+ * 密保问题
+ */
+public interface UserQuestionService {
+    /**
+     * 设置密保问题
+     * @param userQuestion
+     * @return
+     */
+    UserQuestion save(UserQuestion userQuestion);
+
+    /**
+     * 通过userUU查询当前用户密保问题
+     * @param userUU
+     * @return
+     */
+    List<UserQuestion> findUserQuestionByUserUUOrderBySortAsc(Long userUU);
+}

+ 55 - 7
src/main/java/com/uas/platform/b2c/common/account/service/UserService.java

@@ -2,12 +2,15 @@ package com.uas.platform.b2c.common.account.service;
 
 
 import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.common.account.model.UserCacheEnterprise;
 import com.uas.platform.b2c.common.account.model.UserInfo;
 import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
 import org.springframework.data.domain.Page;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
+import org.springframework.data.repository.query.Param;
 
 public interface UserService {
 
@@ -73,7 +76,12 @@ public interface UserService {
 	 * @return
 	 */
 	List<User> findAll();
-	
+
+	/**
+	 * 保存用户信息(邮箱,手机,姓名)
+	 * @param user
+	 * @return
+	 */
 	User save(User user);
 
 	/**
@@ -94,13 +102,53 @@ public interface UserService {
 	 * @param user 用户
 	 * @param request 请求
 	 */
-	public User addUser(User user, HttpServletRequest request) ;
+	User addUser(User user, HttpServletRequest request) ;
+
+	UserInfo findUserByKeyWord(String keyWord);
+
+	void bindUserToMyEnterprise(Long userUU);
+
+	void removeUser(Long uu);
+
+	boolean isEmailUseable(String email);
+
+	boolean isTelUseable(String tel);
+	/**
+	 * 新增用户注册企业时的缓存数据
+	 */
+	UserCacheEnterprise saveUserCacheEnterprise(User user , UserCacheEnterprise userCacheEnterprise);
+
+	/**
+	 * 查询用户注册企业时的缓存数据
+	 */
+	UserCacheEnterprise getUserCacheEnterprise(User user);
 
-	public UserInfo findUserByKeyWord(String keyWord);
+	/**
+	 * 删除用户注册企业时的缓存数据
+	 */
+	void deleteUserCacheEnterprise(User user);
 
-	public void bindUserToMyEnterprise(Long userUU);
+	/**
+	 * 修改用户支付密码
+	 * @param user
+	 * @param userPay
+	 * @param newUserPay
+	 * @return
+	 */
+	User updateUserPay( User user, String userPay, String newUserPay);
 
-	public void removeUser(Long uu);
-	public boolean isEmailUseable(String email);
-	public boolean isTelUseable(String tel);
+	/**
+	 * 保存用户实名认证信息
+	 * @param user
+	 * @return
+	 */
+	User saveRealAuth(User user);
+
+	/**
+	 * 分页获取实名认证信息
+	 * @param pageInfo
+	 * @param idEnable
+	 * @return
+	 */
+	Page<User> getPageStatusRealAuth(final PageParams pageInfo, Short idEnable);
 }

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

@@ -6,6 +6,7 @@ import com.uas.account.util.AccountUtils;
 import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
 import com.uas.platform.b2c.common.account.dao.UserBaseInfoDao;
 import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.account.model.FormEnterprise;
 import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.account.model.UserBaseInfo;
 import com.uas.platform.b2c.common.account.service.EnterpriseService;
@@ -21,6 +22,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
+import java.lang.reflect.Array;
+import java.util.Arrays;
 import java.util.List;
 
 @Service
@@ -46,7 +49,7 @@ public class EnterpriseServiceImpl implements EnterpriseService{
 	 * 批量获取企业的信息
 	 *
 	 * @param enuus uu号
-	 * @return List<Enterprise>
+	 * @return List<EnterpriseUas>
 	 */
 	@Override
 	public List<Enterprise> getEnterpriseInfos(List<Long> enuus) {
@@ -129,18 +132,32 @@ public class EnterpriseServiceImpl implements EnterpriseService{
 	}
 
 	@Override
-	public ResultMap registerEnterprise(Enterprise enterprise, String filePath, User user) {
+	public ResultMap registerEnterprise(FormEnterprise enterprise, String filePath,  User user) {
 		UserSpaceDetail detail = new UserSpaceDetail();
-		detail.setName(enterprise.getEnName());
-		detail.setShortName(enterprise.getEnShortname());
-		detail.setBusinessCode(enterprise.getEnBussinessCode());
-		detail.setBusinessCodeImage(filePath);
-		if (null == detail.getName()|| null == detail.getShortName() || null==detail.getBusinessCode() || null==detail.getBusinessCodeImage()){
+		detail.setName(enterprise.getName());
+		detail.setShortName(null);
+		detail.setBusinessCode(enterprise.getLicenceId());
+		detail.setBusinessCodeImage(enterprise.getUrl());
+		if (null == detail.getName()|| null==detail.getBusinessCode() || null==detail.getBusinessCodeImage()){
 			return new ResultMap(CodeType.SYSTEM_NOT_EXIST, "参数不能为空");
 		}
 		detail.setArea("中国大陆");
-		detail.setAddress(enterprise.getEnAddress());
-		detail.setUrl(enterprise.getEnUrl());
+		detail.setCorporation(enterprise.getLawPerson());
+		detail.setAddress(enterprise.getAddress());
+		detail.setUrl(enterprise.getWebsite());
+		detail.setContactMan(enterprise.getLinkman());
+		detail.setContactTel(enterprise.getPhone());
+		detail.setContactEmail(enterprise.getEmail());
+		detail.setFax(enterprise.getFax());
+        detail.setLogoImage(enterprise.getLogoUrl());
+		detail.setProfession(enterprise.getProfession());
+		if (null != enterprise.getTagsData() || enterprise.getTagsData().length>0){
+			String str = Arrays.toString(enterprise.getTagsData());
+			str = str.substring(1, str.length()-1);
+			detail.setTags(str);
+		} else {
+			detail.setTags(null);
+		}
 		detail.setAdminName(user.getUserName());
 		detail.setAdminEmail(user.getUserEmail());
 		detail.setAdminTel(user.getUserTel());
@@ -161,6 +178,9 @@ public class EnterpriseServiceImpl implements EnterpriseService{
 	public ResultMap validName(String name) {
 		try {
 			String result = AccountUtils.validName(name);
+			if ("connect timed out".equals(result) || "Read timed out".equals(result)){
+				return new ResultMap(CodeType.TIME_OUT, "请求超时");
+			}
 			JSONObject resultJSON = JSONObject.parseObject(result);
 			if (true == (boolean)resultJSON.get("inCloud") || true == (boolean)resultJSON.get("hasCreate")){
 				return new ResultMap(CodeType.SYSTEM_ERROR, "校验失败");
@@ -168,7 +188,7 @@ public class EnterpriseServiceImpl implements EnterpriseService{
 				return ResultMap.success("校验成功");
 			}
 		}catch (Exception e){
-			return new ResultMap(CodeType.SYSTEM_ERROR, "校验失败");
+			return new ResultMap(CodeType.TIME_OUT, "请求超时");
 		}
 	}
 
@@ -176,6 +196,9 @@ public class EnterpriseServiceImpl implements EnterpriseService{
 	public ResultMap validBusinessCode(String businessCode) {
 		try {
 			String result = AccountUtils.validBusinessCode(businessCode);
+			if ("connect timed out".equals(result) || "Read timed out".equals(result)){
+				return new ResultMap(CodeType.TIME_OUT, "请求超时");
+			}
 			JSONObject resultJSON = JSONObject.parseObject(result);
 			if (true == (boolean)resultJSON.get("inCloud") || true == (boolean)resultJSON.get("hasCreate")){
 				return new ResultMap(CodeType.SYSTEM_ERROR, "校验失败");
@@ -183,7 +206,24 @@ public class EnterpriseServiceImpl implements EnterpriseService{
 				return ResultMap.success("校验成功");
 			}
 		}catch (Exception e){
-			return new ResultMap(CodeType.SYSTEM_ERROR, "校验失败");
+			return new ResultMap(CodeType.TIME_OUT, "请求超时");
+		}
+	}
+
+	@Override
+	public Enterprise openVendor(Long enUU , boolean isRead , boolean isOpen) {
+		Enterprise existEnterprise = enterpriseDao.findOne(enUU);
+		if (isOpen){
+			existEnterprise.setEnMallVendorStatus((short) Status.ENABLED.value());
+			Enterprise enterprise = enterpriseDao.save(existEnterprise);
+			return null;
+		}
+		if (isRead) {
+			existEnterprise.setEnMallVendorStatus((short) Status.ISREAD.value());
+		}else{
+			existEnterprise.setEnMallVendorStatus(null);
 		}
+		Enterprise enterprise = enterpriseDao.save(existEnterprise);
+		return null;
 	}
 }

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

@@ -0,0 +1,62 @@
+package com.uas.platform.b2c.common.account.service.impl;
+
+import com.uas.account.entity.UserDetail;
+import com.uas.account.util.AccountUtils;
+import com.uas.platform.b2c.common.account.dao.SecQuestionDao;
+import com.uas.platform.b2c.common.account.model.SecQuestion;
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.common.account.service.SecQuestionService;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Order;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Sort.Direction;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SecQuestionServiceImpl implements SecQuestionService {
+
+    @Autowired
+    private SecQuestionDao secQuestionDao;
+
+    @Override
+    public SecQuestion save(SecQuestion secQuestion) {
+        postToAccountCenter(secQuestion);
+        return secQuestionDao.save(secQuestion);
+    }
+
+    @Override
+    public Page<SecQuestion> getPageSecQuestion(PageParams pageInfo) {
+        final PageInfo info = new PageInfo(pageInfo);
+        //info.filter("idEnable", idEnable);
+        info.sorting(Direction.ASC,new String[]{"type"});
+        return secQuestionDao.findAll(new Specification<SecQuestion>() {
+            @Override
+            public Predicate toPredicate(Root<SecQuestion> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                query.where(info.getPredicates(root, query, cb));
+                return null;
+            }
+        }, info);
+    }
+
+    @Override
+    public SecQuestion findById(Long id) {
+        return secQuestionDao.findOne(id);
+    }
+
+    @Override
+    public void delete(Long id) {
+       secQuestionDao.delete(id);
+    }
+
+    public void postToAccountCenter(SecQuestion secQuestion){
+
+    }
+}

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

@@ -0,0 +1,42 @@
+package com.uas.platform.b2c.common.account.service.impl;
+
+import com.uas.account.util.AccountUtils;
+import com.uas.platform.b2c.common.account.dao.UserQuestionDao;
+import com.uas.platform.b2c.common.account.model.UserQuestion;
+import com.uas.platform.b2c.common.account.service.UserQuestionService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class UserQuestionServiceImpl implements UserQuestionService {
+
+    @Autowired
+    private UserQuestionDao userQuestionDao;
+
+    @Override
+    public UserQuestion save(UserQuestion userQuestion){
+        postToAccountCenter(userQuestion);
+        return userQuestionDao.save(userQuestion);
+    }
+
+    @Override
+    public List<UserQuestion> findUserQuestionByUserUUOrderBySortAsc(Long userUU) {
+        return userQuestionDao.findUserQuestionByUserUUOrderBySortAsc(userUU);
+    }
+
+    private void postToAccountCenter(UserQuestion question) {
+        com.uas.account.entity.UserQuestion accountUserQuestion = new com.uas.account.entity.UserQuestion();
+        accountUserQuestion.setAnswer(question.getAnswer());
+        accountUserQuestion.setQuestion(question.getQuestion());
+        accountUserQuestion.setId(question.getId());
+        accountUserQuestion.setUserUU(question.getUserUU());
+        accountUserQuestion.setSort(question.getSort());
+        try {
+            AccountUtils.saveUserQuestion(accountUserQuestion);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

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

@@ -3,22 +3,34 @@ package com.uas.platform.b2c.common.account.service.impl;
 import com.uas.account.entity.UserDetail;
 import com.uas.account.util.AccountUtils;
 import com.uas.message.mail.service.MailService;
+import com.uas.platform.b2c.common.account.dao.UserCacheEnterpriseDao;
 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.Role;
-import com.uas.platform.b2c.common.account.model.User;
-import com.uas.platform.b2c.common.account.model.UserInfo;
+import com.uas.platform.b2c.common.account.model.*;
 import com.uas.platform.b2c.common.account.service.UserService;
 import com.uas.platform.b2c.common.base.dao.CommonDao;
 import com.uas.platform.b2c.core.config.MessageConf;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.exception.SystemException;
-import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.util.AgentUtils;
 import com.uas.platform.core.util.encry.Md5Utils;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.servlet.http.HttpServletRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.jpa.domain.Specification;
@@ -26,14 +38,6 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-import javax.servlet.http.HttpServletRequest;
-import java.text.SimpleDateFormat;
-import java.util.*;
-
 @Service
 public class UserServiceImpl implements UserService {
 
@@ -57,6 +61,9 @@ public class UserServiceImpl implements UserService {
 	@Autowired
 	private CommonDao commonDao;
 
+	@Autowired
+	private UserCacheEnterpriseDao userCacheEnterpriseDao;
+
 	@Autowired
 	private MailService mailService;
 	@Autowired
@@ -263,17 +270,18 @@ public class UserServiceImpl implements UserService {
 		if (result) {
 			User user1 = userDao.findOne(user.getUserUU());
 			user1.setUserPwd(Md5Utils.encode(newPassword, user1.getUserUU()));
+			user1.setPwdSecLevel(user.getPwdSecLevel());
 			if (user1.getEnterprise() == null)
 				user1.setCurrentEnterprise();// 随便绑定一个用户所属企业
 			Enterprise enterprise = user1.getEnterprise();
 			try {
-                //判断是否为个人账户
-                if (enterprise == null){
-                    AccountUtils.resetPassword(user1.getUserUU(), null, newPassword);
-                }else {
-                    AccountUtils.resetPassword(user1.getUserUU(), enterprise.getUu(), newPassword);
-                }
-				//user1 = userDao.save(user1);
+					//判断是否为个人账户
+					if (enterprise == null){
+							AccountUtils.resetPassword(user1.getUserUU(), null, newPassword);
+					}else {
+							AccountUtils.resetPassword(user1.getUserUU(), enterprise.getUu(), newPassword);
+					}
+				user1 = userDao.save(user1);
 			} catch (Exception e) {
 				throw new SystemException(e.getMessage());
 			}
@@ -342,7 +350,12 @@ public class UserServiceImpl implements UserService {
 		detail.setMobile(user.getUserTel());
 		detail.setName(user.getUserName());
 		detail.setSex(user.getUserSex());
-		AccountUtils.saveUser(user.getUserUU(), SystemSession.getUser().getEnterprise().getUu(), detail);
+		//判断是否个人用户
+		if(SystemSession.getUser().getEnterprise()==null){
+			AccountUtils.saveUser(user.getUserUU(), null, detail);
+		}else{
+			AccountUtils.saveUser(user.getUserUU(), SystemSession.getUser().getEnterprise().getUu(), detail);
+		}
 	}
 	@Override
 	public void removeUser(Long uu) {
@@ -373,4 +386,76 @@ public class UserServiceImpl implements UserService {
 		}
 	}
 
+	@Override
+	public UserCacheEnterprise saveUserCacheEnterprise(User user, UserCacheEnterprise userCacheEnterprise) {
+		userCacheEnterprise.setUserUU(user.getUserUU());
+		if (null != userCacheEnterpriseDao.findOne(user.getUserUU())){
+			userCacheEnterpriseDao.delete(user.getUserUU());
+			return userCacheEnterpriseDao.save(userCacheEnterprise);
+		}else{
+			return userCacheEnterpriseDao.save(userCacheEnterprise);
+		}
+	}
+
+	@Override
+	public UserCacheEnterprise getUserCacheEnterprise(User user) {
+		return userCacheEnterpriseDao.findOne(user.getUserUU());
+	}
+
+	@Override
+	public void deleteUserCacheEnterprise(User user) {
+		userCacheEnterpriseDao.delete(userCacheEnterpriseDao.findOne(user.getUserUU()));
+        userCacheEnterpriseDao.flush();
+	}
+	@Override
+	public User updateUserPay(User user, String userPay, String newUserPay) {
+		boolean result =false;
+		User user1 = userDao.findOne(user.getUserUU());
+		//未设置和验证成功
+		if (user1.getUserPay()==null || user1.getUserPay().equals("")) {
+			user1.setUserPay(Md5Utils.encode(newUserPay, user1.getUserUU()));
+			try {
+				user1 = userDao.save(user1);
+			} catch (Exception e) {
+				throw new SystemException(e.getMessage());
+			}
+			return user1;
+		}else{//需要验证密码
+			result = user1.getUserPay().equals(Md5Utils.encode(userPay, user.getUserUU()));
+			if(result){
+				user1.setUserPay(Md5Utils.encode(newUserPay, user1.getUserUU()));
+				try {
+					user1 = userDao.save(user1);
+				} catch (Exception e) {
+					throw new SystemException(e.getMessage());
+				}
+				return user1;
+			}else{
+				throw new IllegalOperatorException("原密码验证失败");
+			}
+		}
+	}
+
+	@Override
+	public User saveRealAuth(User user) {
+		User sysUser = userDao.findOne(user.getUserUU());
+		if(sysUser==null){
+			throw new IllegalOperatorException("找不到用户");
+		}
+		sysUser.setIdEnable(user.getIdEnable());
+		return userDao.save(sysUser);
+	}
+
+	@Override
+	public Page<User> getPageStatusRealAuth(PageParams pageInfo, Short idEnable) {
+		final PageInfo info = new PageInfo(pageInfo);
+		info.filter("idEnable", idEnable);
+		return userDao.findAll(new Specification<User>() {
+			@Override
+			public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+				query.where(info.getPredicates(root, query, cb));
+				return null;
+			}
+		}, info);
+	}
 }

+ 1 - 0
src/main/java/com/uas/platform/b2c/common/account/v2/controller/UserController.java

@@ -40,4 +40,5 @@ public class UserController {
 		Long enuu = Long.valueOf(user.getSpaceDialectUID());
         userService.delete(uu, enuu);
     }
+
 }

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

@@ -16,7 +16,9 @@ import org.springframework.stereotype.Service;
 
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 @Service("v2.EnterpriseService")
 public class EnterpriseServiceImpl implements EnterpriseService {
@@ -34,6 +36,10 @@ public class EnterpriseServiceImpl implements EnterpriseService {
     @Override
     public void update(UserSpace userSpace, UserSpaceDetail userSpaceDetail) {
         Enterprise enterprise = new Enterprise();
+        if (null == userSpace.getDialectUID() && "".equals(userSpace.getDialectUID())){
+            logger.log("更新企业信息出错,uu为空", "值为null", null,0L);
+            return;
+        }
         Enterprise oldenterprise = enterpriseDao.findByUu(Long.valueOf(userSpace.getDialectUID()));
         enterprise.setEnAddress(userSpaceDetail.getAddress());
         enterprise.setEnArea(userSpaceDetail.getArea());
@@ -45,7 +51,21 @@ public class EnterpriseServiceImpl implements EnterpriseService {
         enterprise.setEnName(userSpaceDetail.getName());
         enterprise.setEnLogoUrl(userSpaceDetail.getBusinessCodeImage());
         enterprise.setUu(Long.valueOf(userSpace.getDialectUID()));
-        enterpriseDao.save(enterprise);
+        Enterprise newEn = enterpriseDao.save(enterprise);
+        List<User> users = userDao.findUserByUserTel(userSpaceDetail.getAdminTel());
+        if (!CollectionUtils.isEmpty(users)){
+            User adminUser = users.get(0);
+            Set<Enterprise> enterprises = null;
+            if (null == adminUser.getEnterprises()){
+                enterprises = new HashSet<Enterprise>();
+            }else{
+                enterprises = adminUser.getEnterprises();
+            }
+            enterprises.add(newEn);
+            adminUser.setEnterprises(enterprises);
+            enterprise.setEnAdminuu(adminUser.getUserUU());
+            userDao.save(adminUser);
+        }
         if(null != oldenterprise) {
             logger.log("更新企业信息", enterprise.getUu()+"time: " + sdf.format(new Date()), enterprise.getUu(), 0L);
         } else {
@@ -62,7 +82,7 @@ public class EnterpriseServiceImpl implements EnterpriseService {
                 if(!CollectionUtils.isEmpty(users)) {
                     enterprise.setEnAdminuu(users.get(0).getUserUU());
                     enterpriseDao.save(enterprise);
-                    logger.log("更换管理员", enterprise.getEnName()+"," +users.get(0).getUserName() + "time:" + sdf.format(new Date()), enterprise.getUu(), enterprise.getEnAdminuu());
+                    logger.log("更换管理员", enterprise.getEnName() + ":" + enterprise.getUu() + ";" + enterprise.getEnAdminuu());
                 }
             }
         }

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

@@ -10,19 +10,20 @@ import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.Status;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 
 @Service("v2.UserService")
 public class UserServiceImpl implements UserService {
 
-	@Autowired
-	private UserDao userDao;
+    @Autowired
+    private UserDao userDao;
 
-	@Autowired
+    @Autowired
     private EnterpriseDao enterpriseDao;
 
     private static final UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
@@ -31,49 +32,109 @@ public class UserServiceImpl implements UserService {
 
     @Override
     public void save(User user) {
-        com.uas.platform.b2c.common.account.model.User u = userDao.findOne(Long.parseLong(user.getDialectUID()));
-        if (null == u){
-            u =  new com.uas.platform.b2c.common.account.model.User();
+        com.uas.platform.b2c.common.account.model.User u = null;
+        if (!StringUtils.isEmpty(user.getDialectUID())) {
+            u = userDao.findOne(Long.parseLong(user.getDialectUID()));
         }
+        if (u == null && !StringUtils.isEmpty(user.getUid()) ){
+            List<com.uas.platform.b2c.common.account.model.User> users = userDao.findUserByUserTel(user.getUid());
+            if (!CollectionUtils.isEmpty(users)){
+                if (users.size() != 1 || !users.get(0).getUserUU().equals(user.getDialectUID())) {
+                    userDao.delete(users);
+                }else{
+                    u = users.get(0);
+                }
+            }
+        }
+        if (null == u) {
+            u = new com.uas.platform.b2c.common.account.model.User();
+        }
+        oneSave(user,u);
+//        if (null == user.getDialectUID() || "".equals(user.getDialectUID())){
+//            List<com.uas.platform.b2c.common.account.model.User> users = userDao.findUserByUserTel(user.getUid());
+//            if (!CollectionUtils.isEmpty(users)){
+//                for (com.uas.platform.b2c.common.account.model.User u:users){
+//                    oneSave(user,u);
+//                }
+//            }
+//        }else {
+//            com.uas.platform.b2c.common.account.model.User u = userDao.findOne(Long.parseLong(user.getDialectUID()));
+//            if (null == u) {
+//                u = new com.uas.platform.b2c.common.account.model.User();
+//                oneSave(user,u);
+//            }
+//        }
+
+    }
+    private void oneSave(User user , com.uas.platform.b2c.common.account.model.User u){
         u.setUserPwd(user.getPassword());
         u.setUserName(user.getName());
+        u.setUserTel(user.getUid());
         u.setEnable((short) 1);
         u.setUserEmail(user.getSecondUID());
         u.setUserUU(Long.valueOf(user.getDialectUID()));
-        Enterprise enterprise = enterpriseDao.findByUu(Long.valueOf(user.getSpaceDialectUID()));
-        if(null != enterprise) {
+        u.setPwdSecLevel(user.getPwdSecLevel());
+        u.setLastLoginTime(user.getLastLoginTime());
+        Enterprise enterprise = null;
+        if(user.getSpaceDialectUID()!=null){
+            enterprise = enterpriseDao.findByUu(Long.valueOf(user.getSpaceDialectUID()));
+        }
+        if (null != enterprise) {
             u.setEnterprise(enterprise);
+            if (null == enterprise.getEnAdminuu()) {
+                enterprise.setEnAdminuu(u.getUserUU());
+                enterpriseDao.save(enterprise);
+                logger.log("设置管理员", enterprise.getEnName() + ":" + enterprise.getUu() + ";" + u.getUserName() + ":" + u.getUserUU());
+            }
+        }
+        boolean isMember = false;
+        //将该成员添加至企业
+        Set<Enterprise> ens = u.getEnterprises();
+        if (!CollectionUtils.isEmpty(ens)){
+            Iterator<Enterprise> it = ens.iterator();
+            while (it.hasNext()) {
+                if (it.next().getUu().equals(enterprise.getUu())) {
+                    isMember = true;
+                }
+            }
+        }
+        if (!isMember) {
+            Set<Enterprise> enterprises = null;
+            if (null == u.getEnterprises()) {
+                enterprises = new HashSet<Enterprise>();
+            } else {
+                enterprises = u.getEnterprises();
+            }
+            if (null != enterprise) {
+                u.setEnterprise(enterprise);
+                enterprises.add(enterprise);
+            }
+            u.setEnterprises(enterprises);
         }
         List<com.uas.platform.b2c.common.account.model.User> oldUsers = userDao.findUserByUserUU(u.getUserUU());
         userDao.save(u);
-        if(oldUsers.size() > 0) {
-            logger.log("更新用户信息", user.getDialectUID() + "time: " + sdf.format(new Date()), enterprise.getUu(), u.getUserUU());
+        if (oldUsers.size() > 0) {
+            logger.log("更新用户信息", user.getDialectUID() + "" + (enterprise==null?"":enterprise.getUu()));
         } else {
-            if(null != enterprise && null == enterprise.getEnAdminuu()) {
-                enterprise.setEnAdminuu(u.getUserUU());
-                enterpriseDao.save(enterprise);
-                logger.log("设置管理员", enterprise.getEnName() + "," + u.getUserName() + "time: " + sdf.format(new Date()), enterprise.getUu(), u.getUserUU());
-            }
-            logger.log("新增用户信息", user.getDialectUID() + "time: " + sdf.format(new Date()), enterprise.getUu(), u.getUserUU());
+            logger.log("新增用户信息", user.getDialectUID() + ", " + (enterprise==null?"":enterprise.getUu()) );
         }
     }
 
-
     @Override
     public void delete(Long uu, Long enuu) {
         com.uas.platform.b2c.common.account.model.User user = userDao.findOne(uu);
         Enterprise enterprise = enterpriseDao.findByUu(enuu);
-        if(null != user && null != enterprise) {
+        if (null != user && null != enterprise) {
             if (user.getEnterprises().contains(enterprise)) {
                 user.removeEnterprise(enterprise);
                 if (user.getEnterprises().size() != 0) {
                     user.setEnable((short) Status.DISABLED.value());
-                    logger.log("删除用户", "禁用" + user.getUserUU(), 0L, 0L);
+                    logger.log("删除用户", "禁用" + user.getUserUU(), enuu, uu);
                     userDao.save(user);
                 }
                 if (user.getEnterprises().size() == 0) {
                     userDao.delete(user);
-                    logger.log("删除用户", "删除" + user.getUserUU(), 0L, 0L);
+                    logger.log("删除用户", "删除" + user.getUserUU(), enuu, uu);
                 }
             }
         }

+ 4 - 0
src/main/java/com/uas/platform/b2c/core/constant/Status.java

@@ -31,6 +31,10 @@ public enum Status {
 	 * {@code 104 已通过}
 	 */
 	ALLOW(104, "已通过"),
+	/**
+	 * {@code 104 已通过}
+	 */
+	EXPIRED(105, "已失效"),
 	/**
 	 * {@code 111 已结束}
 	 */

+ 25 - 5
src/main/java/com/uas/platform/b2c/core/support/log/UsageBufferedLogger.java

@@ -28,7 +28,11 @@ public class UsageBufferedLogger extends BufferedLogger<UsageLog> {
 	 *            消息
 	 */
 	public void log(String title, String message) {
-		log(new UsageLog(title, message, null, null, null));
+		try {
+			log(new UsageLog(title, message, null, null, null));
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
 	}
 
 	/**
@@ -40,7 +44,11 @@ public class UsageBufferedLogger extends BufferedLogger<UsageLog> {
 	 *            消息
 	 */
 	public void log(String title, String message, Long enuu, Long useruu) {
-		log(new UsageLog(title, message, null, null, null, enuu, useruu));
+		try {
+			log(new UsageLog(title, message, null, null, null, enuu, useruu));
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
 	}
 
 	/**
@@ -52,7 +60,11 @@ public class UsageBufferedLogger extends BufferedLogger<UsageLog> {
 	 *            消息
 	 */
 	public void log(String title, String message, Long userUU, String ip) {
-		log(new UsageLog(title, message, userUU, ip, null, null));
+		try {
+			log(new UsageLog(title, message, userUU, ip, null, null));
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
 	}
 
 	/**
@@ -66,7 +78,11 @@ public class UsageBufferedLogger extends BufferedLogger<UsageLog> {
 	 *            消息详细描述
 	 */
 	public void log(String title, String message, String description) {
-		log(new UsageLog(title, message, description, null, null));
+		try {
+			log(new UsageLog(title, message, description, null, null));
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
 	}
 
 	/**
@@ -84,7 +100,11 @@ public class UsageBufferedLogger extends BufferedLogger<UsageLog> {
 	 *            相关单据主键
 	 */
 	public void log(String title, String message, String description, String relativeCode, Long relativeKey) {
-		log(new UsageLog(title, message, description, relativeCode, relativeKey));
+		try {
+			log(new UsageLog(title, message, description, relativeCode, relativeKey));
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
 	}
 
 }

+ 38 - 0
src/main/java/com/uas/platform/b2c/external/erp/commodity/service/impl/BankInfoServiceImpl.java

@@ -0,0 +1,38 @@
+package com.uas.platform.b2c.external.erp.commodity.service.impl;
+
+import com.uas.api.b2c_erp.seller.model.BankInfoERP;
+import com.uas.api.b2c_erp.seller.service.BankInfoService;
+import com.uas.platform.b2c.external.erp.commodity.util.ModelConverter;
+import com.uas.platform.b2c.fa.payment.dao.BankInfoDao;
+import com.uas.platform.b2c.fa.payment.model.BankInfo;
+import com.uas.platform.core.model.Status;
+import com.uas.platform.core.model.Type;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * Created by wangyc on 2017/11/10.
+ *
+ * @version 2017/11/10 13:52 wangyc
+ */
+public class BankInfoServiceImpl implements BankInfoService {
+
+    @Autowired
+    private com.uas.platform.b2c.fa.payment.service.BankInfoService bankInfoService;
+
+    @Autowired
+    private BankInfoDao bankInfoDao;
+
+    @Override
+    public BankInfoERP findOne() {
+        BankInfo bankInfo = bankInfoService.getEnterpriseBankInfoContainsStatus(Type.SUP.value(), Status.ALLOW.value()).get(0);
+        BankInfoERP bankInfoERP = ModelConverter.convert(bankInfo);
+        return bankInfoERP;
+    }
+
+    @Override
+    public void callback(String erpNum) {
+        BankInfo bankInfo = bankInfoService.getEnterpriseBankInfoContainsStatus(Type.SUP.value(), Status.ALLOW.value()).get(0);
+        bankInfo.setErpNum(erpNum);
+        bankInfoDao.save(bankInfo);
+    }
+}

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

@@ -0,0 +1,130 @@
+package com.uas.platform.b2c.external.erp.commodity.service.impl;
+
+import com.uas.api.b2c_erp.seller.model.ProductDetailERP;
+import com.uas.api.b2c_erp.seller.service.ProductDetailERPService;
+import com.uas.platform.b2c.common.account.service.EnterpriseService;
+import com.uas.platform.b2c.core.constant.Status;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.external.erp.commodity.util.ModelConverter;
+import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
+import com.uas.platform.b2c.prod.commodity.dao.ProductDao;
+import com.uas.platform.b2c.prod.commodity.dao.ProductDetailDao;
+import com.uas.platform.b2c.prod.commodity.model.Goods;
+import com.uas.platform.b2c.prod.commodity.model.Product;
+import com.uas.platform.b2c.prod.commodity.model.ProductDetail;
+import com.uas.platform.b2c.prod.commodity.service.GoodsService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 针对ERP物料交易详情接口
+ *
+ * @version 2017/10/28 17:57 wangyc
+ */
+public class ProductDetailERPServiceImpl implements ProductDetailERPService {
+
+    @Autowired
+    private ProductDetailDao productDetailDao;
+
+    @Autowired
+    private ProductDao productDao;
+
+    @Autowired
+    private GoodsDao goodsDao;
+
+    @Autowired
+    private GoodsService goodsService;
+
+    @Autowired
+    private EnterpriseService enterpriseService;
+
+    private static final Logger logger = LoggerFactory.getLogger(ProductDetailERPServiceImpl.class);
+
+    @Override
+    public boolean uploadProductDetailERP(List<ProductDetailERP> productDetailERPList) {
+        List<ProductDetail> productDetails = new ArrayList<ProductDetail>();
+        Long enuu = SystemSession.getUser().getEnterprise().getUu();
+        for (ProductDetailERP productDetailERP : productDetailERPList) {
+            ProductDetail productDetail = ModelConverter.convert(productDetailERP);
+
+            ProductDetail productDetailExist = productDetailDao.findByProductId(productDetail.getProductId());
+            if (productDetailExist != null) {
+                List<Product> products = productDao.getProductByEnUUAndProdNum(enuu, productDetail.getCode());
+                if (!CollectionUtils.isEmpty(products)) {
+                    productDetail.setProductId(products.get(0).getId());
+                }
+                productDetails.add(productDetail);
+            }
+        }
+        productDetailDao.save(productDetails);
+        return true;
+    }
+
+    @Override
+    public String getCurrency() {
+        return enterpriseService.getCurrencyByRegisterAddress().getData().toString();
+    }
+
+    @Override
+    public void updateReserve(List<ProductDetailERP> productDetailERPList) {
+        List<ProductDetail> productDetails = new ArrayList<ProductDetail>();
+        Long enuu = SystemSession.getUser().getEnterprise().getUu();
+        logger.info("size : " + productDetailERPList.size());
+        for (ProductDetailERP productDetailERP : productDetailERPList) {
+            List<Product> products = productDao.getProductByEnUUAndProdNum(enuu, productDetailERP.getCode());// 获取对应商城物料信息
+            if (!CollectionUtils.isEmpty(products)) {
+                ProductDetail productDetail = productDetailDao.findByProductId(products.get(0).getId());// 获取商城物料信息
+                if (productDetail == null) {// 如果物料交易详情为空,新增物料交易详情
+                    productDetail = new ProductDetail();
+                    productDetail.setProductId(products.get(0).getId());
+                }
+
+                if (products.get(0).getCmpUuId() != null) {// 如果为标准器件,更新在售商品信息
+                    Double b2cReserve = goodsDao.getSumReserveByEnUUAndUuidAndStatus(enuu, products.get(0).getCmpUuId(), Status.AVAILABLE.value());
+                    b2cReserve = b2cReserve == null ? 0 : b2cReserve;
+                    Double erpReserve = productDetailERP.getReserve();
+                    if (Double.compare(b2cReserve, erpReserve) > 0) {// 如果商城已上架数量大于erp空闲库存,下架部分在售商品
+                        BigDecimal b2cDecimal = BigDecimal.valueOf(b2cReserve);
+                        BigDecimal erpDecimal = BigDecimal.valueOf(erpReserve);
+                        BigDecimal subtractDecimal = b2cDecimal.subtract(erpDecimal);// 商城已上架数量、erp库存差值
+                        List<Goods> goods = goodsDao.findByEnUUAndUuidOrderByReserveAsc(enuu, products.get(0).getCmpUuId());// 获取该企业此物料上架商品信息(按库存从小到大排序)
+                        if (!CollectionUtils.isEmpty(goods)) {
+                            for (Goods good : goods) {
+                                if (Double.compare(subtractDecimal.doubleValue(), good.getReserve()) == 0) {// 差值等于此批次数量,直接下架此批次
+                                    goodsService.offShelfGoodsByProvider(good.getBatchCode());
+                                    break;
+                                }
+
+                                if (Double.compare(subtractDecimal.doubleValue(), good.getReserve()) < 0) {// 差值小于此批次数量,下架部分库存
+                                    Goods nowGood = goodsDao.findOne(good.getId());
+                                    good.setReserve(BigDecimal.valueOf(good.getReserve()).subtract(subtractDecimal).doubleValue());
+                                    goodsService.updateGoods(nowGood, good);
+                                    goodsService.updateComponentTradeInfos(nowGood.getUuid());
+                                    break;
+                                }
+
+                                if (Double.compare(subtractDecimal.doubleValue(), good.getReserve()) > 0) {// 差值大于此批次数量,下架次批次,并继续下一批次调整
+                                    goodsService.offShelfGoodsByProvider(good.getBatchCode());
+                                    subtractDecimal = subtractDecimal.subtract(BigDecimal.valueOf(good.getReserve()));
+                                }
+                            }
+                        }
+                    }
+                }
+
+                if (productDetail != null) {
+                    productDetail.setReserve(productDetailERP.getReserve());
+                    productDetails.add(productDetail);
+                }
+            }
+        }
+
+        productDetailDao.save(productDetails);
+    }
+}

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

@@ -1,13 +1,17 @@
 package com.uas.platform.b2c.external.erp.commodity.util;
 
 import com.uas.api.b2c_erp.operation.model.OperationInfoUas;
+import com.uas.api.b2c_erp.seller.model.BankInfoERP;
 import com.uas.api.b2c_erp.seller.model.GoodsQtyPriceUas;
 import com.uas.api.b2c_erp.seller.model.GoodsSimpleUas;
+import com.uas.api.b2c_erp.seller.model.ProductDetailERP;
 import com.uas.api.domain.IPage;
 import com.uas.platform.b2c.external.erp.product.model.OperationInfo;
+import com.uas.platform.b2c.fa.payment.model.BankInfo;
 import com.uas.platform.b2c.prod.commodity.model.Goods;
 import com.uas.platform.b2c.prod.commodity.model.GoodsQtyPrice;
 import com.uas.platform.b2c.prod.commodity.model.GoodsSimple;
+import com.uas.platform.b2c.prod.commodity.model.ProductDetail;
 import com.uas.platform.b2c.prod.product.component.modal.ComponentGoods;
 import org.springframework.data.domain.Page;
 import org.springframework.util.CollectionUtils;
@@ -176,4 +180,37 @@ public class ModelConverter {
 		operationInfoUas.setUuid(operationInfo.getUuid());
 		return operationInfoUas;
 	}
+
+	/**
+	 * 转换ERP物料交易详情
+	 * @param productDetailERP
+	 * @return
+	 */
+	public static ProductDetail convert(ProductDetailERP productDetailERP) {
+		ProductDetail productDetail = new ProductDetail();
+		productDetail.setB2cMaxDelivery(productDetailERP.getB2cMaxDelivery());
+		productDetail.setB2cMinDelivery(productDetailERP.getB2cMinDelivery());
+		productDetail.setMaxDelivery(productDetailERP.getMaxDelivery());
+		productDetail.setMinDelivery(productDetailERP.getMinDelivery());
+		productDetail.setMinBuyQty(productDetailERP.getMinBuyQty());
+		productDetail.setMinPackQty(productDetailERP.getMinPackQty());
+		productDetail.setPackaging(productDetailERP.getPackaging());
+		productDetail.setPrice(productDetailERP.getPrice());
+		productDetail.setProduceDate(productDetailERP.getProduceDate());
+		productDetail.setReserve(productDetailERP.getReserve());
+		productDetail.setCode(productDetailERP.getCode());
+		productDetail.setBreakUp(productDetailERP.getBreakUp());
+		return productDetail;
+	}
+
+	public static BankInfoERP convert(BankInfo bankInfo) {
+		BankInfoERP bankInfoERP = new BankInfoERP();
+		bankInfoERP.setCurrency(bankInfo.getCurrency());
+		bankInfoERP.setAccountname(bankInfo.getAccountname());
+		bankInfoERP.setBankname(bankInfo.getBankname());
+		bankInfoERP.setCreateTime(bankInfo.getCreateTime());
+		bankInfoERP.setEnuu(bankInfo.getEnuu());
+		bankInfoERP.setNumber(bankInfo.getNumber());
+		return bankInfoERP;
+	}
 }

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

@@ -0,0 +1,51 @@
+package com.uas.platform.b2c.external.erp.common.util;
+
+import com.uas.api.b2c_erp.baisc.model.EnterpriseUas;
+import com.uas.api.b2c_erp.baisc.model.UserBaseInfoUas;
+import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.account.model.UserBaseInfo;
+
+/**
+ * Created by wangyc on 2017/11/23.
+ *
+ * @version 2017/11/23 11:20 wangyc
+ */
+public class ModelConverter {
+
+    /**
+     * 转换用户信息
+     * @param user
+     * @return
+     */
+    public static UserBaseInfoUas convert(UserBaseInfo user) {
+        UserBaseInfoUas userUas = new UserBaseInfoUas();
+        userUas.setUserName(user.getUserName());
+        userUas.setUserEmail(user.getUserEmail());
+        userUas.setUserTel(user.getUserTel());
+
+        return userUas;
+    }
+
+    /**
+     * 转换企业信息
+     * @param enterprise
+     * @return
+     */
+    public static EnterpriseUas convert(Enterprise enterprise) {
+        EnterpriseUas enterpriseUas = new EnterpriseUas();
+        enterpriseUas.setEnAddress(enterprise.getEnAddress());
+        enterpriseUas.setEnArea(enterprise.getEnArea());
+        enterpriseUas.setEnBussinessCode(enterprise.getEnBussinessCode());
+        enterpriseUas.setEnDeliverAddr(enterprise.getEnDeliverAddr());
+        enterpriseUas.setEnEmail(enterprise.getEnEmail());
+        enterpriseUas.setEnFax(enterprise.getEnFax());
+        enterpriseUas.setEnIndustry(enterprise.getEnIndustry());
+        enterpriseUas.setEnName(enterprise.getEnName());
+        enterpriseUas.setEnShortname(enterprise.getEnShortname());
+        enterpriseUas.setEnTel(enterprise.getEnTel());
+        enterpriseUas.setEnType(enterprise.getEnType());
+        enterpriseUas.setUu(enterprise.getUu());
+
+        return enterpriseUas;
+    }
+}

+ 154 - 0
src/main/java/com/uas/platform/b2c/external/erp/order/service/impl/B2cOrderServiceImpl.java

@@ -0,0 +1,154 @@
+package com.uas.platform.b2c.external.erp.order.service.impl;
+
+import com.uas.api.b2c_erp.buyer.model.B2cOrder;
+import com.uas.api.b2c_erp.buyer.model.B2cOrderDetail;
+import com.uas.api.b2c_erp.buyer.model.Payment;
+import com.uas.api.b2c_erp.buyer.service.B2cOrderService;
+import com.uas.platform.b2c.core.config.SysConf;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.platform.b2c.external.erp.order.util.ModelConverter;
+import com.uas.platform.b2c.fa.payment.model.BankInfo;
+import com.uas.platform.b2c.fa.payment.model.BankTransfer;
+import com.uas.platform.b2c.fa.payment.service.BankInfoService;
+import com.uas.platform.b2c.fa.payment.service.BankTransferService;
+import com.uas.platform.b2c.prod.commodity.dao.GoodsHistoryDao;
+import com.uas.platform.b2c.prod.commodity.dao.ProductDao;
+import com.uas.platform.b2c.prod.commodity.model.GoodsHistory;
+import com.uas.platform.b2c.prod.commodity.model.Product;
+import com.uas.platform.b2c.trade.order.dao.OrderDao;
+import com.uas.platform.b2c.trade.order.model.Order;
+import com.uas.platform.b2c.trade.order.model.OrderDetail;
+import com.uas.platform.b2c.trade.order.service.OrderService;
+import com.uas.platform.core.model.Status;
+import com.uas.platform.core.model.Type;
+import com.uas.platform.core.persistence.criteria.LogicalExpression;
+import com.uas.platform.core.persistence.criteria.PredicateUtils;
+import com.uas.platform.core.persistence.criteria.SimpleExpression;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.util.CollectionUtils;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Created by wangyc on 2017/10/31.
+ *
+ * @version 2017/10/31 15:44 wangyc
+ */
+public class B2cOrderServiceImpl implements B2cOrderService {
+
+    @Autowired
+    private OrderDao orderDao;
+
+    @Autowired
+    private GoodsHistoryDao goodsHistoryDao;
+
+    @Autowired
+    private ProductDao productDao;
+
+    @Autowired
+    SysConf sysConf;
+
+    @Autowired
+    private OrderService orderService;
+
+    @Autowired
+    private BankTransferService bankTransferService;
+
+    @Autowired
+    private BankInfoService bankInfoService;
+
+    @Override
+    public List<B2cOrder> getAllOrder() {
+        // 要获取的采购的状态
+        SimpleExpression status1 = PredicateUtils.eq("status", Status.TOBEPAID.value(), true);
+        SimpleExpression status2 = PredicateUtils.eq("status", Status.UNAVAILABLE_NOPAID.value(), true);
+        SimpleExpression status3 = PredicateUtils.eq("status", Status.INBOUND.value(), true);
+        SimpleExpression status4 = PredicateUtils.eq("status", Status.UNAVAILABLE_PERSONAL.value(), true);
+        SimpleExpression[] expressions = new SimpleExpression[] { status1, status2, status3, status4};
+        LogicalExpression purLogical = PredicateUtils.or(expressions);
+
+        // 采购单待上传的状态
+        SimpleExpression sendStatus = PredicateUtils.eq("sendstatus", Status.NOT_UPLOAD.value(), true);
+        // uu
+        Long enuu = SystemSession.getUser().getEnterprise().getUu();
+        SimpleExpression buyerenuu = PredicateUtils.eq("buyerenuu", enuu, true);
+        LogicalExpression statusUUAS = PredicateUtils.and(new SimpleExpression[] { sendStatus, buyerenuu});
+        final LogicalExpression allCondition = PredicateUtils.and(new LogicalExpression[] { purLogical, statusUUAS });
+
+        List<Order> orders = orderDao.findAll(new Specification<Order>() {
+            @Override
+            public Predicate toPredicate(Root<Order> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                query.where(allCondition.toPredicate(root, query, cb));
+                return null;
+            }
+        });
+
+        List<B2cOrder> b2cOrders = new ArrayList<B2cOrder>();
+        for (Order order : orders) {
+            boolean productExists = true;
+            Set<B2cOrderDetail> b2cOrderDetails = new HashSet<B2cOrderDetail>();
+            for (OrderDetail orderDetail : order.getOrderDetails()) {// 获取明细中购买型号所对应的erp对应企业中的物料编号
+                GoodsHistory goodsHistory = goodsHistoryDao.findNewByBatchCode(orderDetail.getBatchCode());
+                if (goodsHistory != null) {
+                    List<Product> products = productDao.findByEnUUAndCmpUuId(enuu, goodsHistory.getUuid());
+                    if (!CollectionUtils.isEmpty(products)) {
+                        B2cOrderDetail b2cOrderDetail = ModelConverter.convertUas(orderDetail);
+                        b2cOrderDetail.setProductCode(products.get(0).getProdNum());// 添加erp物料编号
+                        b2cOrderDetails.add(b2cOrderDetail);
+                    } else {
+                        productExists = false;
+                    }
+                }
+            }
+            if (productExists) {
+                B2cOrder b2cOrder = ModelConverter.convert(order);
+                b2cOrder.setOrderDetails(b2cOrderDetails);
+                b2cOrders.add(b2cOrder);
+            }
+        }
+        return b2cOrders;
+    }
+
+    @Override
+    public boolean backOrder(long[] orderids) {
+        List<Order> orders = new ArrayList<Order>();
+        for (long orderid : orderids) {
+            Order order = orderDao.findOne(orderid);
+            if (order != null) {
+                order.setSendstatus(Status.DOWNLOADED.value());
+                orders.add(order);
+            }
+        }
+        orderDao.save(orders);
+        return true;
+    }
+
+    @Override
+    public void ensuryPay(Payment payment) {
+        BankTransfer bankTransfer = ModelConverter.convert(payment);
+        List<BankInfo> mallBankInfos = bankInfoService.getEnterpriseBankInfoContainsStatus(Type.MALL.value(), Status.ALLOW.value(), sysConf.getEnUU());
+        if (!CollectionUtils.isEmpty(mallBankInfos)) {
+            bankTransfer.setJsonReceive(FastjsonUtils.toJson(mallBankInfos.get(0)));
+        }
+
+        bankTransferService.save(bankTransfer, payment.getOrderid());
+    }
+
+    @Override
+    public B2cOrder ensury(String orderid) {
+        Order order = orderDao.findByOrderid(orderid);
+        if (order != null) {
+            orderService.ensureOrderAccept(order.getId().toString());
+        }
+        return null;
+    }
+}

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

@@ -1,11 +1,21 @@
 package com.uas.platform.b2c.external.erp.order.service.impl;
 
 import com.uas.api.b2c_erp.seller.model.Order;
+import com.uas.api.b2c_erp.seller.model.OrderDetail;
 import com.uas.api.b2c_erp.seller.service.OrderService;
 import com.uas.api.exception.B2CException;
+import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
+import com.uas.platform.b2c.common.account.dao.UserBaseInfoDao;
+import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.account.model.UserBaseInfo;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.support.log.ErpB2cBufferedLogger;
 import com.uas.platform.b2c.external.erp.order.util.ModelConverter;
+import com.uas.platform.b2c.prod.commodity.dao.GoodsHistoryDao;
+import com.uas.platform.b2c.prod.commodity.dao.ProductDao;
+import com.uas.platform.b2c.prod.commodity.model.GoodsHistory;
+import com.uas.platform.b2c.prod.commodity.model.Product;
+import com.uas.platform.b2c.trade.order.dao.OrderDao;
 import com.uas.platform.b2c.trade.order.dao.PurchaseDao;
 import com.uas.platform.b2c.trade.order.model.Purchase;
 import com.uas.platform.b2c.trade.order.service.PurchaseService;
@@ -17,6 +27,7 @@ import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.persistence.criteria.SimpleExpression;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.jpa.domain.Specification;
+import org.springframework.util.CollectionUtils;
 
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
@@ -32,7 +43,22 @@ public class OrderServiceImpl implements OrderService {
 	
 	@Autowired
 	private PurchaseService purchaseService;
-	
+
+	@Autowired
+	private GoodsHistoryDao goodsHistoryDao;
+
+	@Autowired
+	private ProductDao productDao;
+
+	@Autowired
+	private OrderDao orderDao;
+
+	@Autowired
+	private UserBaseInfoDao userBaseInfoDao;
+
+	@Autowired
+	private EnterpriseDao enterpriseDao;
+
 	private static final ErpB2cBufferedLogger logger = BufferedLoggerManager.getLogger(ErpB2cBufferedLogger.class);
 
 	@Override
@@ -46,9 +72,12 @@ public class OrderServiceImpl implements OrderService {
 	@Override
 	public List<Order> findAllUnReceived() {
 		// 要获取的采购的状态
-		SimpleExpression status1 = PredicateUtils.eq("status", Status.TOBECONFIRMED.value(), true);
+		SimpleExpression status1 = PredicateUtils.eq("status", Status.PAID.value(), true);
 		SimpleExpression status2 = PredicateUtils.eq("status", Status.CONFIRMED.value(), true);
-		SimpleExpression[] expressions = new SimpleExpression[] { status1, status2 };
+		SimpleExpression status3 = PredicateUtils.eq("status", Status.TOBECONFIRMED.value(), true);
+		SimpleExpression status4 = PredicateUtils.eq("status", Status.UNAVAILABLE_NOPAID.value(), true);
+		SimpleExpression status5 = PredicateUtils.eq("status", Status.UNAVAILABLE_PERSONAL.value(), true);
+		SimpleExpression[] expressions = new SimpleExpression[] { status1, status2, status3, status4, status5};
 		LogicalExpression purLogical = PredicateUtils.or(expressions);
 
 		// 采购单待上传的状态
@@ -56,10 +85,8 @@ public class OrderServiceImpl implements OrderService {
 		// uu
 		SimpleExpression sellerUU = PredicateUtils.eq("sellerenuu", SystemSession.getUser().getEnterprise().getUu(),
 				true);
-		SimpleExpression uasPurcid = PredicateUtils.isNotNull("uasPurcid");
 
-		LogicalExpression statusUUAS = PredicateUtils.and(new SimpleExpression[] { sendStatus, sellerUU, uasPurcid});
-		System.out.println(SystemSession.getUser().getEnterprise().getEnName() + SystemSession.getUser().getEnterprise().getUu());
+		LogicalExpression statusUUAS = PredicateUtils.and(new SimpleExpression[] { sendStatus, sellerUU});
 		final LogicalExpression allCondition = PredicateUtils.and(new LogicalExpression[] { purLogical, statusUUAS });
 
 		List<Purchase> purcs = purchaseDao.findAll(new Specification<Purchase>() {
@@ -71,8 +98,31 @@ public class OrderServiceImpl implements OrderService {
 		});
 		List<Order> orders = new ArrayList<Order>();
 		for (Purchase purchase : purcs) {
+			boolean codeExists = false;
 			Order order = ModelConverter.getOrder(purchase);
-			orders.add(order);
+			UserBaseInfo buyer = userBaseInfoDao.findUserByUserUU(purchase.getBuyeruu());
+			if (buyer != null) {// 设置买方用户信息
+				order.setBuyer(com.uas.platform.b2c.external.erp.common.util.ModelConverter.convert(buyer));
+			}
+
+			Enterprise enterprise = enterpriseDao.findByUu(purchase.getBuyerenuu());
+			if (enterprise != null) {// 设置买方企业信息
+				order.setBuyerEn(com.uas.platform.b2c.external.erp.common.util.ModelConverter.convert(enterprise));
+			}
+
+			for (OrderDetail orderDetail : order.getDetails()) {
+				List<GoodsHistory> goodsHistorys = goodsHistoryDao.findByBatchCode(orderDetail.getBatchCode());// 获取上架历史信息
+				if (!CollectionUtils.isEmpty(goodsHistorys)) {
+					orderDetail.setPublisheruu(goodsHistorys.get(0).getPublisherUU());// 添加发布人uu
+					List<Product> products = productDao.findByEnUUAndCmpUuId(SystemSession.getUser().getEnterprise().getUu(), goodsHistorys.get(0).getUuid());//获取物料信息
+					if (!CollectionUtils.isEmpty(products)) {
+						orderDetail.setCode(products.get(0).getProdNum());// 设置物料编号,有物料编号才回传到ERP
+						codeExists = true;
+					}
+				}
+			}
+			if (codeExists)
+				orders.add(order);
 		}
 		return orders;
 	}
@@ -80,11 +130,11 @@ public class OrderServiceImpl implements OrderService {
 	@Override
 	public void agree(long orderId) {
 		// TODO Auto-generated method stub
-		System.out.println("hi, i received " + orderId);
-		Purchase purchase = purchaseDao.findOne(orderId);
-		Long userUU = SystemSession.getUser().getUserUU();
-		logger.log("UAS接口", "采购单接收动作 id=" + orderId);
-		purchaseService.purToBeShiped(orderId);
+//		System.out.println("hi, i received " + orderId);
+//		Purchase purchase = purchaseDao.findOne(orderId);
+//		Long userUU = SystemSession.getUser().getUserUU();
+//		logger.log("UAS接口", "采购单接收动作 id=" + orderId);
+//		purchaseService.purToBeShiped(orderId);
 //		if (purchase == null) {
 //			throw new B2CException("没有传入有效的订单信息");
 //		}
@@ -114,12 +164,22 @@ public class OrderServiceImpl implements OrderService {
 		logger.log("UAS接口", "采购单拒收成功 id=" + orderId);
 	}
 
+	@Override
+	public Long findAdminuu() {
+		return SystemSession.getUser().getEnterprise().getEnAdminuu();
+	}
+
 	@Override
 	public boolean backOrder(long[] orderids) {
 		for (long orderid : orderids) {
 			Purchase purchase = purchaseDao.findOne(orderid);
+//			if (Status.CONFIRMED.value() == purchase.getStatus()) {// 将确认收款的订单生成出货单
+//				purchaseService.purToBeShiped(orderid);
+//			}
+
 			purchase.setSendstatus(Status.DOWNLOADED.value());
 			purchaseDao.save(purchase);
+
 		}
 		return true;
 	}

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

@@ -1,10 +1,14 @@
 package com.uas.platform.b2c.external.erp.order.util;
 
+import com.uas.api.b2c_erp.buyer.model.B2cOrder;
+import com.uas.api.b2c_erp.buyer.model.B2cOrderDetail;
+import com.uas.api.b2c_erp.buyer.model.Payment;
 import com.uas.api.b2c_erp.operation.model.OperationInfoUas;
 import com.uas.api.b2c_erp.seller.model.Order;
 import com.uas.api.b2c_erp.seller.model.OrderDetail;
 import com.uas.api.domain.IPage;
 import com.uas.platform.b2c.external.erp.product.model.OperationInfo;
+import com.uas.platform.b2c.fa.payment.model.BankTransfer;
 import com.uas.platform.b2c.trade.order.model.Purchase;
 import com.uas.platform.b2c.trade.order.model.PurchaseDetail;
 import org.springframework.data.domain.Page;
@@ -28,13 +32,15 @@ public class ModelConverter {
     public static Order getOrder(Purchase purchase) {
 		Order order = new Order();
 		order.setCreateTime(purchase.getCreatetime());
-		order.setOrderid(purchase.getPurchaseid());
+		order.setOrderid(purchase.getOrderid());
 		order.setId(purchase.getId());
 		order.setShipAddress(purchase.getJsonAddress());
 		order.setTotal(purchase.getEnsurePrice());
 		order.setStatus(purchase.getStatus());
 		order.setTaxes(purchase.getTaxes());
 		order.setCurrency(purchase.getCurrency());
+		order.setSendType(purchase.getSendType());
+		order.setFare(purchase.getFare());
 		Set<PurchaseDetail> details = purchase.getPurchaseDetails();
 		if (!CollectionUtils.isEmpty(details)) {
 			List<OrderDetail> orderDetails = new ArrayList<OrderDetail>();
@@ -104,4 +110,67 @@ public class ModelConverter {
 		operationInfoUas.setUuid(operationInfo.getUuid());
 		return operationInfoUas;
 	}
+
+	/**
+	 * 商城订单明细转为ERP采购单明细
+	 * @param orderDetail
+	 * @return
+	 */
+	public static B2cOrderDetail convertUas(com.uas.platform.b2c.trade.order.model.OrderDetail orderDetail) {
+		B2cOrderDetail b2cOrderDetail = new B2cOrderDetail();
+		b2cOrderDetail.setPrice(orderDetail.getPrice());
+		b2cOrderDetail.setBatchCode(orderDetail.getBatchCode());
+		b2cOrderDetail.setCmpCode(orderDetail.getCmpCode());
+		b2cOrderDetail.setDetailid(orderDetail.getDetailid());
+		b2cOrderDetail.setDetno(orderDetail.getDetno());
+		b2cOrderDetail.setImg(orderDetail.getImg());
+		b2cOrderDetail.setNumber(orderDetail.getNumber());
+		b2cOrderDetail.setTax(orderDetail.getTax());
+		b2cOrderDetail.setTaxes(orderDetail.getTaxes());
+		b2cOrderDetail.setUnitprice(orderDetail.getTaxUnitprice());
+		b2cOrderDetail.setUuid(orderDetail.getUuid());
+
+		return b2cOrderDetail;
+	}
+
+	/**
+	 * 商城订单转为erp采购单
+	 * @param order
+	 * @return
+	 */
+	public static B2cOrder convert(com.uas.platform.b2c.trade.order.model.Order order) {
+		B2cOrder b2cOrder = new B2cOrder();
+		b2cOrder.setId(order.getId());
+		b2cOrder.setCurrency(order.getCurrency());
+		b2cOrder.setTaxes(order.getTaxes());
+		b2cOrder.setBuyerenuu(order.getBuyerenuu());
+		b2cOrder.setBuyeruu(order.getBuyeruu());
+		b2cOrder.setCreattime(order.getCreattime());
+		b2cOrder.setDeliverytype(order.getDeliverytype());
+		b2cOrder.setJsonAddress(order.getJsonAddress());
+		b2cOrder.setLgtId(order.getLgtId());
+		b2cOrder.setOrderid(order.getOrderid());
+		b2cOrder.setPaytype(order.getPaytype());
+		b2cOrder.setPrice(order.getEnsurePrice());
+		b2cOrder.setFare(order.getFare());
+		b2cOrder.setQty(order.getQty());
+		b2cOrder.setSellerenuu(order.getSellerenuu());
+		b2cOrder.setStatus(order.getStatus());
+
+		return b2cOrder;
+	}
+
+	/**
+	 * 将ERP付款信息转换为商城付款信息
+	 * @param payment
+	 * @return
+	 */
+	public static BankTransfer convert(Payment payment) {
+		BankTransfer bankTransfer = new BankTransfer();
+		bankTransfer.setJsonPament(payment.getJsonPament());
+		bankTransfer.setTotal(payment.getTotal());
+		bankTransfer.setTranferCreateTime(payment.getTransferTime());
+		bankTransfer.setImgUrl(payment.getImgUrl());
+		return bankTransfer;
+	}
 }

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

@@ -0,0 +1,111 @@
+package com.uas.platform.b2c.external.erp.prod.service.impl;
+
+import com.uas.api.b2c_erp.seller.model.Prod;
+import com.uas.api.b2c_erp.seller.service.ProdService;
+import com.uas.platform.b2c.core.constant.Status;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.core.support.log.ErpB2cBufferedLogger;
+import com.uas.platform.b2c.external.erp.product.util.ModelConverter;
+import com.uas.platform.b2c.prod.commodity.dao.ProductDao;
+import com.uas.platform.b2c.prod.commodity.model.Product;
+import com.uas.platform.b2c.prod.commodity.service.ProductService;
+import com.uas.platform.b2c.prod.store.dao.StoreInDao;
+import com.uas.platform.b2c.prod.store.model.StoreIn;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by wangyc on 2017/10/26.
+ *
+ * @version 2017/10/26 11:34 wangyc
+ */
+public class ProdServiceImpl implements ProdService {
+
+    @Autowired
+    private ProductDao productDao;
+
+    @Autowired
+    private ProductService productService;
+
+    @Autowired
+    private StoreInDao storeInDao;
+
+    private static final ErpB2cBufferedLogger logger = BufferedLoggerManager.getLogger(ErpB2cBufferedLogger.class);
+
+    // TODO
+    private final Logger loggerOut = Logger.getLogger(getClass());
+
+    @Override
+    public String uploadProducts(List<Prod> prods) {
+        List<Product> products = new ArrayList<Product>();
+        Long enuu = SystemSession.getUser().getEnterprise().getUu();
+        for (Prod prod : prods) {
+            List<Product> productExists = productDao.getProductByEnUUAndProdNum(enuu, prod.getPr_code());
+            Product product = ModelConverter.convert(prod);
+            if (!CollectionUtils.isEmpty(productExists)) {
+                product.setId(productExists.get(0).getId());
+                product.setCmpUuId(null);// 将已存在的变更过物料uuid置为null,以便后续进行重新匹配
+            }
+            products.add(product);
+        }
+        productDao.save(products);// 保存上传的物料
+
+        logger.log("物料资料", "上传物料资料,数量:" + prods.size());
+        loggerOut.info("--------------" + SystemSession.getUser().getEnterprise().getEnName() + " 上传物料资料,数量:" + prods.size() + "---------------");
+        return "success";
+    }
+
+    @Override
+    public void callMatch() {
+        loggerOut.info("开始匹配");
+        Date start = new Date();
+        productService.matchAll();// 匹配上传的物料
+        Date end = new Date();
+        loggerOut.info("匹配完成, 历时" + (start.getTime() - end.getTime())/1000 + "秒");
+    }
+
+    @Override
+    public List<Prod> downloadProducts() {
+        List<Prod> prods = new ArrayList<Prod>();
+        List<Product> products = productDao.findBySourceAppAndB2cDownStatusAndEnUUAndCmpUuIdIsNotNull("ERP", Status.NOT_UPLOAD.value(), SystemSession.getUser().getEnterprise().getUu());
+        if (!CollectionUtils.isEmpty(products)) {
+            for (Product product : products) {
+                Prod prod = new Prod();
+                prod.setPr_uuid(product.getCmpUuId());
+                prod.setPr_id(product.getSourceId());
+                prods.add(prod);
+            }
+        }
+        logger.log("物料资料", "ERP下载更新物料资料,企业:" + SystemSession.getUser().getEnterprise().getEnName());
+        return prods;
+    }
+
+    @Override
+    public void refreshDownloadstatus(List<String> codes){
+        List<Product> products = new ArrayList<Product>();
+        Long enuu = SystemSession.getUser().getEnterprise().getUu();
+        for (String code : codes) {
+            Product product = productDao.getProductByEnUUAndProdNum(enuu, code).get(0);
+            product.setB2cDownStatus(Status.DOWNLOADED.value());
+            products.add(product);
+        }
+        logger.log("物料资料", "ERP回调修改物料资料下载状态,企业:" + SystemSession.getUser().getEnterprise().getEnName());
+        productDao.save(products);
+    }
+
+    @Override
+    public String returnStoreUrl() {
+        String url = "";
+        List<StoreIn> storeIn = storeInDao.findByEnUU(SystemSession.getUser().getEnterprise().getUu());
+        if (!CollectionUtils.isEmpty(storeIn)) {
+            return url = "/store/" + storeIn.get(0).getUuid();
+        }
+        return url;
+    }
+}

+ 2 - 1
src/main/java/com/uas/platform/b2c/external/erp/product/service/impl/OperationInfoServiceImpl.java

@@ -36,7 +36,8 @@ public class OperationInfoServiceImpl implements OperationInfoService {
     @Autowired
     private CreateNumberService createNumberService;
 
-    public static SysConf sysConf = new SysConf();
+    @Autowired
+    private SysConf sysConf;
 
     @Autowired
     private UserBaseInfoDao userBaseInfoDao;

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

@@ -3,8 +3,13 @@ package com.uas.platform.b2c.external.erp.product.util;
 import com.uas.api.b2c_erp.baisc.model.*;
 import com.uas.api.b2c_erp.operation.model.OperationInfoUas;
 import com.uas.api.b2c_erp.seller.model.GoodsSimpleUas;
+import com.uas.api.b2c_erp.seller.model.Prod;
 import com.uas.api.domain.IPage;
+import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.core.constant.Status;
+import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.external.erp.product.model.OperationInfo;
+import com.uas.platform.b2c.prod.commodity.model.Product;
 import com.uas.platform.b2c.prod.product.brand.modal.Brand;
 import com.uas.platform.b2c.prod.product.brand.modal.BrandInfo;
 import com.uas.platform.b2c.prod.product.brand.modal.BrandSubmit;
@@ -16,13 +21,11 @@ import com.uas.platform.b2c.prod.product.kind.model.*;
 import com.uas.platform.b2c.prod.product.property.model.Property;
 import com.uas.platform.b2c.prod.product.property.model.PropertyValue;
 import com.uas.platform.b2c.prod.product.property.model.PropertyValueSubmit;
+import com.uas.platform.core.model.Constant;
 import org.springframework.data.domain.Page;
 import org.springframework.util.CollectionUtils;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 /**
  * erp<==>商城对象转换类
@@ -499,4 +502,38 @@ public class ModelConverter {
 		operationInfoUas.setUuid(operationInfo.getUuid());
 		return operationInfoUas;
 	}
+
+	/**
+	 * 转为平台的产品
+	 *
+	 * @return
+	 */
+	public static Product convert(Prod prod) {
+		Product product = new Product();
+		product.setProdNum(prod.getPr_code());
+		product.setEnUU(SystemSession.getUser().getEnterprise().getUu());
+		product.setUserUU(SystemSession.getUser().getUserUU());
+		product.setProdName(prod.getPr_detail());
+		product.setSpec(prod.getPr_spec());
+		product.setUnit(prod.getPr_unit());
+		product.setSourceId(prod.getPr_id());
+		product.setBrand(prod.getPr_brand());
+		if (prod.getPr_orispeccode() != null) {
+			product.setCmpCode(prod.getPr_orispeccode());
+		} else {
+			product.setCmpCode(prod.getPr_spec());
+		}
+		int i = Constant.NO;
+		product.setStandard(i);// 默认设置为非标准,到平台做匹配更新
+		Enterprise enter = SystemSession.getUser().getEnterprise();
+		// erp上传的数据默认赋值给标准信息
+		product.setPbrand(product.getBrand());
+		product.setPcmpcode(product.getCmpCode());
+		product.setB2cEnabled((product.getBrand() == null) || (product.getCmpCode() == null) ? 0 : 1);
+		product.setKind(product.getProdName());
+		product.setSourceApp("ERP");
+		product.setErpDate(new Date());
+		product.setB2cDownStatus(Status.NOT_UPLOAD.value());
+		return product;
+	}
 }

+ 18 - 20
src/main/java/com/uas/platform/b2c/fa/payment/controller/BankInfoController.java

@@ -53,9 +53,9 @@ public class BankInfoController {
 	 */
 	@RequestMapping(value="/buy/personal", method=RequestMethod.GET, params = "type=buyer")
 	@ApiOperation(value = "获取买家个人银行账户", httpMethod = "GET")
-	public List<BankInfo> getPersonalBank() {
+	public Page<BankInfo> getPersonalBank(PageParams params) {
 		logger.log("银行账户信息", "获取个人银行账户信息");
-		return bankInfoService.getPersonBankInfo(Type.BUYER.value());
+		return bankInfoService.getPersonBankInfo(params, Type.BUYER.value());
 	}
 
 	/**
@@ -86,6 +86,7 @@ public class BankInfoController {
 	}
 
 	/**
+	 * 分页获取卖家账户信息,已修改
 	 * 获取供应商审核通过的信息
 	 * 2016年3月15日 下午5:16:00
 	 *
@@ -122,9 +123,9 @@ public class BankInfoController {
 	 */
 	@RequestMapping(value="/sale/enterprise", method=RequestMethod.GET, params = "type=sup")
 	@ApiOperation(value = "获取供应商账户信息", httpMethod = "GET")
-	public List<BankInfo> getSaleBankInfo() {
+	public Page<BankInfo> getSaleBankInfo(PageParams params) {
 		logger.log("银行账户信息", "获取供应商银行账户信息");
-		return bankInfoService.getEnterpriseBankInfo(Type.SUP.value());
+		return bankInfoService.getSupBankInfo(params, Type.SUP.value());
 	}
 
 	/**
@@ -138,21 +139,7 @@ public class BankInfoController {
 	@ApiOperation(value = "保存新增个人银行账户", httpMethod = "POST")
 	public BankInfo savePersonalBank(@ApiParam(required = true, value = "保存的银行账户信息") @RequestBody BankInfo bankInfo) {
 		logger.log("银行账户信息", "保存个人银行账户信息" + bankInfo.getBankname() + "-" + bankInfo.getNumber() + "-" + bankInfo.getAccountname());
-		return bankInfoService.save(bankInfo, true, Type.BUYER.value());
-	}
-
-	/**
-	 * @author yujia  保存新增买家企业银行账户
-	 *
-	 * @param bankInfo 银行信息
-	 * @return BankInfo
-	 */
-	@RequestMapping(value="/save/enterprise", method=RequestMethod.POST, params = "type=buyer")
-	@ResponseBody
-	@ApiOperation(value = "保存新增买家企业银行账户", httpMethod = "POST")
-	public BankInfo saveEnterpriseBank(@ApiParam(required = true, value = "保存的银行账户信息") @RequestBody BankInfo bankInfo) {
-		logger.log("银行账户信息", "保存企业银行账户信息" + bankInfo.getBankname() + "-" + bankInfo.getNumber() + "-" + bankInfo.getAccountname() +"操作人"+ SystemSession.getUser().getUserUU());
-		return bankInfoService.save(bankInfo, false, Type.BUYER.value());
+		return bankInfoService.save(bankInfo, Type.BUYER.value());
 	}
 
 	/**
@@ -168,7 +155,7 @@ public class BankInfoController {
 	public BankInfo saveSupEnterpriseBank(@ApiParam(required = true, value = "银行账户json字符串") String bankInfo, @ApiParam(required = true, value = "上传附件") FileUpload uploadItem) {
 		logger.log("银行账户信息", "保存卖家企业银行账户信息 " + bankInfo);
 		BankInfo bank = FastjsonUtils.fromJson(bankInfo, BankInfo.class);
-		return bankInfoService.save(bank, false, Type.SUP.value(), uploadItem);
+		return bankInfoService.save(bank, Type.SUP.value(), uploadItem);
 	}
 
 	/**
@@ -301,4 +288,15 @@ public class BankInfoController {
 		logger.log("银行账户信息", "审核银行账户为id:" + id  + "通过");
 		return resultMap;
 	}
+
+	/**
+	 * 根据银行账号返回账户数
+	 * @param number 银行账号
+	 * @param type   类型,卖家、买家、平台
+	 * @return
+	 */
+	@RequestMapping(value = "/number/count", method = RequestMethod.GET)
+	public ResultMap getCountByNumber(Integer type, String number){
+		return bankInfoService.getCountByNumber(type, number);
+	}
 }

+ 46 - 2
src/main/java/com/uas/platform/b2c/fa/payment/controller/BankTransferController.java

@@ -2,11 +2,13 @@ package com.uas.platform.b2c.fa.payment.controller;
 
 
 import com.uas.platform.b2c.core.config.SysConf;
+import com.uas.platform.b2c.core.support.view.JxlsExcelView;
 import com.uas.platform.b2c.fa.payment.model.BankInfo;
 import com.uas.platform.b2c.fa.payment.model.BankTransfer;
 import com.uas.platform.b2c.fa.payment.service.BankTransferService;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
+import com.uas.platform.b2c.trade.order.model.OrderSimpleInfo;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.PageInfo;
@@ -18,6 +20,14 @@ import com.wordnik.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * The type Bank transfer controller.
@@ -231,7 +241,41 @@ public class BankTransferController {
 	 */
 	@RequestMapping(value = "/vendor/bankTransfer/page", method = RequestMethod.GET, params = "type=sup")
 	@ApiOperation(value = "获取供应商的的收款转账单", httpMethod = "GET")
-	public ResultMap getVendorBankTransferByMall(@ApiParam(required = true, value = "分页参数") PageParams params) {
-		return bankTransferService.getVendorBankTransferByMall(params, Type.SUP.value());
+	public ResultMap getVendorBankTransferByMall(@ApiParam(required = true, value = "分页参数") PageParams params,
+												String keyword, Long fromDate, Long toDate) {
+		return bankTransferService.getVendorBankTransferByMall(params, Type.SUP.value(), keyword, fromDate, toDate);
+	}
+
+	/**
+	 * 导出收款记录到excel表中
+	 * @param isAjax
+	 * @param request
+	 * @param keyword
+	 * @param fromDate
+	 * @param toDate
+	 * @return
+	 */
+	@RequestMapping(value = "/export/bankTransfer", method = RequestMethod.POST)
+	public ModelAndView exportPayRecordToExcel(@RequestParam(required = false, value = "isAjax", defaultValue = "false")Boolean isAjax, HttpServletRequest request,
+											   String keyword, Long fromDate, Long toDate){
+		HttpSession session = request.getSession();
+		ModelAndView modelAndView = new ModelAndView();
+		Object loading = session.getAttribute("loading");
+		if(isAjax) {
+			MappingJackson2JsonView view = new MappingJackson2JsonView();
+			Map<String, Boolean> attributes = new HashMap<>();
+			Boolean isLoading= loading == Boolean.TRUE;
+			attributes.put("loading", isLoading);
+			view.setAttributesMap(attributes);
+			modelAndView.setView(view);
+			return modelAndView;
+		}
+		session.setAttribute("loading", true);
+		List<BankTransfer> data = bankTransferService.getExportData(Type.SUP.value(), keyword, fromDate, toDate);
+		modelAndView.addObject("data", data);
+		modelAndView.addObject("operator", "+");
+		modelAndView.setView(new JxlsExcelView("classpath:jxls-tpl/trade/bankTransfer", "优软商城-卖家交易记录"));
+		session.setAttribute("loading", false);
+		return modelAndView;
 	}
 }

+ 75 - 41
src/main/java/com/uas/platform/b2c/fa/payment/dao/BankInfoDao.java

@@ -19,101 +19,135 @@ import java.util.List;
 public interface BankInfoDao extends CrudRepository<BankInfo, Long>, JpaSpecificationExecutor<BankInfo>, GenericRepository<BankInfo, Long> {
 
 	/**
-	 * 根据企业enuu类型,状态和操作人类型获取所有银行账户信息
+	 * 返回卖家账户信息列表 --除被删除的状态
 	 *
 	 * @param enuu 企业enuu
-	 * @param type 账户类型
 	 * @param status 状态
 	 * @param opraterUserType 操作人类型
 	 * @return
 	 */
-	@Query(value = "select b from BankInfo b where b.enuu =:enuu and b.type =:type and b.status =:status and b.opraterUserType=:opraterUserType order by num")
-	List<BankInfo> findByEnuuAndTypeAndStatusAndOpraterUserTypeOrderByNumAsc(@Param("enuu") Long enuu, @Param("type") Short type, @Param("status") Integer status, @Param("opraterUserType") Integer opraterUserType);
+	@Query(value = "select b from BankInfo b where b.enuu =:enuu and b.opraterUserType=:opraterUserType and b.status in :status order by num")
+	List<BankInfo> findSupBankList(@Param("enuu") Long enuu, @Param("opraterUserType") Integer opraterUserType, @Param("status") List<Integer> status);
+
+	/**
+	 * 返回账户信息,兼容type版本
+	 * @param enuu
+	 * @param status
+	 * @param opraterUserType
+	 * @return
+	 */
+	List<BankInfo> findByEnuuAndStatusAndOpraterUserTypeOrderByNumAsc(Long enuu, Integer status, Integer opraterUserType);
 
 	/**
 	 * 根据下面参数获取企业账户信息
 	 * @param enuu 企业的enuu
-	 * @param type 企业的类型
 	 * @param opraterUserType 所属类型 买家 卖家,平台
 	 * @return list
 	 */
-	@Query(value = "select b from BankInfo b where b.enuu =:enuu and b.type =:type and b.opraterUserType=:opraterUserType order by num")
-	List<BankInfo> findByEnuuAndTypeAndOpraterUserTypeOrderByNumAsc(@Param("enuu") Long enuu, @Param("type") Short type, @Param("opraterUserType") Integer opraterUserType);
+	@Query(value = "select b from BankInfo b where b.enuu =:enuu and b.opraterUserType=:opraterUserType order by num")
+	List<BankInfo> findByEnuuAndOpraterUserTypeOrderByNumAsc(@Param("enuu") Long enuu, @Param("opraterUserType") Integer opraterUserType);
 
 	/**
 	 * 根据下面参数获取企业账户信息
 	 *
 	 * @param useruu 个人uu
 	 * @param enuu 企业enuu
-	 * @param type 账户类型
 	 * @param opraterUserType 操作人的类型
-	 * @param Status 状态
+	 * @param status 状态
 	 * @return list
 	 */
-	List<BankInfo> findByUseruuAndEnuuAndTypeAndOpraterUserTypeAndStatusOrderByNumAsc(Long useruu, Long enuu, Short type, Integer opraterUserType, Integer Status);
+	List<BankInfo> findByUseruuAndEnuuAndOpraterUserTypeAndStatusOrderByNumAsc(Long useruu, Long enuu, Integer opraterUserType, Integer status);
 
 	/**
-	 * 根据下面参数获取企业账户信息
+	 * 返回买家账户信息列表  --无enuu
 	 *
-	 * @param useruu 个人uu
-	 * @param dissociative 是否个人用户
- 	 * @param type 账户类型
-	 * @param opraterUserType 操作人的类型
-	 * @param Status 状态
-	 * @return list
+	 * @param useruu
+	 * @param dissociative
+	 * @param operateUserType
+	 * @param status
+	 * @return
 	 */
-//	@Query("select b from BankInfo b  where b.useruu=:useruu and b.dissociative=:dissociative and b.type=:type and b.opraterUserType=:opraterUserType and b.status=:status")
-	List<BankInfo> findByUseruuAndDissociativeAndTypeAndOpraterUserTypeAndStatusOrderByNumAsc(Long useruu, Integer dissociative, Short type, Integer opraterUserType, Integer Status);
+	List<BankInfo> findByUseruuAndDissociativeAndOpraterUserTypeAndStatusOrderByNumAsc(Long useruu, Integer dissociative, Integer operateUserType, Integer status);
 
 	/**
-	 * 获取当前的个人账户数
+	 * 获取买家账户数 --有enuu
 	 *
 	 * @param useruu 个人uu
 	 * @param enuu 企业enuu
-	 * @param type 账户类型
 	 * @param operateUserType 操作人的类型
 	 * @param status 状态
 	 * @return int 返回总数
 	 */
-	@Query("select count(b) from BankInfo b where b.useruu=:useruu and b.enuu =:enuu and b.type =:type and b.opraterUserType=:operateUserType and b.status =:status")
-	int getKindCountByUseruuAndStatus(@Param("useruu") Long useruu, @Param("enuu") Long enuu, @Param("type") short type, @Param("operateUserType") Integer operateUserType, @Param("status") Integer status);
+	@Query("select count(b) from BankInfo b where b.useruu=:useruu and b.enuu =:enuu and b.opraterUserType=:operateUserType and b.status =:status")
+	int getCountByUseruuAndStatus(@Param("useruu") Long useruu, @Param("enuu") Long enuu, @Param("operateUserType") Integer operateUserType, @Param("status") Integer status);
 
 	/**
-	 * 获取当前的个人账户数enuu为空
+	 * 获取买家账户数 --无enuu
 	 *
 	 * @param useruu 个人uu
 	 * @param dissociative 个人用户
- 	 * @param type 账户类型
 	 * @param operateUserType 操作人类型
 	 * @param status 状态
 	 * @return int 返回总数
 	 */
-	@Query("select count(b) from BankInfo b where b.useruu=:useruu and b.dissociative=:dissociative and b.type =:type and b.opraterUserType=:operateUserType and b.status =:status")
-	int getKindCountByUseruuAndStatusAndDissociative(@Param("useruu") Long useruu, @Param("dissociative") Integer dissociative, @Param("type") short type, @Param("operateUserType") Integer operateUserType, @Param("status") Integer status);
+	@Query("select count(b) from BankInfo b where b.useruu=:useruu and b.dissociative=:dissociative and b.opraterUserType=:operateUserType and b.status =:status")
+	int getCountByUseruuAndStatusAndDissociative(@Param("useruu") Long useruu, @Param("dissociative") Integer dissociative, @Param("operateUserType") Integer operateUserType, @Param("status") Integer status);
 
 	/**
-	 * 获取当前的企业账户数
+	 * 获取卖家的企业账户数
 	 *
 	 * @param enuu 企业enuu
-	 * @param type 账户类型
 	 * @param operateUserType 操作人的类型
-	 * @param status 状态
 	 * @return
 	 */
-	@Query("select count(b) from BankInfo b where b.enuu=:enuu and b.type =:type and b.opraterUserType=:operateUserType and b.status =:status")
-	int getKindCountByEnuuAndStatus(@Param("enuu") Long enuu, @Param("type") Short type, @Param("operateUserType") Integer operateUserType, @Param("status") Integer status);
-
+	@Query("select count(b) from BankInfo b where b.enuu=:enuu and b.opraterUserType=:operateUserType and b.status in :status")
+	int getCountByEnuuAndStatus(@Param("enuu") Long enuu, @Param("operateUserType") Integer operateUserType, @Param("status") List<Integer> status);
 
 	/**
-	 * 获取当前卖家的已通过企业银行账户
+	 * 获取平台的账户数
 	 *
-	 * @param useruu 个人uu
 	 * @param enuu 企业enuu
-	 * @param num 序号
-	 * @param type 账户类型
-	 * @param opraterUserType 操作人的类型
-	 * @param status 状态
-	 * @return list
+	 * @param operateUserType 操作人的类型
+	 * @return
+	 */
+	@Query("select count(b) from BankInfo b where b.enuu=:enuu and b.opraterUserType=:operateUserType and b.status=:status")
+	int getMallCountByEnuuAndStatus(@Param("enuu") Long enuu, @Param("operateUserType") Integer operateUserType, @Param("status") Integer status);
+
+	/**
+	 * 根据银行账号查询个人账号下的账户个数
+	 * @param useruu
+	 * @param enuu
+	 * @param opraterUserType
+	 * @param status
+	 * @param number
+	 * @return
 	 */
-	List<BankInfo> findByUseruuAndEnuuAndNumAndTypeAndOpraterUserTypeAndStatus(Long useruu, Long enuu, Integer num, Short type, Integer opraterUserType, Integer status);
+	@Query("select count(b) from BankInfo b where b.useruu=:useruu and b.enuu=:enuu and b.opraterUserType=:opraterUserType and b.status=:status and b.number=:number")
+	int getBuyerCountByNumberAndEnuu(@Param("useruu") Long useruu, @Param("enuu") Long enuu, @Param("opraterUserType") Integer opraterUserType, @Param("status") Integer status, @Param("number") String number);
+
+	/**
+	 * 根据银行账号查询个人账号下的账户个数
+	 * @param useruu
+	 * @param dissociative
+	 * @param status
+	 * @param number
+	 * @return
+	 */
+	@Query("select count(b) from BankInfo b where b.useruu=:useruu and b.dissociative=:dissociative and b.opraterUserType=:opraterUserType and b.status=:status and b.number=:number")
+	int getBuyerCountByNumberAndDissociative(@Param("useruu") Long useruu, @Param("dissociative") Integer dissociative, @Param("opraterUserType") Integer opraterUserType,
+											 @Param("status") Integer status, @Param("number") String number);
+
+	/**
+	 * 银行账户返回企业账户数
+	 * @param enuu
+	 * @param opraterUserType
+	 * @param status
+	 * @param number
+	 * @return
+	 */
+	@Query("select count(b) from BankInfo b where b.enuu=:enuu and b.opraterUserType=:opraterUserType and b.status in :status and b.number=:number")
+	int getEnterpriseCountByNumberAndEnuu(@Param("enuu") Long enuu, @Param("opraterUserType") Integer opraterUserType,
+									 @Param("status") List<Integer> status, @Param("number") String number);
+
+	List<BankInfo> findByUseruuAndEnuuAndNumAndOpraterUserTypeAndStatus(Long useruu, Long enuu, Integer num, Integer opraterUserType, Integer status);
 }

+ 32 - 18
src/main/java/com/uas/platform/b2c/fa/payment/model/BankInfo.java

@@ -50,6 +50,12 @@ public class BankInfo implements Serializable{
 	 */
 	@Column(name = "binfo_name")
 	private String bankname;
+
+	/**
+	 * 开户支行名称
+	 */
+	@Column(name = "binfo_branch")
+	private String branchname;
 	
 	/**
 	 * 开户名
@@ -62,19 +68,13 @@ public class BankInfo implements Serializable{
 	 */
 	@Column(name = "binfo_number")
 	private String number;
-	
-	/**
-	 * 是个人账户还是企业账户
-	 * 1 个人账户,2 企业账户
-	 */
-	@Column(name = "binfo_type")
-	private Short type;
 
 	/**
 	 * 账户信息的状态
-	 * 101, "已提交"
+	 * 101, "已提交" --待审核
 	 * 103, "未通过"
-	 * 104, "已通过"
+	 * 104, "已通过" --使用中
+	 * 105, "已失效"
 	 * 这个状态暂时只针对企业的账户,因为企业账户需要审核,个人账户不需要审核
 	 */
 	@Column(name = "binfo_status")
@@ -119,6 +119,12 @@ public class BankInfo implements Serializable{
 	@Column(name = "binfo_dissociative")
 	private Integer dissociative;
 
+	/**
+	 * 如果为erp同步科目,此项纪录erp科目编号
+	 */
+	@Column(name = "binfo_erpnum")
+	private String erpNum;
+
 	public Long getId() {
 		return id;
 	}
@@ -135,14 +141,6 @@ public class BankInfo implements Serializable{
 		this.useruu = useruu;
 	}
 
-	public Short getType() {
-		return type;
-	}
-
-	public void setType(Short type) {
-		this.type = type;
-	}
-
 	public Long getEnuu() {
 		return enuu;
 	}
@@ -175,6 +173,14 @@ public class BankInfo implements Serializable{
 		this.accountname = accountname;
 	}
 
+	public String getBranchname() {
+		return branchname;
+	}
+
+	public void setBranchname(String branchname) {
+		this.branchname = branchname;
+	}
+
 	public String getNumber() {
 		return number;
 	}
@@ -244,11 +250,19 @@ public class BankInfo implements Serializable{
 		this.dissociative = dissociative;
 	}
 
+	public String getErpNum() {
+		return erpNum;
+	}
+
+	public void setErpNum(String erpNum) {
+		this.erpNum = erpNum;
+	}
+
 	@Override
 	public String toString() {
 		return "BankInfo [id=" + id + ", useruu=" + useruu + ", enuu=" + enuu
 				+ ", num=" + num + ", bankname=" + bankname + ", accountname="
-				+ accountname + ", number=" + number + ", type=" + type
+				+ accountname + ", number=" + number
 				+ ", currency=" + currency + "]";
 	}
 }

+ 63 - 0
src/main/java/com/uas/platform/b2c/fa/payment/model/BankTransfer.java

@@ -1,6 +1,7 @@
 package com.uas.platform.b2c.fa.payment.model;
 
 import javax.persistence.*;
+import java.text.SimpleDateFormat;
 import java.util.Date;
 
 /**
@@ -13,6 +14,8 @@ import java.util.Date;
 @Table(name = "trade$bank_transfer")
 public class BankTransfer {
 
+	private final static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
 	@Id
 	@GeneratedValue
 	@Column(name = "banktf_id")
@@ -66,6 +69,30 @@ public class BankTransfer {
 	@Column(name = "banktf_collectuu")
 	private Long collectUseruu;
 
+	/**
+	 * 买家名称
+	 */
+	@Column(name = "banktf_buyername")
+	private String buyername;
+
+	/**
+	 * 买家企业名称
+	 */
+	@Column(name = "banktf_entername")
+	private String buyerentername;
+
+	/**
+	 * 订单号
+	 */
+	@Column(name = "banktf_orid")
+	private String orderid;
+
+	/**
+	 * 采购单号
+	 */
+	@Column(name = "bankty_puid")
+	private String puid;
+
 	/**
 	 * 付款方个人uu
 	 */
@@ -145,6 +172,22 @@ public class BankTransfer {
 		this.jsonReceive = jsonReceive;
 	}
 
+	public String getOrderid() {
+		return orderid;
+	}
+
+	public void setOrderid(String orderid) {
+		this.orderid = orderid;
+	}
+
+	public String getPuid() {
+		return puid;
+	}
+
+	public void setPuid(String puid) {
+		this.puid = puid;
+	}
+
 	public String getJsonPament() {
 		return jsonPament;
 	}
@@ -282,6 +325,22 @@ public class BankTransfer {
 		this.dissociative = dissociative;
 	}
 
+	public String getBuyername() {
+		return buyername;
+	}
+
+	public void setBuyername(String buyername) {
+		this.buyername = buyername;
+	}
+
+	public String getBuyerentername() {
+		return buyerentername;
+	}
+
+	public void setBuyerentername(String buyerentername) {
+		this.buyerentername = buyerentername;
+	}
+
 	public BankTransAssociate getBankTransAssociate() {
 		return bankTransAssociate;
 	}
@@ -290,4 +349,8 @@ public class BankTransfer {
 		this.bankTransAssociate = bankTransAssociate;
 		return this;
 	}
+
+	public String convertTime(){
+		return sdf.format(transferTime);
+	}
 }

+ 21 - 4
src/main/java/com/uas/platform/b2c/fa/payment/service/BankInfoService.java

@@ -20,12 +20,11 @@ public interface BankInfoService {
 	 * 保存账户的信息
 	 *
 	 * @param bankInfo 需要保存的信息
-	 * @param personal 是否是个人,还是企业
 	 * @param type     [buyer, mall, sup]
 	 * @param fileItem the file item
 	 * @return BankInfo
 	 */
-	BankInfo save(BankInfo bankInfo, boolean personal, Integer type, FileUpload... fileItem);
+	BankInfo save(BankInfo bankInfo, Integer type, FileUpload... fileItem);
 
 
 	/**
@@ -46,12 +45,12 @@ public interface BankInfoService {
 	void delete(Long id);
 
 	/**
-	 * 根据操作人类型查找所有的账户信息
+	 * 分页获取买家账户信息
 	 *
 	 * @param operatorUserType 操作人类型
 	 * @return list
 	 */
-	List<BankInfo> getPersonBankInfo(Integer operatorUserType);
+	Page<BankInfo> getPersonBankInfo(PageParams params, Integer operatorUserType);
 
 	/**
 	 * 根据以下参数 获取对应的参数
@@ -72,6 +71,15 @@ public interface BankInfoService {
 	 */
 	List<BankInfo> getEnterpriseBankInfo(Integer operatorUserType, Long... params);
 
+	/**
+	 * 分页获取卖家的账户信息
+	 *
+	 * @param params
+	 * @param operatorUserType
+	 * @return
+	 */
+	Page<BankInfo> getSupBankInfo(PageParams params, Integer operatorUserType);
+
 	/**
 	 * 根据以下参数 获取对应的参数查找所有的账户信息
 	 *
@@ -131,4 +139,13 @@ public interface BankInfoService {
 	 * @return ResultMap
 	 */
 	ResultMap auditBankInfo(Long id, Integer status, String... str);
+
+	/**
+	 * 根据银行账号返回账户数
+	 *
+	 * @param type
+	 * @param number
+	 * @return
+	 */
+	ResultMap getCountByNumber(Integer type, String number);
 }

+ 12 - 1
src/main/java/com/uas/platform/b2c/fa/payment/service/BankTransferService.java

@@ -8,6 +8,7 @@ import com.uas.platform.core.model.PageParams;
 import org.springframework.data.domain.Page;
 
 import java.util.List;
+import java.util.Random;
 
 /**
  * The interface BankTransfer service.
@@ -149,5 +150,15 @@ public interface BankTransferService {
 	 * @param type   the type 指定类型
 	 * @return ResultMap
 	 */
-	ResultMap getVendorBankTransferByMall(PageParams params, Integer type);
+	ResultMap getVendorBankTransferByMall(PageParams params, Integer type, String keyword, Long fromDate, Long toDate);
+
+	/**
+	 * 导出excel数据
+	 * @param type
+	 * @param keyword
+	 * @param fromDate
+	 * @param toDate
+	 * @return
+	 */
+	List<BankTransfer> getExportData(Integer type, String keyword, Long fromDate, Long toDate);
 }

+ 138 - 67
src/main/java/com/uas/platform/b2c/fa/payment/service/impl/BankInfoServiceImpl.java

@@ -1,21 +1,22 @@
 package com.uas.platform.b2c.fa.payment.service.impl;
 
+import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.platform.b2c.common.base.model.FileUpload;
 import com.uas.platform.b2c.common.base.service.FileService;
 import com.uas.platform.b2c.core.config.SysConf;
+import com.uas.platform.b2c.core.constant.Status;
+import com.uas.platform.b2c.core.constant.Type;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.fa.payment.dao.BankInfoDao;
 import com.uas.platform.b2c.fa.payment.model.BankInfo;
 import com.uas.platform.b2c.fa.payment.service.BankInfoService;
 import com.uas.platform.b2c.trade.support.CodeType;
 import com.uas.platform.b2c.trade.support.ResultMap;
-import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
-import com.uas.platform.core.model.Status;
-import com.uas.platform.core.model.Type;
 import com.uas.platform.core.persistence.criteria.CriterionExpression;
 import com.uas.platform.core.persistence.criteria.LogicalExpression;
+import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.persistence.criteria.SimpleExpression;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -29,6 +30,8 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
@@ -48,27 +51,28 @@ public class BankInfoServiceImpl implements BankInfoService {
 	@Autowired
 	SysConf sysConf;
 
+	private final static List<Integer> statusList = Arrays.asList(Status.SUBMITTED.value(), Status.NOTALLOW.value(), Status.ALLOW.value(), Status.EXPIRED.value());
+
 	/**
-	 * 保存账户的信息
+	 * 已修改,保存账户的信息
 	 * @param bankInfo 需要保存的信息
-	 * @param personal 是否是个人,还是企业
 	 * @param type [buyer, mall, sup]
 	 * @return
 	 */
 	@Override
 	@Transactional
-	public BankInfo save(BankInfo bankInfo, boolean personal, Integer type, FileUpload... fileItem) {
+	public BankInfo save(BankInfo bankInfo, Integer type, FileUpload... fileItem) {
 		bankInfo.setOpraterUserType(type);
 		bankInfo.setCreateTime(new Date());
 		if(type == Type.BUYER.value()) {
-			if (personal) {
-				bankInfo.setType((short)1);
-			} else {
-				bankInfo.setType((short)2);
-			}
 			if(bankInfo.getId() == null) {
-				bankInfo.setNum(SystemSession.getUser().getEnterprise() != null ?
-						bankInfoDao.getKindCountByUseruuAndStatus(SystemSession.getUser().getUserUU(), SystemSession.getUser().getEnterprise().getUu(), bankInfo.getType(), bankInfo.getOpraterUserType(), Status.ALLOW.value()) + 1 : bankInfoDao.getKindCountByUseruuAndStatusAndDissociative(SystemSession.getUser().getUserUU(), Type.PERSONAL.value(), bankInfo.getType(), bankInfo.getOpraterUserType(), Status.ALLOW.value()) + 1);
+				if (SystemSession.getUser().getEnterprise() != null){
+					int num = bankInfoDao.getCountByUseruuAndStatus(SystemSession.getUser().getUserUU(), SystemSession.getUser().getEnterprise().getUu(), bankInfo.getOpraterUserType(), Status.ALLOW.value()) + 1;
+					bankInfo.setNum(num);
+				}else {
+					int num = bankInfoDao.getCountByUseruuAndStatusAndDissociative(SystemSession.getUser().getUserUU(), Type.PERSONAL.value(), bankInfo.getOpraterUserType(), Status.ALLOW.value()) + 1;
+					bankInfo.setNum(num);
+				}
 			}
 			bankInfo.setUseruu(SystemSession.getUser().getUserUU());
 			bankInfo.setEnuu(SystemSession.getUser().getEnterprise() != null ? SystemSession.getUser().getEnterprise().getUu() : null);
@@ -80,14 +84,10 @@ public class BankInfoServiceImpl implements BankInfoService {
 			bankInfo.setStatus(Status.ALLOW.value());
 		}else if(type == Type.SUP.value()) {
 			bankInfo.setEnuu(SystemSession.getUser().getEnterprise().getUu());
-			bankInfo.setType((short)2);
+			bankInfo.setDissociative(Type.ENTERPRISING.value());
 			if(bankInfo.getId() == null) {
-				int count = bankInfoDao.getKindCountByEnuuAndStatus(SystemSession.getUser().getEnterprise().getUu(), bankInfo.getType(), bankInfo.getOpraterUserType(), Status.ALLOW.value());
-				if(count > 0) {
-					throw new IllegalOperatorException("供应商企业账户只能保存一条,请删除之后重新操作");
-				}
-				int num = bankInfoDao.getKindCountByEnuuAndStatus(SystemSession.getUser().getEnterprise().getUu(), bankInfo.getType(), bankInfo.getOpraterUserType(), Status.SUBMITTED.value());
-				bankInfo.setNum(num + 1);
+				int count = bankInfoDao.getCountByEnuuAndStatus(SystemSession.getUser().getEnterprise().getUu(), bankInfo.getOpraterUserType(), statusList);
+				bankInfo.setNum(count + 1);
 			}
 			bankInfo.setStatus(Status.SUBMITTED.value());
 		}
@@ -100,6 +100,10 @@ public class BankInfoServiceImpl implements BankInfoService {
 		return bankInfoDao.save(bankInfo);
 	}
 
+	/**
+	 * 已修改,删除账户信息,取出对应账户信息排序
+	 * @param id the id
+	 */
 	@Override
 	@Transactional
 	public void delete(Long id) {
@@ -109,15 +113,20 @@ public class BankInfoServiceImpl implements BankInfoService {
 			baInfo.setStatus(Status.DELETED.value());
 			bankInfoDao.save(baInfo);
 			int i = 1;
-			if (baInfo.getType() == 2) {
-				List<BankInfo> list = bankInfoDao.findByEnuuAndTypeAndStatusAndOpraterUserTypeOrderByNumAsc(baInfo.getEnuu(), (short)2, Status.ALLOW.value(), baInfo.getOpraterUserType());
+			if (baInfo.getOpraterUserType() == Type.BUYER.value()){
+				List<BankInfo> list = new ArrayList<>();
+				if (baInfo.getEnuu() != null){
+					list = bankInfoDao.findByUseruuAndEnuuAndOpraterUserTypeAndStatusOrderByNumAsc(baInfo.getUseruu(), baInfo.getEnuu(), baInfo.getOpraterUserType(), Status.ALLOW.value());
+				}else {
+					list = bankInfoDao.findByUseruuAndDissociativeAndOpraterUserTypeAndStatusOrderByNumAsc(baInfo.getUseruu(), Type.PERSONAL.value(), baInfo.getOpraterUserType(), Status.ALLOW.value());
+				}
 				for (BankInfo bankInfo : list) {
 					bankInfo.setNum(i);
 					i++;
 				}
 				bankInfoDao.save(list);
-			} else {
-				List<BankInfo> list = bankInfoDao.findByUseruuAndEnuuAndTypeAndOpraterUserTypeAndStatusOrderByNumAsc(baInfo.getUseruu(), baInfo.getEnuu(), (short)1, baInfo.getOpraterUserType(), Status.ALLOW.value());
+			} else if (baInfo.getOpraterUserType() == Type.SUP.value()){
+				List<BankInfo> list = bankInfoDao.findSupBankList(baInfo.getEnuu(), baInfo.getOpraterUserType(), statusList);
 				for (BankInfo bankInfo : list) {
 					bankInfo.setNum(i);
 					i++;
@@ -127,14 +136,58 @@ public class BankInfoServiceImpl implements BankInfoService {
 		}
 	}
 
+	/**
+	 * 已修改,分页获取买家账户信息
+	 * @param params
+	 * @param operatorUserType 操作人类型
+	 * @return
+	 */
 	@Override
-	public List<BankInfo> getPersonBankInfo(Integer operatorUserType) {
-		if (SystemSession.getUser().getEnterprise() != null) {
-			return bankInfoDao.findByUseruuAndEnuuAndTypeAndOpraterUserTypeAndStatusOrderByNumAsc(SystemSession.getUser().getUserUU(), SystemSession.getUser().getEnterprise().getUu(), (short)1, operatorUserType, Status.ALLOW.value());
-		} else {
-			return bankInfoDao.findByUseruuAndDissociativeAndTypeAndOpraterUserTypeAndStatusOrderByNumAsc(SystemSession.getUser().getUserUU(), Type.PERSONAL.value(), (short)1, operatorUserType, Status.ALLOW.value());
+	public Page<BankInfo> getPersonBankInfo(PageParams params, Integer operatorUserType) {
+		final PageInfo pageInfo = new PageInfo(params);
+		pageInfo.filter("opraterUserType", operatorUserType);
+		pageInfo.filter("useruu", SystemSession.getUser().getUserUU());
+		if (SystemSession.getUser().getEnterprise() != null){
+			pageInfo.filter("enuu", SystemSession.getUser().getEnterprise().getUu());
+		}else {
+			pageInfo.filter("dissociative", Type.PERSONAL.value());
 		}
+		pageInfo.filter("status", Status.ALLOW.value());
+		return bankInfoDao.findAll(new Specification<BankInfo>() {
+			@Override
+			public Predicate toPredicate(Root<BankInfo> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+				query.where(pageInfo.getPredicates(root, query, cb));
+				return null;
+			}
+		}, pageInfo);
+	}
+
+	/**
+	 * 已修改,分页获取卖家账户信息
+	 *
+	 * @param params
+	 * @param operatorUserType
+	 * @return
+	 */
+	@Override
+	public Page<BankInfo> getSupBankInfo(PageParams params, Integer operatorUserType) {
+		final PageInfo pageInfo = new PageInfo(params);
+		pageInfo.filter("opraterUserType", operatorUserType);
+		pageInfo.filter("enuu", SystemSession.getUser().getEnterprise().getUu());
+		SimpleExpression expression1 = new SimpleExpression("status", Status.SUBMITTED.value(), CriterionExpression.Operator.EQ);
+		SimpleExpression expression2 = new SimpleExpression("status", Status.NOTALLOW.value(), CriterionExpression.Operator.EQ);
+		SimpleExpression expression3 = new SimpleExpression("status", Status.ALLOW.value(), CriterionExpression.Operator.EQ);
+		SimpleExpression expression4 = new SimpleExpression("status", Status.EXPIRED.value(), CriterionExpression.Operator.EQ);
+		SimpleExpression[] expressions = new SimpleExpression[]{expression1, expression2, expression3, expression4};
+		pageInfo.expression(PredicateUtils.or(expressions));
 
+		return bankInfoDao.findAll(new Specification<BankInfo>() {
+			@Override
+			public Predicate toPredicate(Root<BankInfo> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+				query.where(pageInfo.getPredicates(root, query, cb));
+				return null;
+			}
+		}, pageInfo);
 	}
 
 	@Override
@@ -147,12 +200,12 @@ public class BankInfoServiceImpl implements BankInfoService {
 		}
 		if(operatorUserType == Type.BUYER.value()) {
 			if (enuu != null) {
-				return bankInfoDao.findByUseruuAndEnuuAndTypeAndOpraterUserTypeAndStatusOrderByNumAsc(SystemSession.getUser().getUserUU(), enuu, (short)2, operatorUserType, status);
+				return bankInfoDao.findByUseruuAndEnuuAndOpraterUserTypeAndStatusOrderByNumAsc(SystemSession.getUser().getUserUU(), enuu, operatorUserType, status);
 			} else {
-				return bankInfoDao.findByUseruuAndDissociativeAndTypeAndOpraterUserTypeAndStatusOrderByNumAsc(SystemSession.getUser().getUserUU(), Type.PERSONAL.value(), (short)2, operatorUserType, status);
+				return bankInfoDao.findByUseruuAndDissociativeAndOpraterUserTypeAndStatusOrderByNumAsc(SystemSession.getUser().getUserUU(), Type.PERSONAL.value(), operatorUserType, status);
 			}
 		}else {
-			return bankInfoDao.findByEnuuAndTypeAndStatusAndOpraterUserTypeOrderByNumAsc(enuu, (short)2, status, operatorUserType);
+			return bankInfoDao.findByEnuuAndStatusAndOpraterUserTypeOrderByNumAsc(enuu, status, operatorUserType);
 		}
 	}
 
@@ -163,7 +216,7 @@ public class BankInfoServiceImpl implements BankInfoService {
 
 	@Override
 	public List<BankInfo> findBankInfoByUseruu(Long useruu, Long enuu, Integer opraterUserType) {
-		return bankInfoDao.findByUseruuAndEnuuAndTypeAndOpraterUserTypeAndStatusOrderByNumAsc(useruu, enuu, (short)1, opraterUserType, Status.ALLOW.value());
+		return bankInfoDao.findByUseruuAndEnuuAndOpraterUserTypeAndStatusOrderByNumAsc(useruu, enuu, opraterUserType, Status.ALLOW.value());
 	}
 
 	@Override
@@ -178,19 +231,7 @@ public class BankInfoServiceImpl implements BankInfoService {
 		bankInfo.setOpraterUserType(Type.MALL.value());
 		bankInfo.setEnuu(sysConf.getEnUU());
 		bankInfo.setCreateTime(new Date());
-		if(isPersonal) {
-			bankInfo.setUseruu(sysConf.getAdminUU());
-			bankInfo.setType((short)1);
-		}else {
-			bankInfo.setType((short)2);
-		}
-		if(bankInfo.getType() == 2) {
-			size = bankInfoDao.getKindCountByEnuuAndStatus(bankInfo.getEnuu(), (short)2, Type.MALL.value(), Status.ALLOW.value());
-		}else if(bankInfo.getType() == 1) {
-			size = bankInfoDao.getKindCountByUseruuAndStatus(bankInfo.getUseruu(), bankInfo.getEnuu(), (short)1, Type.MALL.value(), Status.ALLOW.value());
-		}else {
-			new IllegalOperatorException("没有给账户设置对应的类型");
-		}
+		size = bankInfoDao.getMallCountByEnuuAndStatus(bankInfo.getEnuu(),Type.MALL.value(), Status.ALLOW.value());
 		bankInfo.setNum(++size);
 		bankInfo.setStatus(Status.ALLOW.value());
 		return bankInfoDao.save(bankInfo);
@@ -204,22 +245,21 @@ public class BankInfoServiceImpl implements BankInfoService {
 	@Transactional
 	@Override
 	public void setDefaultAccount(Long id) {
-		BankInfo account = bankInfoDao.findOne(id);
+		BankInfo baInfo = bankInfoDao.findOne(id);
 		List<BankInfo> bankInfos = null;
-		if(account.getOpraterUserType() == Type.BUYER.value()) {
-			bankInfos = bankInfoDao.findByUseruuAndEnuuAndTypeAndOpraterUserTypeAndStatusOrderByNumAsc(account.getUseruu(), account.getEnuu(), account.getType(), account.getOpraterUserType(), account.getStatus());
-		}else if(account.getOpraterUserType() == Type.SUP.value()){
-			bankInfos = bankInfoDao.findByEnuuAndTypeAndStatusAndOpraterUserTypeOrderByNumAsc(account.getEnuu(), account.getType(), account.getStatus(), account.getOpraterUserType());
-		}else if(account.getOpraterUserType() == Type.MALL.value()) {
-			if(account.getType() == 2) {
-				bankInfos = bankInfoDao.findByEnuuAndTypeAndStatusAndOpraterUserTypeOrderByNumAsc(account.getEnuu(), account.getType(), account.getStatus(), account.getOpraterUserType());
-			} else {
-				if(account.getType() == 1) {
-					bankInfos =	bankInfoDao.findByUseruuAndEnuuAndTypeAndOpraterUserTypeAndStatusOrderByNumAsc(account.getUseruu(), account.getEnuu(), account.getType(), account.getOpraterUserType(),account.getStatus());
-				}
+		if (baInfo.getOpraterUserType() == Type.BUYER.value()){
+			//只有买家账户才涉及到默认账户
+			bankInfos = bankInfoDao.findByUseruuAndEnuuAndOpraterUserTypeAndStatusOrderByNumAsc(baInfo.getUseruu(), baInfo.getEnuu(), baInfo.getOpraterUserType(), Status.ALLOW.value());
+		}else if (baInfo.getOpraterUserType() == Type.SUP.value()){
+			//卖家账户重新使用
+			bankInfos = bankInfoDao.findSupBankList(baInfo.getEnuu(), baInfo.getOpraterUserType(), statusList);
+			BankInfo firstItem = bankInfos.get(0);
+			if (firstItem.getStatus() == Status.ALLOW.value()){
+				firstItem.setStatus(Status.EXPIRED.value());
 			}
+			baInfo.setStatus(Status.ALLOW.value());
+			bankInfoDao.save(baInfo);
 		}
-
 		setDefaultAccountAssist(bankInfos, id);
 	}
 	
@@ -253,7 +293,7 @@ public class BankInfoServiceImpl implements BankInfoService {
 		}else {
 			enuu = params[0];
 		}
-		return bankInfoDao.findByEnuuAndTypeAndOpraterUserTypeOrderByNumAsc(enuu, (short)2, operatorUserType);
+		return bankInfoDao.findByEnuuAndOpraterUserTypeOrderByNumAsc(enuu, operatorUserType);
 	}
 
 	/**
@@ -307,17 +347,24 @@ public class BankInfoServiceImpl implements BankInfoService {
 			return new ResultMap(CodeType.NOT_EXiST, "操作的实体不存在");
 		}
 		if(bankInfo.getStatus() != Status.SUBMITTED.value()) {
-			return new ResultMap(CodeType.NOT_PERMIT, "该账户信息不是已交状态,不能审核");
+			return new ResultMap(CodeType.NOT_PERMIT, "该账户信息不是已交状态,不能审核");
 		}
 		if(status == Status.ALLOW.value()) { //审核通过
-			if(bankInfo.getOpraterUserType().intValue() == Type.SUP.value()) {
-				int num = bankInfoDao.getKindCountByEnuuAndStatus(bankInfo.getEnuu(), bankInfo.getType(), Type.SUP.value(), Status.ALLOW.value());
-				if(num > 0) {
-					return new ResultMap(CodeType.NOT_PERMIT, "该公司的银行账户已经存在了,不能再增加了");
-				}
-				bankInfo.setNum(1);
+			if(bankInfo.getOpraterUserType() == Type.SUP.value()) {
 				bankInfo.setStatus(Status.ALLOW.value());
 				bankInfo = bankInfoDao.save(bankInfo);
+				//获取所有的账户信息
+				List<BankInfo> infoList = bankInfoDao.findSupBankList(bankInfo.getEnuu(), bankInfo.getOpraterUserType(), statusList);
+				if (!CollectionUtils.isEmpty(infoList) && infoList.size() > 1){
+					BankInfo first = infoList.get(0); //获取第一个账户信息
+					if (first.getStatus() == Status.ALLOW.value()){
+						//已有使用中的账户
+						first.setStatus(Status.EXPIRED.value());
+						setDefaultAccountAssist(infoList, bankInfo.getId());
+					}else {
+						setDefaultAccountAssist(infoList, bankInfo.getId());
+					}
+				}
 			}
 		}else if(status == Status.NOTALLOW.value()){
 			if(str == null || str.length == 0) {
@@ -329,4 +376,28 @@ public class BankInfoServiceImpl implements BankInfoService {
 		}
 		return ResultMap.success(bankInfo);
 	}
+
+	@Override
+	public ResultMap getCountByNumber(Integer type, String number) {
+		if (type != Type.MALL.value() && type != Type.BUYER.value() && type != Type.SUP.value()){
+			return new ResultMap(CodeType.ERROR_STATE, "类型不存在,确认要查找账户的类型");
+		}
+		if (StringUtils.isEmpty(number)){
+			return new ResultMap(CodeType.NO_INFO, "银行账号丢失或为空,请确认银行账号");
+		}
+		Integer count = null;
+		if (type == Type.BUYER.value()){
+			Enterprise enterprise = SystemSession.getUser().getEnterprise();
+			if (enterprise != null){
+				count = bankInfoDao.getBuyerCountByNumberAndEnuu(SystemSession.getUser().getUserUU(), enterprise.getUu(),
+						Type.BUYER.value(), Status.ALLOW.value(), number);
+			}else {
+				count = bankInfoDao.getBuyerCountByNumberAndDissociative(SystemSession.getUser().getUserUU(), Type.PERSONAL.value(),
+						Type.BUYER.value(), Status.ALLOW.value(), number);
+			}
+		}else {
+			count = bankInfoDao.getEnterpriseCountByNumberAndEnuu(SystemSession.getUser().getEnterprise().getUu(), type, statusList, number);
+		}
+		return ResultMap.success(count);
+	}
 }

+ 58 - 7
src/main/java/com/uas/platform/b2c/fa/payment/service/impl/BankTransferServiceImpl.java

@@ -5,6 +5,7 @@ import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.platform.b2c.core.config.SysConf;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.platform.b2c.core.utils.NumberUtil;
 import com.uas.platform.b2c.fa.payment.dao.BankInfoDao;
 import com.uas.platform.b2c.fa.payment.dao.BankTransAssociateDao;
 import com.uas.platform.b2c.fa.payment.dao.BankTransferDao;
@@ -32,9 +33,13 @@ import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.b2c.trade.util.Preconditions;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.model.*;
+import com.uas.platform.core.persistence.criteria.CriterionExpression;
+import com.uas.platform.core.persistence.criteria.LogicalExpression;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
+import com.uas.platform.core.persistence.criteria.SimpleExpression;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -45,9 +50,7 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 /**
  * @author yujia
@@ -397,6 +400,7 @@ public class BankTransferServiceImpl implements BankTransferService {
 							}
 						}
 						purchase.setStatusPaid(userUU);
+                        purchase.setSendstatus(com.uas.platform.b2c.core.constant.Status.NOT_UPLOAD.value());
 					}
 				}
 				purchaseDao.save(purchases);
@@ -519,7 +523,7 @@ public class BankTransferServiceImpl implements BankTransferService {
 		if (StringUtils.hasText(orderId)) {
 			Order order = orderDao.findByOrderid(orderId);
 			if (order != null && order.getBuyerenuu() != null) {
-				List<BankInfo> bankInfos = bankInfoDao.findByUseruuAndEnuuAndNumAndTypeAndOpraterUserTypeAndStatus(order.getBuyeruu(), order.getBuyerenuu(), 1, (short) 2, Type.BUYER.value(), Status.ALLOW.value());
+				List<BankInfo> bankInfos = bankInfoDao.findByUseruuAndEnuuAndNumAndOpraterUserTypeAndStatus(order.getBuyeruu(), order.getBuyerenuu(), 1, Type.BUYER.value(), Status.ALLOW.value());
 				if (!CollectionUtils.isEmpty(bankInfos)) {
 					return bankInfos.get(0);
 				}
@@ -536,8 +540,8 @@ public class BankTransferServiceImpl implements BankTransferService {
 	 * @return Page<BankTransfer>
 	 */
 	@Override
-	public ResultMap getVendorBankTransferByMall(PageParams params, Integer type) {
-		if(type == null || (type != Type.SUP.value() && type != Type.MALL.value()&&type != Type.MALL.value()) || params == null) {
+	public ResultMap getVendorBankTransferByMall(PageParams params, Integer type, String keyword, Long fromDate, Long toDate) {
+		if(type == null || (type != Type.SUP.value() && type != Type.MALL.value()) || params == null) {
 			return new ResultMap(CodeType.NO_INFO, "参数信息丢失");
 		}
 		final PageInfo info = new PageInfo(params);
@@ -545,6 +549,9 @@ public class BankTransferServiceImpl implements BankTransferService {
 			info.filter("operateType", type);
 			info.filter("collectenuu", SystemSession.getUser().getEnterprise().getUu());
 		}
+		info.expression(PredicateUtils.isNotNull("transferTime"));
+		filterPageInfo(info, keyword, fromDate, toDate);
+
 		Page<BankTransfer> pageBankTran = bankTransferDao.findAll(new Specification<BankTransfer>() {
 			@Override
 			public Predicate toPredicate(Root<BankTransfer> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
@@ -553,12 +560,56 @@ public class BankTransferServiceImpl implements BankTransferService {
 			}
 		}, info);
 		List<BankTransfer> content = pageBankTran.getContent();
+		Double totalPrice = 0.0d;
 		for (BankTransfer bankTransfer : content) {
+			totalPrice = NumberUtil.add(totalPrice, bankTransfer.getTotal());
 			List<BankTransAssociate> list = transAssociateDao.findByBtaBanktranssn(bankTransfer.getBanktranssn());
 			if(!CollectionUtils.isEmpty(list)) {
 				bankTransfer.setBankTransAssociate(list.get(0));
 			}
 		}
-		return ResultMap.success(pageBankTran);
+		Map<String, Object> resultMap = new HashMap<>();
+		resultMap.put("data", pageBankTran);
+		resultMap.put("total", totalPrice);
+		return ResultMap.success(resultMap);
+	}
+
+	@Override
+	public List<BankTransfer> getExportData(Integer type, String keyword, Long fromDate, Long toDate) {
+		if(type == null || (type != Type.SUP.value() && type != Type.MALL.value())) {
+			throw new IllegalOperatorException("参数丢失,刷新后重试");
+		}
+		final PageInfo info = new PageInfo();
+		if(type == Type.SUP.value()) {
+			info.filter("operateType", type);
+			info.filter("collectenuu", SystemSession.getUser().getEnterprise().getUu());
+		}
+		info.expression(PredicateUtils.isNotNull("transferTime"));
+		info.sorting(Sort.Direction.DESC, "transferTime");
+		filterPageInfo(info, keyword, fromDate, toDate);
+		List<BankTransfer> list = bankTransferDao.findAll(new Specification<BankTransfer>() {
+			@Override
+			public Predicate toPredicate(Root<BankTransfer> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
+				criteriaQuery.where(info.getPredicates(root, criteriaQuery, criteriaBuilder));
+				return null;
+			}
+		});
+		return list;
+	}
+
+	private void filterPageInfo(PageInfo info, String keyword, Long fromDate, Long toDate){
+		if (StringUtils.hasText(keyword)){
+			SimpleExpression[] simpArrs = new SimpleExpression[2];
+			simpArrs[0] = new SimpleExpression("orderid", keyword, CriterionExpression.Operator.LIKE, true);
+			simpArrs[1] = new SimpleExpression("buyerentername", keyword, CriterionExpression.Operator.LIKE, true);
+			LogicalExpression logical = new LogicalExpression(simpArrs, CriterionExpression.Operator.OR);
+			info.expression(logical);
+		}
+		if (fromDate != null) {
+			info.expression(PredicateUtils.gte("transferTime", new Date(fromDate), false));
+		}
+		if (toDate != null) {
+			info.expression(PredicateUtils.lte("transferTime", new Date(toDate), false));
+		}
 	}
 }

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

@@ -483,11 +483,17 @@ public class SettlementServiceImpl implements SettlementService {
 			transfer.setCollectenuu(bankTransfer.getCollectenuu());
 			transfer.setCollectUseruu(bankTransfer.getCollectUseruu());
 			transfer.setImgUrl(bankTransfer.getImgUrl());
+			//买家姓名和企业名
+			transfer.setBuyername(purchase.getBuyername());
+			transfer.setBuyerentername(purchase.getBuyentername());
+			transfer.setOrderid(purchase.getOrderid());
+			transfer.setPuid(purchase.getPurchaseid());
+
 			//收方和付方的账户信息
 			transfer.setJsonPament(bankTransfer.getJsonPament());
 			transfer.setJsonReceive(bankTransfer.getJsonReceive());
 			transfer.setTranferCreateTime(new Date());
-			transfer.setTransferTime(bankTransfer.getTransferTime());
+			transfer.setTransferTime(new Date());
 			bankTransferList.add(transfer);
 
 			//转账和订单的关联信息

+ 11 - 15
src/main/java/com/uas/platform/b2c/logistics/service/impl/InvoiceFPurchaseServiceImpl.java

@@ -5,8 +5,11 @@ import com.uas.api.b2c_erp.seller.model.Invoice;
 import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
 import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.platform.b2c.common.account.model.TradeLog;
-import com.uas.platform.b2c.trade.aftersale.model.AfterSaleStatus;
 import com.uas.platform.b2c.core.config.SysConf;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.core.support.log.TradeBufferedLogger;
+import com.uas.platform.b2c.core.utils.NumberUtil;
+import com.uas.platform.b2c.core.utils.StringUtilB2C;
 import com.uas.platform.b2c.logistics.dao.InvoiceFPurchaseDao;
 import com.uas.platform.b2c.logistics.dao.LogisticsCompanyCodeDao;
 import com.uas.platform.b2c.logistics.dao.LogisticsDao;
@@ -15,18 +18,15 @@ import com.uas.platform.b2c.logistics.model.InvoiceFPurchaseDetail;
 import com.uas.platform.b2c.logistics.model.Logistics;
 import com.uas.platform.b2c.logistics.service.InvoiceFPurchaseService;
 import com.uas.platform.b2c.logistics.service.LogisticsOldService;
+import com.uas.platform.b2c.prod.commodity.service.ProductService;
+import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
+import com.uas.platform.b2c.trade.aftersale.model.AfterSaleStatus;
 import com.uas.platform.b2c.trade.order.dao.OrderDao;
 import com.uas.platform.b2c.trade.order.dao.PurchaseDao;
 import com.uas.platform.b2c.trade.order.model.Order;
 import com.uas.platform.b2c.trade.order.model.OrderDetail;
 import com.uas.platform.b2c.trade.order.model.Purchase;
 import com.uas.platform.b2c.trade.order.model.PurchaseDetail;
-import com.uas.platform.b2c.prod.commodity.service.ProductService;
-import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
-import com.uas.platform.b2c.core.support.SystemSession;
-import com.uas.platform.b2c.core.support.log.TradeBufferedLogger;
-import com.uas.platform.b2c.core.utils.NumberUtil;
-import com.uas.platform.b2c.core.utils.StringUtilB2C;
 import com.uas.platform.b2c.trade.support.CodeType;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.b2c.trade.util.TradeLogUtil;
@@ -42,7 +42,6 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.NumberUtils;
 import org.springframework.util.StringUtils;
 
 import javax.management.OperationsException;
@@ -50,12 +49,7 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 @Service
 public class InvoiceFPurchaseServiceImpl implements InvoiceFPurchaseService {
@@ -112,7 +106,7 @@ public class InvoiceFPurchaseServiceImpl implements InvoiceFPurchaseService {
 	@Override
 	public InvoiceFPurchase createInvoiceFPurchase(Long puid) {
 		Purchase purchase = purchaseDao.findOne(puid);
-		if (purchase.getStatus() != Status.TOBESHIPPED.value()) {
+		if (purchase.getStatus() != Status.TOBESHIPPED.value() && purchase.getStatus() != Status.CONFIRMED.value()) {
 			throw new IllegalAccessError(
 					"采购单" + purchase.getPurchaseid() + "的状态是" + Status.valueOf(purchase.getStatus()).getPhrase() + ",不能转出货");
 		}
@@ -363,6 +357,7 @@ public class InvoiceFPurchaseServiceImpl implements InvoiceFPurchaseService {
 //			}
 			order.setJsonSdAddress(inFpu.getJsonSdAddress());
 			order.setStatusInBound(userUU);
+            order.setSendstatus(Status.NOT_UPLOAD.value());// 将订单设置为未下载状态,以便erp下载
 			for (OrderDetail detail : order.getOrderDetails()) {
 				detail.setStatusInBound(userUU);
 			}
@@ -481,6 +476,7 @@ public class InvoiceFPurchaseServiceImpl implements InvoiceFPurchaseService {
 		logisticsInfo.put("companyName", invoice.getCompanyName());
 		logisticsInfo.put("number", invoice.getCompanyNumber());
 		jsonObject.put("logisticsInfo", logisticsInfo);
+		jsonObject.put("sendType", purchase.getSendType());
 		saveInvoiceFPurchaseList(jsonObject, invoiceFpurc.getId());
 
 //		Logistics logist = new Logistics();

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

@@ -1,11 +1,13 @@
 package com.uas.platform.b2c.prod.commodity.controller;
 
+import com.alibaba.fastjson.JSONObject;
+import com.uas.platform.b2c.core.constant.SplitChar;
+import com.uas.platform.b2c.core.support.view.JxlsExcelView;
 import com.uas.platform.b2c.prod.commodity.facade.ProductFacade;
 import com.uas.platform.b2c.prod.commodity.model.Goods;
 import com.uas.platform.b2c.prod.commodity.model.Product;
+import com.uas.platform.b2c.prod.commodity.model.ProductDetail;
 import com.uas.platform.b2c.prod.commodity.service.ProductService;
-import com.uas.platform.b2c.core.constant.SplitChar;
-import com.uas.platform.b2c.core.support.view.JxlsExcelView;
 import com.uas.platform.b2c.prod.commodity.type.ProductConstant;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
@@ -212,4 +214,35 @@ public class ProductController {
 	private ResultMap deleteStandardByBatch() {
 		return productService.deleteBatch(ProductConstant.STANDARD);
 	}
+
+	/**
+	 * 通过物料id获取物料交易详情
+	 * @param id
+	 * @return
+	 */
+	@RequestMapping(value = "/detail/{id}", method = RequestMethod.GET)
+	private ProductDetail getbyProductId(@PathVariable("id") Long id) {
+		return productService.findByProductId(id);
+	}
+
+	/**
+	 * 提交申请
+	 * @param jsonObject
+	 * @return
+	 */
+	@RequestMapping(value = "/validition", method = RequestMethod.POST)
+	private ResultMap validitionStandard(@RequestBody JSONObject jsonObject) {
+		return productService.validitonStandard(jsonObject);
+	}
+
+	/**
+	 * 保存物料交易详情
+	 * @param productId
+	 * @param goods
+	 * @return
+	 */
+	@RequestMapping(value = "/savedetail/{productId}", method = RequestMethod.POST)
+	public ProductDetail saveDetail(@PathVariable("productId") Long productId, @RequestBody Goods goods) {
+		return productService.saveDetail(productId, goods);
+	}
 }

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

@@ -495,4 +495,30 @@ public interface GoodsDao extends JpaSpecificationExecutor<Goods>, JpaRepository
      * @return list
      */
     List<Goods> findByEnUU(Long enuu);
+
+    /**
+     * 根据企业uu和器件uuid获取goods信息
+     * @return
+     */
+    List<Goods> findByEnUUAndUuidOrderByReserveAsc(Long enuu, String uuid);
+
+    /**
+     * 根据企业uu和器件uuid获取当前在售商品总库存
+     * @param enuu
+     * @param uuid
+     * @return
+     */
+    @Deprecated
+    @Query(value = "select sum(go_reserve) from trade$goods where go_enuu=:enuu and cmp_uuid=:uuid", nativeQuery = true)
+    Double getSumReserveByEnUUAndUuid(@Param("enuu") Long enuu, @Param("uuid") String uuid);
+
+
+    /**
+     * 根据企业uu和器件uuid和状态获取商品总库存
+     * @param enuu
+     * @param uuid
+     * @return
+     */
+    @Query(value = "select sum(go_reserve) from trade$goods where go_enuu=:enuu and cmp_uuid=:uuid and go_status=:status ", nativeQuery = true)
+    Double getSumReserveByEnUUAndUuidAndStatus(@Param("enuu") Long enuu, @Param("uuid") String uuid, @Param("status") Integer status);
 }

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

@@ -71,6 +71,23 @@ public interface ProductDao extends JpaSpecificationExecutor<Product>, JpaReposi
     @Query(value = "select p from Product p where p.pcmpcode=:pcmpcode and p.pbranden=:pbranden and p.enUU=:enUU and p.standard=:standard")
     List<Product> findProductByPcmpcodeAndPbrandenAndEnUUAndStandard(@Param("pcmpcode") String pcmpcode, @Param("pbranden") String pbranden, @Param("enUU") Long enUU, @Param("standard") Integer standard);
 
+    /**
+     * 根据应用、b2c下载状态、企业uu下载标准物料
+     * @param sourceapp
+     * @param b2cDownStatus
+     * @param enUU
+     * @return
+     */
+    List<Product> findBySourceAppAndB2cDownStatusAndEnUUAndCmpUuIdIsNotNull(String sourceapp, Integer b2cDownStatus, Long enUU);
+
+    /**
+     * 通过企业uu、标准器件uuid获取标准物料信息
+     * @param enuu
+     * @param uuid
+     * @return
+     */
+    List<Product> findByEnUUAndCmpUuId(Long enuu, String uuid);
+
     /**
      * 获取该企业的产品信息
      * @param enuu 企业的uu号

+ 20 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductDetailDao.java

@@ -0,0 +1,20 @@
+package com.uas.platform.b2c.prod.commodity.dao;
+
+import com.uas.platform.b2c.prod.commodity.model.ProductDetail;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+/**
+ * Created by wangyc on 2017/10/28.
+ *
+ * @version 2017/10/28 18:13 wangyc
+ */
+public interface ProductDetailDao extends JpaRepository<ProductDetail, Long>, JpaSpecificationExecutor<ProductDetail> {
+
+    /**
+     * 通过物料id获取物料交易详情
+     * @param productId
+     * @return
+     */
+    public ProductDetail findByProductId(Long productId);
+}

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

@@ -81,7 +81,11 @@ public class ProductFacadeImpl implements ProductFacade {
 		goods.setStoreName(store.getStoreName());
 
 		// 发布商品
-		goods = goodsService.publish(goods, "NORMAL");
+		if ("ERP".equals(product.getSourceApp())) {
+			goods = goodsService.publish(goods, "NORMAL", product);
+		} else {
+			goods = goodsService.publish(goods, "NORMAL");
+		}
 
 		return ResultMap.success(goods);
 	}

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

@@ -38,7 +38,7 @@ public class Goods implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 	@Id
-	@GeneratedValue
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
 	@Column(name = "go_id")
 	private Long id;
 

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

@@ -129,7 +129,6 @@ public class Product {
 	private String sourceApp;
 
 
-
 	/**
 	 * 类目(平台)(中文)
 	 */
@@ -267,6 +266,20 @@ public class Product {
 	@Column(name = "pr_tostandard")
 	private Date tostandard;
 
+	/**
+	 * b2c更新后下载状态
+	 * DOWNLOADED(203, "已下载")
+	 * NOT_UPLOAD(202, "待下载")
+	 */
+	@Column(name = "pr_b2cdownstatus")
+	private Integer b2cDownStatus;
+
+	/**
+	 * 针对erp的物料交易信息
+	 */
+	@Transient
+	private ProductDetail productDetail;
+
 	public Product() {
 	}
 
@@ -605,8 +618,24 @@ public class Product {
 		return tostandard;
 	}
 
+	public Integer getB2cDownStatus() {
+		return b2cDownStatus;
+	}
+
+	public void setB2cDownStatus(Integer b2cDownStatus) {
+		this.b2cDownStatus = b2cDownStatus;
+	}
+
 	public Product setTostandard(Date tostandard) {
 		this.tostandard = tostandard;
 		return this;
 	}
+
+	public ProductDetail getProductDetail() {
+		return productDetail;
+	}
+
+	public void setProductDetail(ProductDetail productDetail) {
+		this.productDetail = productDetail;
+	}
 }

+ 245 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/model/ProductDetail.java

@@ -0,0 +1,245 @@
+package com.uas.platform.b2c.prod.commodity.model;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * 物料交易信息,主要针对ERP使用
+ *
+ * @version 2017/10/28 10:48 wangyc
+ */
+@Entity
+@Table(name = "products_detail_erp")
+public class ProductDetail implements Serializable{
+
+    private static final long serialVersionUID = 6044581872012738780L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "prd_id")
+    private Long id;
+
+    /**
+     * 物料编号
+     */
+    @Column(name = "prd_code")
+    private String code;
+
+    /**
+     * 物料id
+     */
+    @Column(name = "prd_productid")
+    private Long productId;
+
+    /**
+     * 空闲库存
+     */
+    @Column(name = "prd_reserve")
+    private Double reserve;
+
+    /**
+     * 产品生产日期
+     */
+    @Column(name = "prd_manufacturedate")
+    private String produceDate;
+
+    /**
+     * 最小包装量
+     */
+    @Column(name = "prd_minpackqty")
+    private Double minPackQty;
+
+    /**
+     * 最小起订量
+     */
+    @Column(name = "prd_minbuyqty")
+    private Double minBuyQty;
+
+    /**
+     * 最长交期
+     */
+    @Column(name = "prd_maxdelivery")
+    private Short maxDelivery;
+
+    /**
+     * 最短交期
+     */
+    @Column(name = "prd_mindelivery")
+    private Short minDelivery;
+
+    /**
+     * 商城最长交期
+     */
+    @Column(name = "prd_b2cmaxdelivery")
+    private Short b2cMaxDelivery;
+
+    /**
+     * 商城最短交期
+     */
+    @Column(name = "prd_b2cmindelivery")
+    private Short b2cMinDelivery;
+
+    /**
+     * 包装:托盘、管装、卷带
+     */
+    @Column(name = "prd_packaging")
+    private String packaging;
+
+    /**
+     * 单价
+     */
+    @Column(name = "prd_price")
+    private Double price;
+
+    /**
+     * 是否拆卖
+     */
+    @Column(name = "go_isbreakup", columnDefinition = "TINYINT(1)")
+    private Boolean breakUp;
+
+    /**
+     * 商城已上架库存
+     */
+    @Column(name = "prd_b2creserve")
+    private Double b2cReserve;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public Long getProductId() {
+        return productId;
+    }
+
+    public void setProductId(Long productId) {
+        this.productId = productId;
+    }
+
+    public Double getReserve() {
+        return reserve;
+    }
+
+    public void setReserve(Double reserve) {
+        this.reserve = reserve;
+    }
+
+    public String getProduceDate() {
+        return produceDate;
+    }
+
+    public void setProduceDate(String produceDate) {
+        this.produceDate = produceDate;
+    }
+
+    public Double getMinPackQty() {
+        return minPackQty;
+    }
+
+    public void setMinPackQty(Double minPackQty) {
+        this.minPackQty = minPackQty;
+    }
+
+    public Double getMinBuyQty() {
+        return minBuyQty;
+    }
+
+    public void setMinBuyQty(Double minBuyQty) {
+        this.minBuyQty = minBuyQty;
+    }
+
+    public Short getMaxDelivery() {
+        return maxDelivery;
+    }
+
+    public void setMaxDelivery(Short maxDelivery) {
+        this.maxDelivery = maxDelivery;
+    }
+
+    public Short getMinDelivery() {
+        return minDelivery;
+    }
+
+    public void setMinDelivery(Short minDelivery) {
+        this.minDelivery = minDelivery;
+    }
+
+    public Short getB2cMaxDelivery() {
+        return b2cMaxDelivery;
+    }
+
+    public void setB2cMaxDelivery(Short b2cMaxDelivery) {
+        this.b2cMaxDelivery = b2cMaxDelivery;
+    }
+
+    public Short getB2cMinDelivery() {
+        return b2cMinDelivery;
+    }
+
+    public void setB2cMinDelivery(Short b2cMinDelivery) {
+        this.b2cMinDelivery = b2cMinDelivery;
+    }
+
+    public String getPackaging() {
+        return packaging;
+    }
+
+    public void setPackaging(String packaging) {
+        this.packaging = packaging;
+    }
+
+    public Double getPrice() {
+        return price;
+    }
+
+    public void setPrice(Double price) {
+        this.price = price;
+    }
+
+    public Boolean getBreakUp() {
+        return breakUp;
+    }
+
+    public void setBreakUp(Boolean breakUp) {
+        this.breakUp = breakUp;
+    }
+
+    public Double getB2cReserve() {
+        return b2cReserve;
+    }
+
+    public void setB2cReserve(Double b2cReserve) {
+        this.b2cReserve = b2cReserve;
+    }
+
+    public ProductDetail() {
+
+    }
+
+    public ProductDetail convertFromGoods(Goods goods, Product product) {
+        this.code = product.getProdNum();
+        this.productId = product.getId();
+        this.produceDate = goods.getProduceDate();
+        this.minPackQty = goods.getMinPackQty();
+        this.minBuyQty = goods.getMinBuyQty();
+        this.maxDelivery = goods.getMaxDelivery();
+        this.minDelivery = goods.getMinDelivery();
+        this.b2cMaxDelivery = goods.getB2cMaxDelivery();
+        this.b2cMinDelivery = goods.getB2cMinDelivery();
+        this.packaging = goods.getPackaging();
+        this.price = goods.getMinPrice();
+        this.breakUp = goods.getBreakUp();
+        return this;
+    }
+}

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

@@ -133,6 +133,16 @@ public interface GoodsService {
      */
     Goods publish(Goods goods, String deviceInfo);
 
+    /**
+     * 发布(上架)商品
+     *
+     * @param goods      the goods 库存
+     * @param deviceInfo the device info 设备信息
+     * @param product  物料信息
+     * @return
+     */
+    Goods publish(Goods goods, String deviceInfo, Product  product);
+
     /**
      * 批量发布(上架)商品,
      *

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

@@ -1,6 +1,9 @@
 package com.uas.platform.b2c.prod.commodity.service;
 
+import com.alibaba.fastjson.JSONObject;
+import com.uas.platform.b2c.prod.commodity.model.Goods;
 import com.uas.platform.b2c.prod.commodity.model.Product;
+import com.uas.platform.b2c.prod.commodity.model.ProductDetail;
 import com.uas.platform.b2c.prod.commodity.model.ProductStandardPutOnInfo;
 import com.uas.platform.b2c.trade.order.model.Purchase;
 import com.uas.platform.b2c.trade.support.ResultMap;
@@ -116,4 +119,25 @@ public interface ProductService {
      * @return
      */
     List<Product> save(List<Product> products);
+
+    /**
+     * 通过product id获取物料交易详情
+     * @param id
+     * @return
+     */
+    ProductDetail findByProductId(Long id);
+
+    /**
+     * 验证物料申请是否为标准物料
+     * @return
+     */
+    ResultMap validitonStandard(JSONObject jsonObject);
+
+    /**
+     * 保存物料交易详情
+     * @param productId
+     * @param goods
+     * @return
+     */
+    ProductDetail saveDetail(Long productId, Goods goods);
 }

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

@@ -180,6 +180,9 @@ public class GoodsServiceImpl implements GoodsService {
 	@Autowired
 	private OrderDetailService detailService;
 
+	@Autowired
+	private ProductDetailDao productDetailDao;
+
 	private final Logger logger = Logger.getLogger(getClass());
 
 	@Autowired
@@ -564,6 +567,24 @@ public class GoodsServiceImpl implements GoodsService {
 		return goods;
 	}
 
+	@Override
+	@Transactional
+	public Goods publish(Goods goods, String deviceInfo, Product product) {
+		ProductDetail productDetail = productDetailDao.findByProductId(product.getId());
+		if (productDetail == null) {
+			productDetail = new ProductDetail();
+		} else if (productDetail.getReserve() != null) {
+			ProductDetail newProductDetail = productService.findByProductId(product.getId());
+			if (productDetail.getReserve() < goods.getReserve() + newProductDetail.getB2cReserve()) {
+				throw new IllegalOperatorException("本次上架数量和已上架数量之和不可超过ERP空闲库存数量");
+			}
+		}
+		productDetail.convertFromGoods(goods, product);
+		productDetailDao.save(productDetail);
+		Goods saveGoods = publish(goods, deviceInfo);
+		return goods;
+	}
+
 	@Override
 	@Transactional
 	public List<Goods> publish(List<Goods> goodses, String deviceInfo) {

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

@@ -3,6 +3,7 @@ package com.uas.platform.b2c.prod.commodity.service.impl;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2c.advertise.ad.service.RecommendProductService;
+import com.uas.platform.b2c.common.account.service.EnterpriseService;
 import com.uas.platform.b2c.core.constant.IntegerConstant;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
@@ -15,7 +16,11 @@ import com.uas.platform.b2c.prod.commodity.type.ProductConstant;
 import com.uas.platform.b2c.prod.product.brand.dao.BrandDao;
 import com.uas.platform.b2c.prod.product.brand.modal.Brand;
 import com.uas.platform.b2c.prod.product.component.dao.ComponentDao;
+import com.uas.platform.b2c.prod.product.component.dao.ComponentSubmitDao;
 import com.uas.platform.b2c.prod.product.component.modal.Component;
+import com.uas.platform.b2c.prod.product.component.modal.ComponentSubmit;
+import com.uas.platform.b2c.prod.product.kind.model.Kind;
+import com.uas.platform.b2c.trade.order.dao.OrderDetailDao;
 import com.uas.platform.b2c.trade.order.model.Order;
 import com.uas.platform.b2c.trade.order.model.Purchase;
 import com.uas.platform.b2c.trade.order.model.PurchaseDetail;
@@ -25,6 +30,7 @@ import com.uas.platform.b2c.trade.presale.service.CartService;
 import com.uas.platform.b2c.trade.support.CodeType;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.exception.IllegalOperatorException;
+import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.model.Type;
@@ -37,6 +43,7 @@ import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.dao.DataAccessException;
 import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.jdbc.core.CallableStatementCallback;
@@ -110,6 +117,18 @@ public class ProductServiceImpl implements ProductService {
     @Autowired
     private OrderService orderService;
 
+    @Autowired
+    private ProductDetailDao productDetailDao;
+
+    @Autowired
+    private OrderDetailDao orderDetailDao;
+
+    @Autowired
+    private ComponentSubmitDao componentSubmitDao;
+
+    @Autowired
+    private EnterpriseService enterpriseService;
+
     private ConcurrentHashMap<String, Field> sortFields = new ConcurrentHashMap<String, Field>();
 
     @Override
@@ -136,7 +155,7 @@ public class ProductServiceImpl implements ProductService {
         }
 
         if (StringUtils.hasText(keyword)) {
-            SimpleExpression code = PredicateUtils.like("kind", keyword, true);
+            SimpleExpression code = PredicateUtils.like("prodNum", keyword, true);
             SimpleExpression brandEn = PredicateUtils.like("pbranden", keyword, true);
             SimpleExpression cmpCode = PredicateUtils.like("pcmpcode", keyword, true);
             SimpleExpression[] expressions2 = new SimpleExpression[]{code, brandEn, cmpCode};
@@ -144,13 +163,24 @@ public class ProductServiceImpl implements ProductService {
             page.expression(logicalExpression2);
         }
 
-        return productDao.findAll(new Specification<Product>() {
+        Page<Product> productPage = productDao.findAll(new Specification<Product>() {
             @Override
             public Predicate toPredicate(Root<Product> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                 query.where(page.getPredicates(root, query, cb));
                 return null;
             }
         }, page);
+        List<Product> productList = productPage.getContent();
+        for (Product product : productList) {
+            if ("ERP".equals(product.getSourceApp())) {
+                ProductDetail productDetail = productDetailDao.findByProductId(product.getId());
+                if (productDetail != null) {
+                    product.setProductDetail(productDetail);
+                }
+            }
+        }
+
+        return new PageImpl<Product>(productList, page, productPage.getTotalElements());
     }
 
     @Override
@@ -278,7 +308,13 @@ public class ProductServiceImpl implements ProductService {
         if (CollectionUtils.isEmpty(components))
             throw new IllegalOperatorException("匹配失败,商城暂无该型号信息,可前往“器件申请”,提出申请");
         product.setCmpUuId(components.get(0).getUuid());
-
+        product.setPbrand(brands.get(0).getNameCn());
+        product.setPbranden(brands.get(0).getNameEn());
+        product.setPbranduuid(brands.get(0).getUuid());
+        product.setKind(components.get(0).getKind().getNameCn());
+        product.setPcmpcode(components.get(0).getCode());
+        product.setB2cDownStatus(com.uas.platform.b2c.core.constant.Status.NOT_UPLOAD.value());
+        product.setStandard((int) Constant.YES);
         return productDao.save(product);
     }
 
@@ -590,5 +626,98 @@ public class ProductServiceImpl implements ProductService {
     public List<Product> save(List<Product> products) {
         return productDao.save(products);
     }
+
+    @Override
+    public ProductDetail findByProductId(Long id) {
+        Product product = productDao.findOne(id);
+        if (product == null) {
+            throw new IllegalOperatorException("此产品不存在,请重新确认产品信息");
+        }
+        ProductDetail productDetail = productDetailDao.findByProductId(id);
+        if (productDetail != null) {
+            Double b2cReserve = 0d;
+            if (product.getCmpUuId() != null) {// 获取当前商城已上架数量(含锁库存)
+                b2cReserve = goodsDao.getSumReserveByEnUUAndUuidAndStatus(SystemSession.getUser().getEnterprise().getUu(), product.getCmpUuId(), Status.AVAILABLE.value());
+                Double lockReserve = orderDetailDao.getSumReserveBySupEnUuAndUuidAndStatus(SystemSession.getUser().getEnterprise().getUu(), product.getCmpUuId(), Status.TOBEPAID.value());
+                b2cReserve = (b2cReserve == null ? 0d : b2cReserve) + (lockReserve == null ? 0d :lockReserve);
+            }
+            productDetail.setB2cReserve(b2cReserve);
+        }
+
+        return productDetail;
+    }
+
+    @Override
+    public ResultMap validitonStandard(JSONObject jsonObject) {
+        Component component = (Component)jsonObject.get("component");
+        if (component == null || component.getCode() == null)
+            throw new IllegalOperatorException("请填写器件原厂型号");
+        Brand brand = (Brand)jsonObject.get("brand");
+        if (brand == null || brand.getNameEn() == null)
+            throw new IllegalOperatorException("请填写品牌英文名");
+        List<Brand> brands = brandDao.findByNameEn(brand.getNameEn());
+        if (CollectionUtils.isEmpty(brands))
+            throw new IllegalOperatorException(("商城不存在:" + brand.getNameEn() + " 品牌,请选择商城品牌或申请该品牌"));
+        List<Component> componentMatched = componentDao.findByCodeAndBrandid(component.getCode(), brands.get(0).getId());
+        if (CollectionUtils.isEmpty(componentMatched)) {// 提交申请为非标准器件则转成器件申请
+            Kind kind = (Kind)jsonObject.get("kind");
+            if (kind == null || kind.getId() == null)
+                throw new IllegalOperatorException("请选择商城类目");
+            String attach = jsonObject.getString("attach");
+            if (attach == null)
+                throw new IllegalOperatorException("请上传规格书");
+            ComponentSubmit submit = new ComponentSubmit();
+            submit.setAttach(attach);
+            submit.setBrandid(brands.get(0).getId());
+            submit.setCode(component.getCode());
+            submit.setDefineentuu(SystemSession.getUser().getEnterprise().getUu());
+            submit.setDefineuu(SystemSession.getUser().getUserUU());
+            submit.setDefinetime(new Date());
+            submit.setIsUpdate(0);
+            submit.setKindid(kind.getId());
+            componentSubmitDao.save(submit);
+
+            return ResultMap.success("提交申请成功,请等待审核结果");
+        } else {
+            return ResultMap.success("已存在此器件");
+        }
+    }
+
+    @Override
+    public ProductDetail saveDetail(Long productId, Goods goods) {
+        Product product = productDao.findOne(productId);
+        if (product == null)
+            throw new IllegalOperatorException("此物料信息不存在,请重新确认");
+        ProductDetail productDetail = productDetailDao.findByProductId(productId);
+        if (productDetail == null)
+            productDetail = new ProductDetail();
+
+        productDetail.setBreakUp(goods.getBreakUp());
+        productDetail.setProduceDate(goods.getProduceDate());
+        productDetail.setProductId(productId);
+        productDetail.setCode(goods.getCode());
+        productDetail.setB2cMaxDelivery(goods.getB2cMaxDelivery());
+        productDetail.setB2cMinDelivery(goods.getB2cMinDelivery());
+        productDetail.setMaxDelivery(goods.getMaxDelivery());
+        productDetail.setMinBuyQty(goods.getMinBuyQty());
+        productDetail.setMinDelivery(goods.getMinDelivery());
+        productDetail.setMinPackQty(goods.getMinPackQty());
+        productDetail.setPackaging(goods.getPackaging());
+
+        if (enterpriseService.getCurrencyByRegisterAddress().getData() == null)
+            throw new IllegalOperatorException("注册地址为空,无法确认币别信息,请前往-优软云补充注册地址信息");
+        String currency = enterpriseService.getCurrencyByRegisterAddress().getData().toString();
+        List<GoodsQtyPrice> qtyPrice = FastjsonUtils.fromJsonArray(goods.getQtyPrice(), GoodsQtyPrice.class);
+        if (!CollectionUtils.isEmpty(qtyPrice)) {
+            if ("RMB".equals(currency)) {
+                productDetail.setPrice(qtyPrice.get(0).getRMBPrice());
+            }
+            if ("USD".equals(currency)) {
+                productDetail.setPrice(qtyPrice.get(0).getUSDPrice());
+            }
+        }
+
+        return productDetailDao.save(productDetail);
+    }
 }
 

+ 30 - 1
src/main/java/com/uas/platform/b2c/prod/product/brand/controller/BrandSubmitController.java

@@ -8,13 +8,16 @@ import com.uas.platform.b2c.external.erp.product.service.OperationInfoService;
 import com.uas.platform.b2c.prod.product.brand.modal.Brand;
 import com.uas.platform.b2c.prod.product.brand.modal.BrandSubmit;
 import com.uas.platform.b2c.prod.product.brand.service.BrandSubmitService;
+import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.model.ServiceCode;
 import com.uas.platform.core.model.Status;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DataIntegrityViolationException;
 import org.springframework.data.domain.Page;
+import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
 
 /**
@@ -170,6 +173,32 @@ public class BrandSubmitController {
 	public Brand audituUpdate(@RequestBody String json) {
 		BrandSubmit brandSubmit = FastjsonUtils.fromJson(json, BrandSubmit.class);
 		logger.log("品牌维护", "审核通过冲突品牌申请", "审核通过与现版本信息冲突的品牌申请", brandSubmit.getNameCn(), brandSubmit.getId());
-		return brandSubmitService.audituUpdate(brandSubmit);
+		try {
+			Brand brand = brandSubmitService.audituUpdate(brandSubmit);
+			return brand;
+		} catch (DataIntegrityViolationException e) {
+			throw new IllegalOperatorException("品牌已存在,请重新确认品牌信息");
+		}
+	}
+
+	/**
+	 * 通过非标物料申请品牌
+	 * @param json
+	 * @return
+	 */
+	@RequestMapping(value = "/fromunstandard", method = RequestMethod.POST)
+	public ModelMap saveFromUnstandard(@RequestBody String json) {
+		ModelMap map = new ModelMap();
+		logger.log("品牌维护", "通过非标器件申请品牌", "通过非标器件申请品牌");
+		String brandSubmit = brandSubmitService.saveFromUnstandard(json);
+		if (brandSubmit == null) {
+			map.put("code", 400);
+			map.put("message", "商城已存在相同品牌");
+		} else {
+			map.put("code", 200);
+			map.put("message", "品牌申请提交成功,请等待审核");
+			map.put("brandsubmit", brandSubmit);
+		}
+		return map;
 	}
 }

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

@@ -26,7 +26,7 @@ public class Brand implements Serializable {
 	 */
 	@Id
 	@Column(name = "br_id")
-	@GeneratedValue
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
 	private Long id;
 
 	/**

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

@@ -1,10 +1,9 @@
 package com.uas.platform.b2c.prod.product.brand.service;
 
-import org.springframework.data.domain.Page;
-
 import com.uas.platform.b2c.prod.product.brand.modal.Brand;
 import com.uas.platform.b2c.prod.product.brand.modal.BrandSubmit;
 import com.uas.platform.core.model.PageInfo;
+import org.springframework.data.domain.Page;
 
 public interface BrandSubmitService {
 
@@ -64,4 +63,11 @@ public interface BrandSubmitService {
 	 */
 	public Brand audituUpdate(BrandSubmit brandSubmit);
 
+	/**
+	 * 通过非标物料申请品牌
+	 * @param json
+	 * @return
+	 */
+	public String saveFromUnstandard(String json);
+
 }

+ 47 - 1
src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/BrandSubmitServiceImpl.java

@@ -1,6 +1,8 @@
 package com.uas.platform.b2c.prod.product.brand.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.core.utils.FastjsonUtils;
 import com.uas.platform.b2c.external.erp.product.service.OperationInfoService;
 import com.uas.platform.b2c.prod.product.brand.dao.BrandDao;
 import com.uas.platform.b2c.prod.product.brand.dao.BrandSubmitDao;
@@ -321,7 +323,7 @@ public class BrandSubmitServiceImpl implements BrandSubmitService {
 			// "user#/home/brandMaintenance", "品牌维护");
 		} else if (brandSubmit.getTel() != null) {
 			// 发送短信
-			// UserBaseInfo userBaseInfo =
+			// UserBaseInfoUas userBaseInfo =
 			// userBaseInfoDao.findOne(brandSubmit.getModifyuu());
 			// sendMessageService.sendMessage("您提交的" + brandSubmit.getNameCn() +
 			// "品牌申请已审核通过。", brandSubmit.getTel(),
@@ -331,4 +333,48 @@ public class BrandSubmitServiceImpl implements BrandSubmitService {
 		return brandVersionService.saveBrandVersion(brandSubmit);
 	}
 
+	@Override
+	public String saveFromUnstandard(String json) {
+		JSONObject jsonObject = FastjsonUtils.parseObject(json);
+//		jsonObject.getObject();
+		String nameEn = jsonObject.getString("nameEn");
+		if (!StringUtils.hasText(nameEn)) {
+			throw new IllegalOperatorException("请填写品牌英文名");
+		}
+		String url = jsonObject.getString("url");
+		String brief = jsonObject.getString("brief");
+		String series = jsonObject.getString("series");
+		String logoUrl = jsonObject.getString("logoUrl");
+
+		List<Brand> brands = brandDao.findByNameEn(nameEn);
+		if (CollectionUtils.isNotEmpty(brands)) {
+			return brands.get(0).getNameEn();
+		} else {
+			if (!StringUtils.hasText(url)) {
+				throw new IllegalOperatorException("请填写品牌官网");
+			}
+			if (!StringUtils.hasText(brief)) {
+				throw new IllegalOperatorException("请填写品牌简介");
+			}
+			if (!StringUtils.hasText(series)) {
+				throw new IllegalOperatorException("请填写主要产品");
+			}
+			if (!StringUtils.hasText(logoUrl)) {
+				throw new IllegalOperatorException("请上传品牌图片");
+			}
+
+			BrandSubmit brandSubmit = new BrandSubmit();
+			brandSubmit.setIsUpdate(0);
+			brandSubmit.setDefineentuu(SystemSession.getUser().getEnterprise().getUu());
+			brandSubmit.setDefineuu(SystemSession.getUser().getUserUU());
+			brandSubmit.setBrief(brief);
+			brandSubmit.setLogoUrl(logoUrl);
+			brandSubmit.setNameEn(nameEn);
+			brandSubmit.setSeries(series);
+			brandSubmit.setUrl(url);
+			brandSubmitDao.save(brandSubmit);
+		}
+		return null;
+	}
+
 }

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

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

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

@@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -55,11 +56,22 @@ public class CommonCountController {
      * @return
      */
     @RequestMapping(value ="/{id}/count", method = RequestMethod.GET)
-    public Long findCountById(@PathVariable("id") Long id) {
+    public String findCountById(@PathVariable("id") Long id) {
         CommonCount commonCount = commonCountService.findById(id);
-        if(commonCount == null)
+        if(commonCount == null && commonCount.getCount() != null)
             throw new IllegalArgumentException("参数ID错误,数据不存在");
-        return commonCount.getCount();
+
+        String result = "";
+        Double countdb = commonCount.getCount();
+        if (countdb % 1.0 == 0) {
+            result = String.valueOf(countdb.longValue());
+        } else {
+            BigDecimal count = new BigDecimal(countdb);
+            BigDecimal dividenum = new BigDecimal(1);
+            result = count.divide(dividenum, 3, BigDecimal.ROUND_HALF_UP).toString();
+        }
+
+        return result;
     }
 
 }

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

@@ -46,7 +46,7 @@ public class CommonCount implements Serializable{
      * 数量
      */
     @Column(name = "cc_count")
-    private Long count;
+    private Double count;
 
     /**
      * 应用
@@ -92,11 +92,11 @@ public class CommonCount implements Serializable{
         this.sql = sql;
     }
 
-    public Long getCount() {
+    public Double getCount() {
         return count;
     }
 
-    public void setCount(Long count) {
+    public void setCount(Double count) {
         this.count = count;
     }
 

+ 6 - 0
src/main/java/com/uas/platform/b2c/prod/product/component/service/impl/ComponentSubmitServiceImpl.java

@@ -350,6 +350,8 @@ public class ComponentSubmitServiceImpl implements ComponentSubmitService {
 		Set<ComponentCrawlSubDetail> submitDetails = new HashSet<ComponentCrawlSubDetail>();
 		Sheet sheet = workbook.getSheetAt(0);
 		int rowNum = sheet.getLastRowNum();
+		if (rowNum > 10000)
+			throw new IllegalOperatorException("上传文件不可超过10000行");
 		Row headerRow = sheet.getRow(0);
 		if (headerRow.getCell(0) != null && headerRow.getCell(1) != null && headerRow.getCell(2) != null && headerRow.getCell(3) != null && headerRow.getCell(4) != null
 				&& headerRow.getCell(5) != null) {
@@ -534,6 +536,8 @@ public class ComponentSubmitServiceImpl implements ComponentSubmitService {
 		List<ComponentCrawl> components = new ArrayList<ComponentCrawl>();
 		Sheet sheet = workbook.getSheetAt(0);
 		int rowNum = sheet.getLastRowNum();
+		if (rowNum > 10000)
+			throw new IllegalOperatorException("上传文件不可超过10000行");
 		Row fourthRow = sheet.getRow(3);
 		if (fourthRow.getCell(1) != null && fourthRow.getCell(2) != null && fourthRow.getCell(3) != null && fourthRow.getCell(4) != null) {
 			// 商城类目
@@ -722,6 +726,8 @@ public class ComponentSubmitServiceImpl implements ComponentSubmitService {
 		List<ComponentCrawl> components = new ArrayList<ComponentCrawl>();
 		Sheet sheet = workbook.getSheetAt(0);
 		int rowNum = sheet.getLastRowNum();
+		if (rowNum > 10000)
+			throw new IllegalOperatorException("上传文件不可超过10000行");
 		Date date = new Date();
 		
 		KindCrawl kindCrawl = kindContrastDao.findOne(kindContrastId);

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

@@ -8,9 +8,11 @@ import com.uas.platform.b2c.common.account.service.VendorService;
 import com.uas.platform.b2c.core.constant.SplitChar;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
+import com.uas.platform.b2c.core.support.view.JxlsExcelView;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
 import com.uas.platform.b2c.core.utils.StringUtilB2C;
 import com.uas.platform.b2c.fa.payment.model.BankTransfer;
+import com.uas.platform.b2c.prod.commodity.model.ProductStandardPutOnInfo;
 import com.uas.platform.b2c.trade.inquiry.model.TradeCharge;
 import com.uas.platform.b2c.trade.order.model.Order;
 import com.uas.platform.b2c.trade.order.model.OrderDetail;
@@ -28,13 +30,13 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
 
 import javax.management.OperationsException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
@@ -903,6 +905,57 @@ public class OrderController {
 		return orderService.getBuyPayRecord(params);
 	}
 
+	/**
+	 * 分页获取买家支付记录,暂时从订单中直接获取
+	 * 判断条件--存在支付时间
+	 *
+	 * @param params
+	 * @param keyword
+	 * @param fromDate
+	 * @param toDate
+	 * @return
+	 */
+	@RequestMapping(value = "buyer/payRecord")
+	public Page<OrderSimpleInfo> findBuyerPayRecord(PageParams params, String keyword, Long fromDate,
+													Long toDate, String currencyName, Integer method){
+		return orderService.getBuyerPayRecord(params, keyword, fromDate, toDate, currencyName, method);
+	}
+
+	/**
+	 * 导出支付记录到excel表中
+	 * @param isAjax
+	 * @param request
+	 * @param keyword
+	 * @param fromDate
+	 * @param toDate
+	 * @param currencyName
+	 * @param method
+	 * @return
+	 */
+	@RequestMapping(value = "/export/payRecord", method = RequestMethod.POST)
+	public ModelAndView exportPayRecordToExcel(@RequestParam(required = false, value = "isAjax", defaultValue = "false")Boolean isAjax, HttpServletRequest request,
+											   String keyword, Long fromDate, Long toDate, String currencyName, Integer method){
+		HttpSession session = request.getSession();
+		ModelAndView modelAndView = new ModelAndView();
+		Object loading = session.getAttribute("loading");
+		if(isAjax) {
+			MappingJackson2JsonView view = new MappingJackson2JsonView();
+			Map<String, Boolean> attributes = new HashMap<>();
+			Boolean isLoading= loading == Boolean.TRUE;
+			attributes.put("loading", isLoading);
+			view.setAttributesMap(attributes);
+			modelAndView.setView(view);
+			return modelAndView;
+		}
+		session.setAttribute("loading", true);
+		List<OrderSimpleInfo> data = orderService.getExportData(keyword, fromDate, toDate, currencyName, method);
+		modelAndView.addObject("data", data);
+		modelAndView.addObject("operator", "-");
+		modelAndView.setView(new JxlsExcelView("classpath:jxls-tpl/trade/payRecord", "优软商城-买家交易记录"));
+		session.setAttribute("loading", false);
+		return modelAndView;
+	}
+
 	/**
 	 * 根据订单号获取Order对象
 	 *

+ 3 - 0
src/main/java/com/uas/platform/b2c/trade/order/dao/OrderDetailDao.java

@@ -42,4 +42,7 @@ public interface OrderDetailDao extends JpaSpecificationExecutor<OrderDetail>, J
 	 */
 	@Query(value = "select d from OrderDetail d where d.batchCode =:batchCode and d.status =:status")
 	List<OrderDetail> findByBatchCodeAndStatus(@Param("batchCode") String batchCode, @Param("status") Integer status);
+
+	@Query(value = "select sum(detail_number) from trade$order_detail where detail_sup_en_uu=:enuu and cmp_uuid=:uuid and detail_status=:status", nativeQuery = true)
+	Double getSumReserveBySupEnUuAndUuidAndStatus(@Param("enuu") Long enuu, @Param("uuid") String uuid, @Param("status") Integer status);
 }

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

@@ -260,6 +260,12 @@ public class Order extends Document implements Serializable {
 	@StatusColumn
 	private Integer status;
 
+	/**
+	 * uas获取状态 待上传 (202) | 已下载 (203)
+	 */
+	@Column(name = "or_sendstatus")
+	private Integer sendstatus;
+
 	/**
 	 * 评论状态
 	 */
@@ -483,6 +489,14 @@ public class Order extends Document implements Serializable {
 	@Transient
 	private Map<String, AfterSaleStatus> puExInfoMap;
 
+	public Integer getSendstatus() {
+		return sendstatus;
+	}
+
+	public void setSendstatus(Integer sendstatus) {
+		this.sendstatus = sendstatus;
+	}
+
 	/**
 	 * 退货单单号
 	 */

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

@@ -1,6 +1,7 @@
 package com.uas.platform.b2c.trade.order.model;
 
 import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.uas.api.b2c_erp.buyer.model.PurchaseDetail;
 import com.uas.platform.b2c.core.utils.NumberUtil;
 import com.uas.platform.b2c.logistics.model.InvoiceFOrderDetail;
@@ -13,7 +14,6 @@ import com.uas.platform.core.model.EncodingRulesConstant;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.persistence.StatusColumn;
 import org.apache.commons.collections.CollectionUtils;
-import org.codehaus.jackson.annotate.JsonIgnore;
 
 import javax.persistence.CascadeType;
 import javax.persistence.Column;

+ 24 - 0
src/main/java/com/uas/platform/b2c/trade/order/model/OrderSimpleInfo.java

@@ -1,6 +1,7 @@
 package com.uas.platform.b2c.trade.order.model;
 
 import java.io.Serializable;
+import java.text.SimpleDateFormat;
 import java.util.Date;
 
 /**
@@ -11,6 +12,8 @@ import java.util.Date;
  */
 public class OrderSimpleInfo extends Document implements Serializable {
 
+	private final static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
 	/**
 	 * 
 	 */
@@ -74,6 +77,11 @@ public class OrderSimpleInfo extends Document implements Serializable {
 	 */
 	private String currencyName;
 
+	/**
+	 * 卖方企业名称
+	 */
+	private String sellername;
+
 	/**
 	 * 价格,存储的为元
 	 */
@@ -287,6 +295,14 @@ public class OrderSimpleInfo extends Document implements Serializable {
 		this.type = type;
 	}
 
+	public String getSellername() {
+		return sellername;
+	}
+
+	public void setSellername(String sellername) {
+		this.sellername = sellername;
+	}
+
 	/**
 	 * Gets paytype.
 	 *
@@ -346,6 +362,7 @@ public class OrderSimpleInfo extends Document implements Serializable {
 		this.price = order.getPrice();
 		this.ensurePrice = order.getEnsurePrice();
 		this.paytype = order.getPaytype();
+		this.sellername = order.getSellername();
 	}
 
 	@Override
@@ -354,5 +371,12 @@ public class OrderSimpleInfo extends Document implements Serializable {
 				+ ", status=" + status + ", price=" + price + ", type=" + type + "]";
 	}
 
+	/**
+	 * 格式化付款时间
+	 * @return
+	 */
+	public String formatTime(){
+		return sdf.format(paytime);
+	}
 	
 }

+ 84 - 0
src/main/java/com/uas/platform/b2c/trade/order/model/PayRecord.java

@@ -0,0 +1,84 @@
+package com.uas.platform.b2c.trade.order.model;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 付款记录类
+ *
+ * @author hulh 2017年10月25日
+ */
+public class PayRecord implements Comparable<PayRecord>{
+
+	private static int counter = 0;
+
+	/**
+	 * 只是为了记录唯一标识
+	 */
+	private final static int id = counter++;
+
+	/**
+	 * 订单号
+	 */
+	private String orderId;
+
+	/**
+	 * 付款时间
+	 */
+	private Date payTime;
+
+	/**
+	 * 付款名称
+	 */
+	private String payName;
+
+	/**
+	 * 付款企业名称
+	 */
+	private String payEnName;
+
+	/**
+	 * 收款企业名称
+	 */
+	private String collectName;
+
+	/**
+	 * 币种 --RMB和USD
+	 */
+	private String currencyName;
+
+	/**
+	 * 支付类型
+	 * TODO 暂时只区分线上和线下
+	 */
+	private Integer payType;
+
+	/**
+	 * 涉及到的金额
+	 */
+	private Double price;
+
+	/**
+	 * 支出还是收入 0-支出,1-收入
+	 */
+	private Short isAdd;
+
+	/**
+	 * 相关的支付记录
+	 */
+	private List<PayRecord> relatedPay;
+
+	@Override
+	public int compareTo(PayRecord o) {
+		return payTime.getTime() > o.getPayTime().getTime() ? 1 :
+				payTime.getTime() == o.getPayTime().getTime() ? 0 : -1;
+	}
+
+	public Date getPayTime() {
+		return payTime;
+	}
+
+	public void setPayTime(Date payTime) {
+		this.payTime = payTime;
+	}
+}

+ 23 - 0
src/main/java/com/uas/platform/b2c/trade/order/service/OrderService.java

@@ -613,6 +613,29 @@ public interface OrderService {
 	 */
 	ResultMap getBuyPayRecord(PageParams params);
 
+	/**
+	 * 分页获取买家的支付记录
+	 * @param params
+	 * @param keyword
+	 * @param fromDate
+	 * @param toDate
+	 * @return
+	 */
+	Page<OrderSimpleInfo> getBuyerPayRecord(PageParams params, String keyword, Long fromDate, Long toDate,
+											String currencyName, Integer method);
+
+	/**
+	 * 获取导出的支付记录数据
+	 * @param keyword
+	 * @param fromDate
+	 * @param toDate
+	 * @param currencyName
+	 * @param method
+	 * @return
+	 */
+	List<OrderSimpleInfo> getExportData(String keyword, Long fromDate, Long toDate,
+										String currencyName, Integer method);
+
 	/**
 	 * 根据订单单号修改订单使用状态
 	 * @param orderid

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

@@ -1,6 +1,5 @@
 package com.uas.platform.b2c.trade.order.service.impl;
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.api.b2c_erp.buyer.model.B2cOrder;
@@ -105,7 +104,6 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
-import java.io.IOException;
 import java.util.*;
 
 import static com.uas.platform.b2c.trade.aftersale.model.AfterSaleStatus.*;
@@ -821,6 +819,7 @@ public class OrderServiceImpl implements OrderService {
             or.setOrderDetails(newOrderDetails);
             updateOrderBill(or);
             or.setOrderid(createNumberService.generateOrderNumber(EncodingRulesConstant.ORDER, "trade$order", 8));
+            or.setSendstatus(Status.NOT_UPLOAD.value());// 将订单设置为未下载状态,以便erp下载
             orders.add(or);
         }
         List<Order> orderList = orderDao.save(orders);
@@ -1095,7 +1094,7 @@ public class OrderServiceImpl implements OrderService {
         }
 
         Long uu = SystemSession.getUser().getUserUU();
-        order.setStatusToBePaid(uu);
+        order.setStatusToBePaid(uu);// 确认订单设置订单状态为待付款
         /**
          * @TODO 这里需要用定时器去检查,过期失效后要返还库存等
          */
@@ -1409,6 +1408,7 @@ public class OrderServiceImpl implements OrderService {
 
         // 设置为等待卖家同意
         order.setStatusMonecyReceviced(userUU);
+        order.setSendstatus(Status.NOT_UPLOAD.value());// 将订单设置为未下载状态,以便erp下载
         order.setPaytime(new Date());
         Order newOrder = orderDao.save(order);
 
@@ -3172,6 +3172,7 @@ public class OrderServiceImpl implements OrderService {
         for (Purchase purchase : purchases) {
             if (purchase.getStatus().intValue() == Status.PAID.value()) {
                 purchase.setStatusToBeConfirmed(sysConf.getAdminUU());
+                purchase.setSendstatus(Status.NOT_UPLOAD.value());// 将确认付款审核失败的采购单ERP下载状态置为待下载,以便ERP用于取消出货单
                 for (PurchaseDetail purchaseDetail : purchase.getPurchaseDetails()) {
                     if (purchaseDetail.getStatus().intValue() == Status.PAID.value()) {
                         purchaseDetail.setStatusToBeConfirmed(sysConf.getAdminUU());
@@ -3219,6 +3220,84 @@ public class OrderServiceImpl implements OrderService {
         return ResultMap.success(new PageImpl<OrderSimpleInfo>(list, info.getPageable(), orders.getTotalElements()));
     }
 
+    @Override
+    public Page<OrderSimpleInfo> getBuyerPayRecord(com.uas.platform.core.model.PageParams params, String keyword, Long fromDate, Long toDate,
+                                                   String currencyName, Integer method) {
+        final PageInfo info = new PageInfo(params);
+        filterPageInfo(info, keyword, fromDate, toDate, currencyName, method);
+
+        Page<Order> orderPage = orderDao.findAll(new Specification<Order>() {
+            @Override
+            public Predicate toPredicate(Root<Order> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                query.where(info.getPredicates(root, query, cb));
+                return null;
+            }
+        }, info);
+        List<OrderSimpleInfo> list = new ArrayList<>();
+        if(orderPage != null) {
+            for (Order order : orderPage.getContent()) {
+                list.add(new OrderSimpleInfo(order));
+            }
+        }
+        return new PageImpl<>(list, info.getPageable(), orderPage.getTotalElements());
+    }
+
+    @Override
+    public List<OrderSimpleInfo> getExportData(String keyword, Long fromDate, Long toDate, String currencyName, Integer method) {
+        final PageInfo info = new PageInfo();
+        filterPageInfo(info, keyword, fromDate, toDate, currencyName, method);
+        List<Order> orderList = orderDao.findAll(new Specification<Order>() {
+            @Override
+            public Predicate toPredicate(Root<Order> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
+                criteriaQuery.where(info.getPredicates(root, criteriaQuery, criteriaBuilder));
+                return null;
+            }
+        });
+        List<OrderSimpleInfo> list = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(orderList)){
+            for (Order order : orderList){
+                OrderSimpleInfo or = new OrderSimpleInfo(order);
+                list.add(or);
+            }
+        }
+
+        return list;
+    }
+
+    /**
+     * 设置分页过滤条件
+     */
+    private void filterPageInfo(PageInfo info, String keyword, Long fromDate, Long toDate,
+                               String currencyName, Integer method){
+
+        info.filter("buyeruu", SystemSession.getUser().getUserUU());
+        if (SystemSession.getUser().getEnterprise() != null) {
+            info.filter("buyerenuu", SystemSession.getUser().getEnterprise().getUu());
+        } else {
+            info.filter("dissociative", Type.PERSONAL.value());
+        }
+        info.expression(PredicateUtils.isNotNull("paytime"));
+        if (StringUtils.hasText(keyword)){
+            SimpleExpression[] simpArrs = new SimpleExpression[2];
+            simpArrs[0] = new SimpleExpression("orderid", keyword, Operator.LIKE, true);
+            simpArrs[1] = new SimpleExpression("sellername", keyword, Operator.LIKE, true);
+            LogicalExpression logical = new LogicalExpression(simpArrs, Operator.OR);
+            info.expression(logical);
+        }
+        if (fromDate != null) {
+            info.expression(PredicateUtils.gte("paytime", new Date(fromDate), false));
+        }
+        if (toDate != null) {
+            info.expression(PredicateUtils.lte("paytime", new Date(toDate), false));
+        }
+        if (currencyName != null){
+            info.expression(PredicateUtils.eq("currency", currencyName, false));
+        }
+        if (method != null){
+            info.expression(PredicateUtils.eq("paytype", method, false));
+        }
+    }
+
     /**
      * 根据订单号修改订单的使用状态
      * @param orderid

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

@@ -34,7 +34,9 @@ import com.uas.platform.b2c.prod.commodity.model.Goods;
 import com.uas.platform.b2c.prod.commodity.model.GoodsHistory;
 import com.uas.platform.b2c.prod.commodity.service.GoodsService;
 import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
+import com.uas.platform.b2c.prod.store.dao.StoreApplyDao;
 import com.uas.platform.b2c.prod.store.dao.StoreInDao;
+import com.uas.platform.b2c.prod.store.model.StoreApply;
 import com.uas.platform.b2c.prod.store.model.StoreIn;
 import com.uas.platform.b2c.trade.aftersale.model.AfterSaleStatus;
 import com.uas.platform.b2c.trade.order.dao.*;
@@ -137,6 +139,8 @@ public class PurchaseServiceImpl implements PurchaseService {
 	@Autowired
 	private StoreInDao storeInDao;
 	@Autowired
+	private StoreApplyDao storeApplyDao;
+	@Autowired
 	private UserDao userDao;
 	@Autowired
     private PurchaseModifyingHistoryDao purchaseModifyingHistoryDao;
@@ -461,7 +465,7 @@ public class PurchaseServiceImpl implements PurchaseService {
 			Goods goods = goodsDao.findByBatchCode(orderDetail.getBatchCode());
 			purchase.setUasPurcid(goods.getSourceId());
 		}
-		purchase.setSendstatus(Status.NOT_UPLOAD.value());
+//		purchase.setSendstatus(Status.NOT_UPLOAD.value());
 		// 生成采购单号
 		String purchaseid = createNumberService.generateOrderNumber(EncodingRulesConstant.PURCHASE, "trade$purchase", 8);
 		purchase.setPurchaseid(purchaseid);
@@ -1163,7 +1167,10 @@ public class PurchaseServiceImpl implements PurchaseService {
 		} else {
 			List<StoreIn> storeInfos = storeInDao.findByEnUU(uu);
 			if (CollectionUtils.isEmpty(storeInfos)) {
-				throw new IllegalOperatorException("您还没有开店铺,请先前往开店.");
+				if (CollectionUtils.isEmpty(storeApplyDao.findByEnUUAndStatusOrderByAuthTimeDesc(uu, StoreApply.ApplyStatus.PASS))){
+					throw new IllegalOperatorException("您还没有开店铺,请先前往开店.");
+				}
+				throw new IllegalOperatorException("请前往我的店铺,完善店铺信息。");
 			} else {
 				storeid = storeInfos.get(0).getUuid();
 			}

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

@@ -46,36 +46,45 @@ import java.util.*;
 @Service
 public class CartServiceImpl implements CartService {
 
-	private final CartDao cartDao;
-
-	private final GoodsService goodsService;
+	@Autowired
+	private CartDao cartDao;
 
-	private final ComponentService componentService;
+	@Autowired
+	private GoodsService goodsService;
 
-	private final ComponentDao componentDao;
+	@Autowired
+	private ComponentService componentService;
 
-	private final GoodsSimpleDao goodsSimpleDao;
+	@Autowired
+	private ComponentDao componentDao;
 
-	private final GoodsHistoryDao goodsHistoryDao;
+	@Autowired
+	private GoodsSimpleDao goodsSimpleDao;
 
-	private final StoreInDao storeInDao;
+	@Autowired
+	private GoodsHistoryDao goodsHistoryDao;
 
-	private final GoodsDao goodsDao;
+	@Autowired
+	private StoreInDao storeInDao;
 
-	private final EnterpriseDao enterpriseDao;
+	@Autowired
+	private GoodsDao goodsDao;
 
 	@Autowired
-	public CartServiceImpl(CartDao cartDao, GoodsService goodsService, ComponentService componentService, ComponentDao componentDao, GoodsSimpleDao goodsSimpleDao, GoodsHistoryDao goodsHistoryDao, StoreInDao storeInDao, GoodsDao goodsDao, EnterpriseDao enterpriseDao) {
-		this.cartDao = cartDao;
-		this.goodsService = goodsService;
-		this.componentService = componentService;
-		this.componentDao = componentDao;
-		this.goodsSimpleDao = goodsSimpleDao;
-		this.goodsHistoryDao = goodsHistoryDao;
-		this.storeInDao = storeInDao;
-		this.goodsDao = goodsDao;
-		this.enterpriseDao = enterpriseDao;
-	}
+	private EnterpriseDao enterpriseDao;
+
+//	@Autowired
+//	public CartServiceImpl(CartDao cartDao, GoodsService goodsService, ComponentService componentService, ComponentDao componentDao, GoodsSimpleDao goodsSimpleDao, GoodsHistoryDao goodsHistoryDao, StoreInDao storeInDao, GoodsDao goodsDao, EnterpriseDao enterpriseDao) {
+//		this.cartDao = cartDao;
+//		this.goodsService = goodsService;
+//		this.componentService = componentService;
+//		this.componentDao = componentDao;
+//		this.goodsSimpleDao = goodsSimpleDao;
+//		this.goodsHistoryDao = goodsHistoryDao;
+//		this.storeInDao = storeInDao;
+//		this.goodsDao = goodsDao;
+//		this.enterpriseDao = enterpriseDao;
+//	}
 
 	@Override
 	public List<Cart> findByUuAndEnuu() {

+ 6 - 1
src/main/java/com/uas/platform/b2c/trade/support/CodeType.java

@@ -53,7 +53,12 @@ public enum CodeType {
 	/**
 	 * 信息不一致
 	 */
-	INFO_UPDATE(11, "信息不一致");
+	INFO_UPDATE(11, "信息不一致"),
+
+	/**
+	 * 超时请求
+	 */
+	TIME_OUT(12, "TIME_OUT");
 
 	private int code;
 

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

@@ -9,7 +9,7 @@ sso.secretkey=0taQcW073Z7G628g5H
 sso.cookie.secure=false
 sso.login.url=http://113.105.74.135:8001/sso/login
 sso.logout.url=http://113.105.74.135:8001/sso/logout
-sso.register.url=http://113.105.74.135:8001/sso/register
+sso.register.url=http://113.105.74.135:8001/sso/register_p
 
 #cross domain
 sso.ask.url=http://113.105.74.135:8001/sso/login/ask

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

@@ -30,9 +30,9 @@ newsMicroServiceIp=news.usoftchina.com
 newsRedisRefresh=3600
 floorMicroServiceIp=10.10.101.23
 carouselMicroServiceIp=10.10.101.23
-storecmsMicroServiceIp=10.10.101.23
+storecmsMicroServiceIp=192.168.253.12
 endpointUri=10.10.101.23
-recommendPort=20102
+recommendPort=20100
 # upload file
 uploadFileUrl = http://10.10.100.200:9999
 # search file

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


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


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

@@ -9,7 +9,7 @@ sso.secretkey=0taQcW073Z7G628g5H
 sso.cookie.secure=false
 sso.login.url=http://113.105.74.135:8001/sso/login
 sso.logout.url=http://113.105.74.135:8001/sso/logout
-sso.register.url=http://113.105.74.135:8001/sso/register
+sso.register.url=http://113.105.74.135:8001/sso/register_p
 
 #cross domain
 sso.ask.url=http://113.105.74.135:8001/sso/login/ask

+ 42 - 1
src/main/webapp/WEB-INF/spring/hessian.xml

@@ -14,6 +14,28 @@
 	<bean id="apiHandlerInterceptor"
 		class="com.uas.platform.b2c.external.erp.support.HandlerInterceptorImpl" />
 
+	<!-- ERP物料接口 -->
+	<bean id="api.ProdService" class="com.uas.platform.b2c.external.erp.prod.service.impl.ProdServiceImpl" />
+
+	<bean name="/api/service/seller/prod" class="com.uas.api.crypto.hessian.PermittedServiceExporter">
+		<property name="secretKeyService" ref="apiSecretKeyService" />
+		<property name="handlerInterceptor" ref="apiHandlerInterceptor" />
+		<property name="service" ref="api.ProdService" />
+		<property name="serviceInterface"
+				  value="com.uas.api.b2c_erp.seller.service.ProdService" />
+	</bean>
+
+	<!-- ERP库存接口 -->
+	<bean id="api.ProductDetailERPService" class="com.uas.platform.b2c.external.erp.commodity.service.impl.ProductDetailERPServiceImpl" />
+
+	<bean name="/api/service/seller/productdetail" class="com.uas.api.crypto.hessian.PermittedServiceExporter">
+		<property name="secretKeyService" ref="apiSecretKeyService" />
+		<property name="handlerInterceptor" ref="apiHandlerInterceptor" />
+		<property name="service" ref="api.ProductDetailERPService" />
+		<property name="serviceInterface"
+				  value="com.uas.api.b2c_erp.seller.service.ProductDetailERPService" />
+	</bean>
+
 	<!-- 卖家收到的采购订单接口 -->
 	<bean id="api.OrderService" class="com.uas.platform.b2c.external.erp.order.service.impl.OrderServiceImpl" />
 
@@ -171,5 +193,24 @@
 		<property name="serviceInterface"
 			value="com.uas.api.b2c_erp.operation.service.OperationInfoUasService"/>
 	</bean>
-	
+
+	<!-- 采购单操作信息 -->
+	<bean id="api.B2cOrderServive" class="com.uas.platform.b2c.external.erp.order.service.impl.B2cOrderServiceImpl"></bean>
+	<bean name="/api/service/b2cOrder" class="com.uas.api.crypto.hessian.PermittedServiceExporter">
+		<property name="secretKeyService" ref="apiSecretKeyService" />
+		<property name="handlerInterceptor" ref="apiHandlerInterceptor" />
+		<property name="service" ref="api.B2cOrderServive"/>
+		<property name="serviceInterface"
+				  value="com.uas.api.b2c_erp.buyer.service.B2cOrderService"/>
+	</bean>
+
+	<!-- 卖家收款账户操作信息 -->
+	<bean id="api.BankInfoService" class="com.uas.platform.b2c.external.erp.commodity.service.impl.BankInfoServiceImpl"></bean>
+	<bean name="/api/service/bankInfo" class="com.uas.api.crypto.hessian.PermittedServiceExporter">
+		<property name="secretKeyService" ref="apiSecretKeyService" />
+		<property name="handlerInterceptor" ref="apiHandlerInterceptor" />
+		<property name="service" ref="api.BankInfoService"/>
+		<property name="serviceInterface"
+				  value="com.uas.api.b2c_erp.seller.service.BankInfoService"/>
+	</bean>
 </beans>

+ 4 - 1
src/main/webapp/WEB-INF/spring/webmvc.xml

@@ -58,7 +58,7 @@
 		<property name="normalPrefix" value="normal/" />
 		<property name="mobilePrefix" value="mobile/" />
 		<property name="tabletPrefix" value="tablet/" />
-	</bean>
+</bean>
 
 	<mvc:view-controller path="/" view-name="index" />
 	<mvc:view-controller path="/index" view-name="index" />
@@ -83,6 +83,9 @@
 	<mvc:view-controller path="/login/proxy" view-name="proxyLogin" />
 	<mvc:view-controller path="/logout/proxy" view-name="proxyLogout" />
 	<mvc:view-controller path="/order/proxy" view-name="proxyOrder" />
+	<!-- erp对接页面 -->
+	<mvc:view-controller path="/user_erp" view-name="erp/user_center" />
+	<mvc:view-controller path="/vendor_erp" view-name="erp/vendor_center" />
 
 	<mvc:interceptors>
 		<!-- SSO过滤 -->

+ 3 - 1
src/main/webapp/WEB-INF/views/normal/adminWithNav.html

@@ -146,7 +146,7 @@
 			<li class="nav-node"><a href="#product/componentCrawl/upload"><i
 				class="fa fa-upload"></i><span> 器件数据上传</span></a></li>
 			<li class="nav-node"><a href="#audit/bankinfo"><i class="fa fa-bank"></i><span> 银行账户信息</span></a></li>
-
+			<li class="nav-node"><a href="#audit/realAuth"><i class="glyphicon glyphicon-user"></i><span> 实名认证审核</span></a></li>
 			<li class="nav-header">维护</li>
 			<li class="nav-node"><a href="#/brand/map"><i
 					class="fa fa-flag"></i><span> 品牌映射维护</span></a></li>
@@ -166,6 +166,8 @@
 					class="fa fa-flag"></i><span> 批量修改器件类目</span></a></li>
 			<li class="nav-node"><a href="#/kindAdvice"><i
 					class="fa fa-flag"></i><span> 用户类目维护建议</span></a></li>
+			<li class="nav-node"><a href="#/secQuestion"><i
+					class="fa fa-flag"></i><span> 密保问题维护</span></a></li>
 			<li class="nav-node"><a href="#/keyWord"><i
 					class="fa fa-flag"></i><span> 非法关键词维护</span></a></li>
 			<li class="nav-node"><a href="#/logUsage"><i

+ 65 - 3
src/main/webapp/WEB-INF/views/normal/default/404.html

@@ -1,10 +1,72 @@
 <!DOCTYPE HTML>
 <html lang="zh-CN">
 <head>
-<meta charset="utf-8">
-<title>找不到页面</title>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+	<meta name="renderer" content="webkit">
+	<title>404-优软商城</title>
+	<meta name="description" content="404" />
+	<meta name="keywords"
+		  content="优软商城,B2B,B2C,行业门户,网上贸易,电子商务,网上贸易,网上交易,交易市场,在线交易,供求信息,采购,求购信息,供应信息" />
+	<link href="static/img/all/u.png" rel="icon" type="image/x-icon" />
+	<link rel="stylesheet" href="static/lib/bootstrap/css/bootstrap.min.css" />
+	<link rel="stylesheet" href="static/lib/angular/ng-table.css" />
+	<link rel="stylesheet" href="static/lib/fontawesome/css/font-awesome.min.css" />
+	<link rel="stylesheet" href="static/lib/iconfont/css/iconfont.css" />
+	<link rel="stylesheet" href="static/lib/jquery/themes/summernote/css/summernote.css" />
+	<link rel="stylesheet" href="static/lib/jquery/themes/uploadify/uploadify.css" />
+	<link rel="stylesheet" href="static/css/vendor/base.css" />
+	<style>
+		.section{
+			background: #ebfdff url('static/img/user/images/404.png')no-repeat center center;
+			height:978px;
+			margin-top:-65px;
+			position:relative;
+		}
+		.section .btn-click{
+			position:absolute;
+			top:54%;
+			left:50%;
+			margin-left:-150px;
+		}
+		.section .btn-click a{
+			display:inline-block;
+			width:130px;
+			height:33px;
+			font-size: 16px;
+			line-height: 33px;
+			color:#fff;
+			background: #f87c29;
+			text-align: center;
+			margin:0 10px;
+			border-radius: 2px;
+			text-decoration: none;
+		}
+	</style>
 </head>
 <body>
-	很遗憾,找不到您请求的页面!
+	<div class="head-top">
+		<div class="container">
+			<div class="wrap">
+				<div class="head-top-left fl"><img src="static/img/user/images/head_top_logo.png" /><a href="http://www.ubtob.com/">进入优软云</a> </div>
+				<div class="head-top-right fr">
+					<a href="/platform-b2c/vendor#/index">卖家中心</a>
+					<a href="/platform-b2c/user#/home">买家中心</a>
+					<a href="#">加入收藏</a>
+					<a href="/platform-b2c/help#/home" target="_blank">帮助中心</a>
+					<a href="http://wpa.qq.com/msgrd?v=3&uin=3432892085&site=www.ubtoc.com&menu=yes">在线客服</a>
+					<span>服务电话:800-830-1818</span>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="section">
+		<div class="container">
+			<div class="btn-click">
+				<a href="/"><i class="fa fa-home" style="margin-right:5px;"></i>返回首页</a>
+				<a href="javascript:history.go(-1)"><i class="fa fa-reply" style="margin-right:5px;"></i>返回上一页</a>
+			</div>
+		</div>
+	</div>
 </body>
 </html>

+ 107 - 0
src/main/webapp/WEB-INF/views/normal/erp/user_center.html

@@ -0,0 +1,107 @@
+<!DOCTYPE HTML>
+<html lang="zh-CN">
+<head>
+<meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+<meta name="renderer" content="webkit">
+<title>买家中心-优软商城</title>
+<meta name="description" content="优软商城,电子元器件搜索引擎" />
+<meta name="keywords"
+	content="优软商城,B2B,B2C,行业门户,网上贸易,电子商务,网上贸易,网上交易,交易市场,在线交易,供求信息,采购,求购信息,供应信息" />
+<link href="static/img/all/u.png" rel="icon" type="image/x-icon" />
+<link rel="stylesheet" href="static/lib/bootstrap/css/bootstrap.min.css">
+<link rel="stylesheet" href="static/lib/fontawesome/css/font-awesome.min.css" />
+<link rel="stylesheet" href="static/lib/jquery/themes/summernote/css/summernote.css" />
+<link rel="stylesheet" href="static/lib/iconfont/css/iconfont.css" />
+<link rel="stylesheet" href="static/lib/jquery/themes/uploadify/uploadify.css" />
+<link rel="stylesheet" href="static/lib/angular/toaster.css" />
+<link rel="stylesheet" href="static/css/common.css" />
+<!--<link rel="stylesheet" href="static/css/usercenter.css" />-->
+<link rel="stylesheet" href="static/css/user/base.css" />
+<link rel="stylesheet" href="static/css/user/user.css" />
+<link rel="stylesheet" href="static/lib/calendar/calendar.css">
+<link rel="stylesheet" href="static/css/erp/align.css">
+</head>
+<body>
+
+
+	<!-- 消息提示框  Start-->
+	<toaster-container
+			toaster-options="{'position-class': 'toast-bottom-center'}"></toaster-container>
+	<!-- 消息提示框 End -->
+	<!-- Loading Start -->
+	<div id="loading" class="loading">
+		<i></i>
+	</div>
+	<!-- Loading End -->
+
+	<section class="clearfix">
+		<div class="wrap">
+			<div class="user_content">
+				<div ui-view=""></div>
+			</div>
+		</div>
+	</section>
+	<footer class="clearfix">
+		<div ng-include src="'static/view/common/footer_erp.html'" style="margin-top: 40px;"></div>
+	</footer>
+	<!--&lt;!&ndash; header 标题Logo和搜索框 Start &ndash;&gt;-->
+	<!--<div ng-include src="'static/view/common/header.html'"></div>-->
+	<!--&lt;!&ndash; header 标题Logo和搜索框 End &ndash;&gt;-->
+	<!--&lt;!&ndash; navigation 导航栏 Start &ndash;&gt;-->
+	<!--<div ng-include src="'static/view/common/nav.html'"></div>-->
+	<!--&lt;!&ndash; navigation 导航栏  End &ndash;&gt;-->
+
+	<!--&lt;!&ndash; Start &ndash;&gt;-->
+	<!--<div class="main-panel" id="main">-->
+		<!--<div class="container">-->
+			<!--&lt;!&ndash; 左侧导航栏 Start &ndash;&gt;-->
+			<!--<div class="left">-->
+				<!--<div ng-include src="'static/view/usercenter/left_nav.html'"></div>-->
+			<!--</div>-->
+			<!--&lt;!&ndash; 左侧导航栏 End &ndash;&gt;-->
+			<!--&lt;!&ndash; 核心内容 Start &ndash;&gt;-->
+			<!--<div class="right">-->
+				<!--<div ui-view></div>-->
+			<!--</div>-->
+			<!--&lt;!&ndash; 核心内容 End &ndash;&gt;-->
+		<!--</div>-->
+	<!--</div>-->
+	<!--&lt;!&ndash; End &ndash;&gt;-->
+	<!--&lt;!&ndash; 页脚 Start &ndash;&gt;-->
+	<!--<div ng-include src="'static/view/common/footer.html'"></div>-->
+	<!--&lt;!&ndash; 页脚 End &ndash;&gt;-->
+
+	<!--&lt;!&ndash; 侧边栏Start &ndash;&gt;-->
+	<!--<div ng-include src="'static/view/common/sidebar.html'"></div>-->
+	<!--&lt;!&ndash; 侧边栏End &ndash;&gt;-->
+
+	<script type="text/javascript" src="static/lib/require.js"
+		data-main="static/js/usercenter/main.js"></script>
+	<script type="text/ng-template" id="offer/image/insert.html">
+		<div class="modal-header">
+			<button type="button" class="close" ng-click="close()">×</button>
+			<h4 class="modal-title">插入图片</h4>
+		</div>
+		<div class="modal-body">
+			<div class="row">
+				<div class="col-xs-7" style="padding: 20px;">
+					<p class="help-block">提示:选择的图片单张大小不超过3MB,支持jpg,jpeg,gif,bmp,png</p>
+					<div class="upload-container" ng-disabled="getImages().length == images.length">
+						<div id="uploadify" on-success="onUploadSuccess($data)" uploadify="{buttonText:'选择图片'}"></div>
+					</div>
+				</div>
+				<div class="col-xs-5">
+					<h3>预览</h3>
+					<div class="image-content">
+						<img ng-src="{{image.src}}" class="img-thumbnail" style="width: 100px; height: 100px;">
+					</div>
+				</div>
+			</div>
+		</div>
+		<div class="modal-footer">
+			<div class="pull-right"><a ng-click="confirm()" class="btn btn-primary" ng-disabled="!image.src">确定</a></div>
+		</div>
+	</script>
+</body>
+</html>

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

@@ -0,0 +1,116 @@
+<!DOCTYPE HTML>
+<html lang="zh-CN">
+<head>
+<meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+<meta name="renderer" content="webkit">
+<title>卖家中心-优软商城</title>
+<meta name="description" content="优软商城,电子元器件搜索引擎" />
+<meta name="keywords"
+	content="优软商城,B2B,B2C,行业门户,网上贸易,电子商务,网上贸易,网上交易,交易市场,在线交易,供求信息,采购,求购信息,供应信息" />
+<link href="static/img/all/u.png" rel="icon" type="image/x-icon" />
+<link rel="stylesheet" href="static/lib/bootstrap/css/bootstrap.min.css" />
+<link rel="stylesheet" href="static/css/vendor/sell.css" />
+<link rel="stylesheet" href="static/css/common.css" />
+<link rel="stylesheet" href="static/lib/fontawesome/css/font-awesome.min.css" />
+<link rel="stylesheet" href="static/lib/angular/toaster.css" />
+<link rel="stylesheet" href="static/lib/jquery/themes/uploadify/uploadify.css" />
+<link rel="stylesheet" href="static/css/vendor/base.css" />
+<link rel="stylesheet" href="static/lib/calendar/calendar.css">
+<link rel="stylesheet" href="static/lib/angular/ng-table.css">
+<link rel="stylesheet" href="static/css/erp/align.css">
+</head>
+<body>
+	<!-- 消息提示框  Start-->
+	<toaster-container
+		toaster-options="{'position-class': 'toast-bottom-center'}" style="font-size: 14px;"></toaster-container>
+	<!-- 消息提示框 End -->
+	<!-- Loading Start -->
+	<div id="loading" class="loading">
+		<i></i>
+	</div>
+	<!-- Loading End -->
+
+	<!--内容开始-->
+	<section class="clearfix">
+		<div class="wrap">
+			<div class="user_content">
+				<div ui-view></div>
+			</div>
+		</div>
+	</section>
+	<footer class="clearfix" style="margin-top: 40px;">
+		<div ng-include src="'static/view/common/footer_erp.html'"></div>
+	</footer>
+
+	<!--&lt;!&ndash; header 标题Logo和搜索框 Start &ndash;&gt;-->
+	<!--<div ng-include src="'static/view/common/header.html'"></div>-->
+	<!--&lt;!&ndash; header 标题Logo和搜索框 End &ndash;&gt;-->
+
+	<!--&lt;!&ndash; navigation 导航栏 Start &ndash;&gt;-->
+	<!--<div ng-include src="'static/view/common/nav.html'"></div>-->
+	<!--&lt;!&ndash; navigation 导航栏  End &ndash;&gt;-->
+
+	<!--&lt;!&ndash; 主体内容 Start &ndash;&gt;-->
+	<!--<div class="main-panel" id="main">-->
+		<!--<div class="container">-->
+			<!--&lt;!&ndash; 左侧导航栏 Start &ndash;&gt;-->
+			<!--<div class="left">-->
+				<!--<div ng-include src="'static/view/vendor/left.html'"></div>-->
+			<!--</div>-->
+			<!--&lt;!&ndash; 左侧导航栏 End &ndash;&gt;-->
+			<!--&lt;!&ndash; 核心内容 Start &ndash;&gt;-->
+			<!--<div class="right">-->
+				<!--<div ui-view></div>-->
+			<!--</div>-->
+			<!--&lt;!&ndash; 核心内容 End &ndash;&gt;-->
+		<!--</div>-->
+	<!--</div>-->
+	<!--&lt;!&ndash; 主体内容 End &ndash;&gt;-->
+
+	<!--客服咨询-->
+	<!--<div class="kefu" align="center">
+		<a href="javascript:void(0)">
+			<img src="static/img/user/images/kefu.png" width="165px" height="239px" style="position: relative;"/>
+			<span id="service-close" class="service-close">×</span>
+		</a>
+	</div>-->
+
+	<script type="text/javascript" src="static/lib/require.js"
+		data-main="static/js/vendor/main.js"></script>
+	<!-- 产品图片插入modal Start -->
+	<script type="text/ng-template" id="offer/image/insert.html">
+		<div class="modal-header">
+			<button type="button" class="close" ng-click="close()">×</button>
+			<h4 class="modal-title">插入图片</h4>
+		</div>
+		<div class="modal-body">
+			<div class="row">
+				<div class="col-xs-7" style="padding: 20px;">
+					<p class="help-block">提示:选择的图片单张大小不超过3MB,支持jpg,jpeg,gif,bmp,png</p>
+					<div class="upload-container" ng-disabled="getImages().length == images.length">
+						<div id="uploadify" on-success="onUploadSuccess($data)" uploadify="{buttonText:'选择图片'}"></div>
+					</div>
+				</div>
+				<div class="col-xs-5">
+					<h3>预览</h3>
+					<div class="image-content">
+						<img ng-src="{{image.src}}" class="img-thumbnail" style="width: 100px; height: 100px;">
+					</div>
+				</div>
+			</div>
+		</div>
+		<div class="modal-footer">
+			<div class="pull-right"><a ng-click="confirm()" class="btn btn-primary" ng-disabled="!image.src">确定</a></div>
+		</div>
+	</script>
+	<script type="text/javascript">
+//		window.onload = function() {
+//			document.getElementById('service-close').onclick = function() {
+//				document.getElementsByClassName('kefu')[0].style.display = 'none';
+//			}
+//		}
+	</script>
+	<!-- 产品图片插入modal End -->
+</body>
+</html>

+ 4 - 0
src/main/webapp/WEB-INF/views/normal/user_center.html

@@ -20,7 +20,9 @@
 <link rel="stylesheet" href="static/css/user/base.css" />
 <link rel="stylesheet" href="static/css/user/user.css" />
 <link rel="stylesheet" href="static/lib/calendar/calendar.css">
+<link rel="stylesheet" type="text/css" href="static/lib/keyboard/css/softkeys-0.0.1.css">
 <link rel="stylesheet" href="static/lib/angular/ng-table.css">
+    <link rel="stylesheet" href="static/css/commonComponent.css" />
 </head>
 <body>
 
@@ -110,5 +112,7 @@
 			<div class="pull-right"><a ng-click="confirm()" class="btn btn-primary" ng-disabled="!image.src">确定</a></div>
 		</div>
 	</script>
+	<script src="static/lib/jquery/jquery.min.js"></script>
+	<script src="static/lib/keyboard/js/softkeys-0.0.1.js"></script>
 </body>
 </html>

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

@@ -18,6 +18,7 @@
 <link rel="stylesheet" href="static/css/vendor/base.css" />
 <link rel="stylesheet" href="static/lib/calendar/calendar.css">
 <link rel="stylesheet" href="static/lib/angular/ng-table.css">
+<link rel="stylesheet" type="text/css" href="static/lib/keyboard/css/softkeys-0.0.1.css">
 </head>
 <body>
 	<!-- 消息提示框  Start-->
@@ -120,5 +121,7 @@
 //		}
 	</script>
 	<!-- 产品图片插入modal End -->
+	<script src="static/lib/jquery/jquery.min.js"></script>
+	<script src="static/lib/keyboard/js/softkeys-0.0.1.js"></script>
 </body>
 </html>

+ 2 - 2
src/main/webapp/WEB-INF/web.xml

@@ -114,7 +114,7 @@
 		<url-pattern>/*</url-pattern>
 	</filter-mapping>
 
-	<filter>
+	<!--<filter>
 		<filter-name>keyWordFilter</filter-name>
 		<filter-class>com.uas.platform.b2c.core.filter.KeyWordFilter</filter-class>
 	</filter>
@@ -122,7 +122,7 @@
 	<filter-mapping>
 		<filter-name>keyWordFilter</filter-name>
 		<url-pattern>/*</url-pattern>
-	</filter-mapping>
+	</filter-mapping>-->
 
 	<error-page>  
         <error-code>404</error-code>  

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

@@ -413,7 +413,10 @@ input.ng-invalid.ng-dirty,textarea.ng-invalid.ng-dirty {
 
 .modal {
     position: absolute;
-    bottom: auto;
+    top:50%;
+	left:50%;
+	margin-left:-50%;
+	margin-top:-300px;
 }
 
 .modal-backdrop.in {
@@ -940,5 +943,9 @@ input::-webkit-inner-spin-button {
 	-webkit-appearance: none !important;
 	margin: 0;
 }
+/*去掉搜狗小键盘样式*/
+input::-webkit-input-safebox-button{
+	display: none;
+}
 /*去除textarea默认右下角可自由放大样式*/
 textarea{resize:none}

+ 621 - 0
src/main/webapp/resources/css/commonComponent.css

@@ -0,0 +1,621 @@
+/*---------------------提示框样式 start---------------------*/
+/*示例:
+<div class="com-del-box">
+    <div class="title">
+        <i></i>
+    </div>
+    <div class="content">
+        <p><i class="fa fa-exclamation-circle"></i>是否要删除此发票?</p>
+        <div>
+            <a>取消</a>
+            <a>确认</a>
+        </div>
+    </div>
+</div>
+*/
+.com-del-box{
+    position: fixed;
+    z-index: 10;
+    height: 152px;
+    opacity: 1;
+    background-color: white;
+    width: 310px;
+    -webkit-box-shadow: 0 5px 15px rgba(0,0,0,.5);
+    box-shadow: 0 5px 15px rgba(0,0,0,.5);
+    margin: -155px 0 0 -75px;
+    top: 55%;
+    left: 50%;
+}
+.com-del-box .title{
+    height: 30px;
+    background-color: #5078cb;
+    text-align: right;
+    padding-right: 15px;
+    line-height: 30px;
+}
+.com-del-box .title i{
+    background: url(../img/icon/close.png) no-repeat;
+    display: inline-block;
+    width: 9px;
+    height: 9px;
+    cursor: pointer;
+    margin: 0;
+}
+.com-del-box .content{
+    width: 100%;
+    text-align: center;
+    margin: 0 auto;
+}
+.com-del-box .content p{
+    line-height: 50px;
+    font-size: 14px;
+    padding-top: 10px;
+}
+.com-del-box .content p i{
+    color: #5078cb;
+    font-size: 16px;
+    margin-right: 10px;
+}
+.com-del-box .content div{
+    width: 100%;
+    text-align: center;
+    margin: 0 auto;
+}
+.com-del-box .content div a{
+    width: 55px;
+    height: 26px;
+    line-height: 26px;
+    display: inline-block;
+    text-align: center;
+    font-size: 14px;
+    cursor: pointer;
+}
+.com-del-box .content div a:first-child{
+    background: #b4b5b9;
+    color: #333;
+    margin-right: 10px;
+}
+.com-del-box .content div a:last-child{
+    background: #5078cb;
+    color: #fff;
+}
+.com-del-box .content div a:hover{
+    background: #3f7ae3;
+    color: #fff;
+}
+/*---------------------提示框样式 end---------------------*/
+
+/*---------------------btn样式 start---------------------*/
+/*示例(size+type):
+<span class="com-btn-level1 com-btn-submit"></span>
+*/
+/*btnSize*/
+.com-btn-level1 {
+    display: inline-block;
+    height: 25px;
+    width:64px;
+    text-align: center;
+    line-height: 23px;
+    font-size: 14px;
+    cursor: pointer;
+    vertical-align: middle;
+}
+.com-btn-level1[disabled] {
+    cursor: not-allowed;
+}
+.com-btn-level2 {
+    display: inline-block;
+    padding: 0 11px;
+    height: 25px;
+    line-height: 23px;
+    border-radius: 2px;
+    font-size: 12px;
+    cursor: pointer;
+    vertical-align: middle;
+}
+.com-btn-level2[disabled] {
+    cursor: not-allowed;
+}
+/*btnType*/
+.com-btn-submit {
+    color: #fff;
+    background: #5078cb;
+    border: 1px solid #5078cb;
+}
+.com-btn-cancel {
+    background: #c8c6c6;
+    color: #fff;
+    border: 1px solid #c8c6c6;
+}
+.com-btn-detail {
+    color: #fff;
+    background: #ff8522;
+    border: 1px solid #ff8522;
+}
+.com-btn-detail-border {
+    color: #ff8522;
+    background: #fff;
+    border: 1px solid #ff8522;
+}
+.com-btn-red {
+    background: #f15601;
+    color: #fff;
+    border: 1px solid #f15601;
+}
+.com-btn-green {
+    background: #33b401;
+    color: #fff;
+    border: 1px solid #33b401;
+}
+.com-btn-submit-border {
+    border: 1px solid #5078cb;
+    background: #fff;
+    color: #5078cb;
+}
+/*---------------------btn样式 end-----------------------*/
+
+/*---------------------标准控件-新增start---------------------*/
+i.fa-plus-circle{
+    font-size: 16px!important;
+    color: #33b401!important;
+}
+/*---------------------标准控件-新增end---------------------*/
+
+/*---------------------标准控件-删除start---------------------*/
+i.fa-minus-circle{
+    font-size: 16px!important;
+    color: #f51c24!important;
+}
+/*---------------------标准控件-删除end---------------------*/
+
+/*---------------------标准控件-单选框start---------------------*/
+/** html代码
+    <label class="com-check-radio">
+        <input type="radio" id="effect" name="radio">
+        <label for="effect"></label>
+        生效
+    </label>
+    <label class="com-check-radio">
+        <input type="radio" id="no-effect" name="radio" checked="checked">
+        <label for="no-effect"></label>
+        暂不生效
+    </label>
+**/
+.com-check-radio input[type='radio']{
+    display: none!important;
+    margin: 7px 8px 0!important;
+}
+.com-check-radio input[type='radio'] + label{
+    position: relative!important;
+    top: 7px!important;
+    margin-right: 5px!important;
+    display: inline-block!important;
+    width: 12px!important;
+    height: 12px!important;
+    font-weight: normal!important;
+    background: url(../img/icon/check-rule.png) no-repeat;
+}
+.com-check-radio label{
+    background-position: 0 0!important;
+}
+.com-check-radio input:checked + label{
+    background-position: -15px 0!important;
+}
+/*---------------------标准控件-单选框end---------------------*/
+
+/*---------------------标准控件-复选框start---------------------*/
+/** html代码
+    <label class="com-check-box">
+        <input type="checkbox" id="1">
+        <label for="1"></label>
+    </label>
+**/
+.com-check-box input {
+    display: none!important;
+}
+.com-check-box input[type="checkbox"] + label{
+    display: inline-block!important ;
+    position: relative!important ;
+    top: 2px!important ;
+    width: 12px!important ;
+    height: 12px!important ;
+    background: url(../img/icon/check-rule.png) no-repeat ;
+    background-position: -48px 0;
+}
+.com-check-box input:checked + label {
+    background-position: -31px 0;
+}
+/*---------------------标准控件-复选框end---------------------*/
+
+/*---------------------标准控件-开关(蓝色)start---------------------*/
+/** html代码
+    <div class="com-switch-blue">
+        <span class="checkbox">
+            <span><em></em></span>
+        </span>
+        <span class="checkbox active">
+            <span><em></em></span>
+        </span>
+	</div>
+**/
+div.com-switch-blue .checkbox {
+    margin: 0 auto;
+    text-align: center;
+    position: relative;
+    display: block;
+}
+div.com-switch-blue .checkbox span {
+    width: 46px;
+    height: 12px;
+    display: inline-block;
+    border-radius: 18px;
+    border: #e4e4e4 1px solid;
+    cursor: pointer;
+    position: relative;
+    box-shadow: 1px 1px 5px #eee;
+    background: -webkit-gradient(linear,0% 0%, 0% 100%, from(#E0E0E0), to(#E8E8E8), color-stop(0.5,#F2F2F2));
+    transition: background-color .1s ease-out;
+}
+div.com-switch-blue .checkbox.active span{
+    background: #b9cffa;
+}
+div.com-switch-blue .checkbox.active span em{
+    left: 34px;
+}
+div.com-switch-blue .checkbox span em{
+    position: absolute;
+    width: 16px;
+    top: -5px;
+    left: 0;
+    height: 16px;
+    line-height: 16px;
+    background-color: #fff;
+    border: #eee 1px solid;
+    border-radius: 50%;
+    box-shadow: -1px 2px 1px #999;
+    transition: background-color .1s ease-out;
+    color: #666;
+    font-size: 12px;
+}
+div.com-switch-blue .checkbox span em:after{
+    content: '';
+    width: 6px;
+    height: 6px;
+    display: inline-block;
+    background: #dedcdc;
+    border-radius: 100%;
+    position: absolute;
+    top: 4px;
+    left: 4px;
+}
+/*---------------------标准控件-开关(蓝色)end---------------------*/
+
+/*---------------------标准控件-开关(绿色)start---------------------*/
+/** html代码
+    <div class="com-switch-green">
+        <span class="checkbox">
+            <span><em></em></span>
+        </span>
+        <span class="checkbox active">
+            <span><em></em></span>
+        </span>
+	</div>
+**/
+div.com-switch-green .checkbox {
+    margin: 0 auto;
+    text-align: center;
+    position: relative;
+    display: block;
+}
+div.com-switch-green .checkbox span {
+    width: 34px;
+    height: 18px;
+    display: inline-block;
+    border-radius: 18px;
+    border: #e4e4e4 1px solid;
+    cursor: pointer;
+    position: relative;
+    box-shadow: 1px 1px 5px #eee;
+    background: -webkit-gradient(linear,0% 0%, 0% 100%, from(#bbbcba), to(#bfc1be), color-stop(0.5,#c5c7c4));
+    transition: background-color .1s ease-out;
+}
+div.com-switch-green .checkbox.active span{
+    background: #3acb14;
+}
+div.com-switch-green .checkbox.active span em{
+    left: 18px;
+}
+div.com-switch-green .checkbox span em{
+    position: absolute;
+    top: -2px;
+    left: -3px;
+    width: 18px;
+    height: 18px;
+    line-height: 18px;
+    background-color: #fff;
+    border: #eee 1px solid;
+    border-radius: 50%;
+    box-shadow: -1px 2px 1px #999;
+    transition: background-color .1s ease-out;
+    color: #666;
+    font-size: 12px;
+}
+div.com-switch-green .checkbox span em:after{
+    content: '';
+    width: 6px;
+    height: 6px;
+    display: inline-block;
+    background: #dedcdc;
+    border-radius: 100%;
+    position: absolute;
+    top: 5px;
+    left: 5px;
+}
+/*---------------------标准控件-开关(绿色)end---------------------*/
+
+/*---------------------信息提示框 start---------------------*/
+/** html代码
+    <div class="tip">
+        XXXX
+	</div>
+**/
+div.tip{
+    display: none;
+    padding: 13px 10px;
+    font-size: 12px;
+    color: #333;
+    background-color: #fff;
+    border: 1px solid #89aefa;
+    border-radius: 2px;
+    box-shadow: 2px 2px 5px #dedede;
+    -webkit-box-shadow: 2px 2px 5px #dedede;
+    -moz-box-shadow: 2px 2px 5px #dedede;
+    -o-box-shadow: 2px 2px 5px #dedede;
+}
+/*---------------------信息提示框 end---------------------*/
+
+
+/*---------------------提示浮层 start---------------------*/
+.com-supernatant-box{
+    max-width:360px;
+    opacity:.6;
+    border-radius:5px;
+}
+.com-supernatant-box div{
+    position:fixed;
+    top:59%;
+    left:50%;
+    width:100%;
+    transform:translate(-50%,-50%);
+    color: #333;
+}
+.com-supernatant-box .success{
+    background: #f00000;
+}
+.com-supernatant-box .defeat{
+    background: #5078cb;
+}
+/*-------------------------提示浮层 end--------------------*/
+
+/*------下拉选框的使用样式方法------------------------------*/
+/*
+<div class='com-select-option'>
+    <input id="classesType" ng-blur="onBlur()"  ng-click="changeShowLogistics()" type="text" class="form-control" ng-model="message.classes"  placeholder="请选择消息类型" readonly="true" >
+    <ul id="ulContent" ng-if="matchData && showContent" class="dropdown-menu">
+     <li ng-click="showText(classes)" ng-repeat="classes in resultList" ng-class="{'active': $index==selectIndex}" ng-bind="classes" ng-bind="message.classes"></li>
+    </ul>
+ </div>
+*/
+/*-------------------------下拉选框 start-------------- --*/
+.com-select-option {
+    position: relative;
+}
+.com-select-option>input {
+    vertical-align: middle;
+    width: 190px;
+    margin-top: -2px;
+    background-color: white !important;
+    height: 30px;
+    background: url(static/img/index/xiala.png) no-repeat 167px 11px;
+    cursor: pointer;
+}
+.com-select-option .dropdown-menu{
+    top: 90%;
+    left: unset;
+    line-height: 30px;
+    max-height: 300px;
+    overflow-y: auto;
+    width: 190px;
+    display: block;
+    overflow-x: hidden;
+    border-radius: 2px;
+}
+.com-select-option .dropdown-menu li{
+    font-size: 14px;
+    cursor: pointer;
+    padding-left:10px;
+    height: 30px;
+}
+.com-select-option .dropdown-menu li:hover, .dropdown-menu li.active{
+    color: #fff;
+    background: #5078cb;
+}
+/*-------------------------下拉选框 end--------------------*/
+/*-------------------------分页 start--------------------*/
+/*主要分页table(使用tableParams即可)*/
+
+/*主要分页非table代码示例*/
+/*
+<div class="ng-cloak ng-table-pager com-sup-pager">
+    <ul class="pagination ng-table-pagination">
+        <li ng-class="{'disabled': !page.active && !page.current, 'active': page.current}" ng-repeat="page in pages" ng-switch="page.type">
+            <a ng-switch-when="prev" ng-click="setPage(page.type, -1)" href="">&laquo;</a>
+            <a ng-switch-when="first" ng-click="setPage(page.type, page.number)" href=""><span ng-bind="page.number"></span></a>
+            <a ng-switch-when="page" ng-click="setPage(page.type, page.number)" href=""><span ng-bind="page.number"></span></a>
+            <a ng-switch-when="more" ng-click="setPage(page.type, -1)" href="">&#8230;</a>
+            <a ng-switch-when="last" ng-click="setPage(page.type, page.number)" href=""><span ng-bind="page.number"></span></a>
+            <a ng-switch-when="next" ng-click="setPage(page.type, -1)" href="">&raquo;</a>
+        </li>
+    </ul>
+    <div class="page-go-block">
+        <input class="page-number" type="text" ng-model="param.currentPage" ng-keydown="listenEnter()"/>
+        <a class="page-a" ng-click="setPage('page', param.currentPage)">GO</a>
+    </div>
+</div>
+*/
+.com-sup-pager .pagination{
+    margin-bottom: 0;
+}
+.com-sup-pager .pagination.ng-table-pagination > li > a > span {
+    height: 17px;
+    line-height: 17px;
+}
+.com-sup-pager .pagination>.active>a, .pagination>.active>a:focus, .pagination>.active>a:hover, .pagination>.active>span, .pagination>.active>span:focus, .pagination>.active>span:hover{
+    z-index: 2;
+    color: #fff;
+    cursor: default;
+    background-color: #5078cb;
+    border-color: #5078cb;
+}
+.com-sup-pager .pagination.ng-table-pagination > li > a{
+    font-size: 12px;
+}
+.com-sup-pager.ng-table-pager  input.page-number {
+    vertical-align: inherit;
+    display: inline-block;
+    width: 40px;
+    height: 31px;
+    padding: 6px 6px;
+    font-size: 14px;
+    line-height: 1.42857143;
+    color: #9B9792;
+    text-align: center;
+    background-color: #F6F5F4;
+    background-image: none;
+    border: 1px solid #ccc;
+    border-top-left-radius: 4px;
+    border-bottom-left-radius: 4px;
+    box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+    transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
+}
+.com-sup-pager.ng-table-pager{
+    margin-right: 0 !important;
+    background: #fff;
+}
+.com-sup-pager.ng-table-pager a.page-a {
+    color: #fff;
+    cursor: pointer;
+    background-color: #5078cb;
+    border-color: #5078cb;
+    padding: 7px 6px;
+    font-size: 14px;
+    border-top-right-radius: 4px;
+    border-bottom-right-radius: 4px;
+    text-decoration: none;
+    height: 31px;
+}
+
+.com-sup-pager.ng-table-pager div.page-go-block {
+    float: right;
+    margin-left: 20px;
+    font-size: 0px;
+    height: 31px;
+    line-height: 31px;
+}
+
+/*次要分页代码示例*/
+/*
+ <div class="ng-cloak ng-table-pager com-sub-pager text-center">
+        <ul class="pagination ng-table-pagination">
+            <li ng-class="{'disabled': !page.active && !page.current, 'active': params.page == page.number}" ng-repeat="page in pages" ng-switch="page.type">
+                <a ng-switch-when="prev" ng-click="setPage(page.type, -1)">&laquo;</a>
+                <a ng-switch-when="first" ng-click="setPage(page.type, page.number)"><span ng-bind="page.number"></span></a>
+                <a ng-switch-when="page" ng-click="setPage(page.type, page.number)"><span ng-bind="page.number"></span></a>
+                <a ng-switch-when="more" ng-click="setPage(page.type, -1)">&#8230;</a>
+                <a ng-switch-when="last" ng-click="setPage(page.type, page.number)"><span ng-bind="page.number"></span></a>
+                <a ng-switch-when="next" ng-click="setPage(page.type, -1)">&raquo;</a>
+            </li>
+        </ul>
+        <div class="page-go-block" ng-if="rolesData.length>6">
+            <input class="page-number" type="text" ng-model="params.currentPage" ng-keydown="listenEnter()"/>
+            <a class="page-a" ng-click="setPage('page', params.currentPage)">GO</a>
+        </div>
+    </div>
+*/
+.com-sub-pager .ng-table-pagination a {
+    border: none;
+    font-size: 12px;
+    cursor: pointer;
+}
+.com-sub-pager .pagination li:first-child a, .pagination li:last-child a{
+    font-size: 20px;
+}
+.com-sub-pager ul.pagination.ng-table-pagination > li > a > span {
+    height: 17px;
+    line-height: 17px;
+    color: #666;
+}
+.com-sub-pager.ng-table-pager {
+    background: #f4f4f4;
+    margin: 0!important;
+    padding-right: 29px;
+}
+.com-sub-pager.ng-table-pager  input.page-number {
+    vertical-align: inherit;
+    display: inline-block;
+    width: 37px;
+    height: 28px;
+    padding: 6px 6px;
+    font-size: 12px;
+    line-height: 1.42857143;
+    color: #9B9792;
+    text-align: center;
+    background-color: #F6F5F4;
+    background-image: none;
+    border: 1px solid #ccc;
+    border-top-left-radius: 4px;
+    border-bottom-left-radius: 4px;
+    box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+    transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
+}
+
+.com-sub-pager.ng-table-pager a.page-a {
+    color: #fff;
+    cursor: pointer;
+    padding: 5.55px 6px;
+    font-size: 12px;
+    border-top-right-radius: 4px;
+    border-bottom-right-radius: 4px;
+    text-decoration: none;
+    height: 31px;
+}
+
+.com-sub-pager.ng-table-pager .page-go-block {
+    float: right;
+    font-size: 0px;
+    height: 31px;
+    margin-top: 20px;
+    line-height: 31px;
+}
+.com-sub-pager.ng-table-pager .ng-table-pagination{
+    text-align: center;
+    max-width: 460px;
+    margin: 0;
+}
+.com-sub-pager.ng-table-pager .ng-table-pagination a{
+    height: 29px;
+    line-height: 13px;
+}
+.com-sub-pager .pagination li.active a span{
+    color: white !important;
+}
+.com-sub-pager.ng-table-pager .ng-table-pagination li.active a {
+    background: none!important;
+}
+.com-sub-pager.ng-table-pager .ng-table-pagination li a {
+    background: none!important;
+}
+.com-sub-pager.ng-table-pager .ng-table-pagination li.active a span {
+    color: #5078cb!important;
+}
+/*-------------------------分页 end--------------------*/

+ 3 - 0
src/main/webapp/resources/css/erp/align.css

@@ -0,0 +1,3 @@
+.user_content .user_right {
+    margin-right: 90px;
+}

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