Ver Fonte

Merge remote-tracking branch 'origin/dev-mysql' into featue/info_text-1120

# Conflicts:
#	src/main/webapp/resources/view/usercenter/forstore/buyer_cart.html
hangb há 8 anos atrás
pai
commit
c6b406a57f
100 ficheiros alterados com 4694 adições e 588 exclusões
  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. 533 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. 64 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. 130 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. 90 23
      src/main/java/com/uas/platform/b2c/common/account/v2/service/impl/UserServiceImpl.java
  30. 10 10
      src/main/java/com/uas/platform/b2c/common/search/constant/SearchUrl.java
  31. 2 2
      src/main/java/com/uas/platform/b2c/common/search/controller/SearcherController.java
  32. 4 3
      src/main/java/com/uas/platform/b2c/common/search/rpc/service/Impl/SearchServiceImpl.java
  33. 20 4
      src/main/java/com/uas/platform/b2c/common/search/service/impl/SearcherServiceImpl.java
  34. 4 0
      src/main/java/com/uas/platform/b2c/core/constant/Status.java
  35. 233 220
      src/main/java/com/uas/platform/b2c/core/filter/SSOInterceptor.java
  36. 25 5
      src/main/java/com/uas/platform/b2c/core/support/log/UsageBufferedLogger.java
  37. 38 0
      src/main/java/com/uas/platform/b2c/external/erp/commodity/service/impl/BankInfoServiceImpl.java
  38. 130 0
      src/main/java/com/uas/platform/b2c/external/erp/commodity/service/impl/ProductDetailERPServiceImpl.java
  39. 37 0
      src/main/java/com/uas/platform/b2c/external/erp/commodity/util/ModelConverter.java
  40. 51 0
      src/main/java/com/uas/platform/b2c/external/erp/common/util/ModelConverter.java
  41. 154 0
      src/main/java/com/uas/platform/b2c/external/erp/order/service/impl/B2cOrderServiceImpl.java
  42. 72 12
      src/main/java/com/uas/platform/b2c/external/erp/order/service/impl/OrderServiceImpl.java
  43. 70 1
      src/main/java/com/uas/platform/b2c/external/erp/order/util/ModelConverter.java
  44. 114 0
      src/main/java/com/uas/platform/b2c/external/erp/prod/service/impl/ProdServiceImpl.java
  45. 2 1
      src/main/java/com/uas/platform/b2c/external/erp/product/service/impl/OperationInfoServiceImpl.java
  46. 41 4
      src/main/java/com/uas/platform/b2c/external/erp/product/util/ModelConverter.java
  47. 18 20
      src/main/java/com/uas/platform/b2c/fa/payment/controller/BankInfoController.java
  48. 46 2
      src/main/java/com/uas/platform/b2c/fa/payment/controller/BankTransferController.java
  49. 75 41
      src/main/java/com/uas/platform/b2c/fa/payment/dao/BankInfoDao.java
  50. 32 18
      src/main/java/com/uas/platform/b2c/fa/payment/model/BankInfo.java
  51. 63 0
      src/main/java/com/uas/platform/b2c/fa/payment/model/BankTransfer.java
  52. 21 4
      src/main/java/com/uas/platform/b2c/fa/payment/service/BankInfoService.java
  53. 12 1
      src/main/java/com/uas/platform/b2c/fa/payment/service/BankTransferService.java
  54. 138 67
      src/main/java/com/uas/platform/b2c/fa/payment/service/impl/BankInfoServiceImpl.java
  55. 58 7
      src/main/java/com/uas/platform/b2c/fa/payment/service/impl/BankTransferServiceImpl.java
  56. 7 1
      src/main/java/com/uas/platform/b2c/fa/settlement/service/impl/SettlementServiceImpl.java
  57. 5 4
      src/main/java/com/uas/platform/b2c/logistics/service/impl/AddressServiceImpl.java
  58. 11 15
      src/main/java/com/uas/platform/b2c/logistics/service/impl/InvoiceFPurchaseServiceImpl.java
  59. 7 5
      src/main/java/com/uas/platform/b2c/prod/commodity/controller/GoodsController.java
  60. 35 2
      src/main/java/com/uas/platform/b2c/prod/commodity/controller/ProductController.java
  61. 37 1
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/GoodsDao.java
  62. 17 0
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductDao.java
  63. 20 0
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductDetailDao.java
  64. 5 1
      src/main/java/com/uas/platform/b2c/prod/commodity/facade/impl/ProductFacadeImpl.java
  65. 5 0
      src/main/java/com/uas/platform/b2c/prod/commodity/facade/impl/ProductImportHistFacadeImpl.java
  66. 15 1
      src/main/java/com/uas/platform/b2c/prod/commodity/model/Goods.java
  67. 30 1
      src/main/java/com/uas/platform/b2c/prod/commodity/model/Product.java
  68. 245 0
      src/main/java/com/uas/platform/b2c/prod/commodity/model/ProductDetail.java
  69. 17 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/GoodsService.java
  70. 24 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java
  71. 30 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java
  72. 132 3
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductServiceImpl.java
  73. 5 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ReleaseProductByBatchServiceImpl.java
  74. 21 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/api/BrandController.java
  75. 1 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/controller/BrandController.java
  76. 30 1
      src/main/java/com/uas/platform/b2c/prod/product/brand/controller/BrandSubmitController.java
  77. 12 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/dao/BrandDao.java
  78. 15 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/dao/BrandInfoDao.java
  79. 1 1
      src/main/java/com/uas/platform/b2c/prod/product/brand/modal/Brand.java
  80. 20 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/BrandService.java
  81. 8 2
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/BrandSubmitService.java
  82. 18 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/BrandServiceImpl.java
  83. 47 1
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/BrandSubmitServiceImpl.java
  84. 1 1
      src/main/java/com/uas/platform/b2c/prod/product/common/CommonTask.java
  85. 15 3
      src/main/java/com/uas/platform/b2c/prod/product/common/api/CommonCountController.java
  86. 3 3
      src/main/java/com/uas/platform/b2c/prod/product/common/model/CommonCount.java
  87. 1 0
      src/main/java/com/uas/platform/b2c/prod/product/component/api/ComponentController.java
  88. 12 4
      src/main/java/com/uas/platform/b2c/prod/product/component/dao/ComponentDao.java
  89. 74 0
      src/main/java/com/uas/platform/b2c/prod/product/component/modal/ComponentGoods.java
  90. 7 0
      src/main/java/com/uas/platform/b2c/prod/product/component/service/ComponentService.java
  91. 4 0
      src/main/java/com/uas/platform/b2c/prod/product/component/service/impl/ComponentServiceImpl.java
  92. 6 0
      src/main/java/com/uas/platform/b2c/prod/product/component/service/impl/ComponentSubmitServiceImpl.java
  93. 58 5
      src/main/java/com/uas/platform/b2c/trade/order/controller/OrderController.java
  94. 3 0
      src/main/java/com/uas/platform/b2c/trade/order/dao/OrderDetailDao.java
  95. 14 0
      src/main/java/com/uas/platform/b2c/trade/order/model/Order.java
  96. 1 1
      src/main/java/com/uas/platform/b2c/trade/order/model/OrderDetail.java
  97. 24 0
      src/main/java/com/uas/platform/b2c/trade/order/model/OrderSimpleInfo.java
  98. 84 0
      src/main/java/com/uas/platform/b2c/trade/order/model/PayRecord.java
  99. 23 0
      src/main/java/com/uas/platform/b2c/trade/order/service/OrderService.java
  100. 82 3
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderServiceImpl.java

+ 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) {

+ 533 - 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,420 @@ 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 = userService.updateUserTel(userTel,newUserTel,user.getUserUU());
+			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 +587,7 @@ public class UserController {
 		}
 		return new ResponseEntity<String>(HttpStatus.OK);
 	}
+
 	/**
 	 * 删除用户
 	 *
@@ -190,7 +623,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 +636,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 +647,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 +665,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 +675,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);
+}

+ 64 - 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,62 @@ 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);
+
+	/**
+	 * 删除用户注册企业时的缓存数据
+	 */
+	void deleteUserCacheEnterprise(User user);
 
-	public UserInfo findUserByKeyWord(String keyWord);
+	/**
+	 * 修改用户支付密码
+	 * @param user
+	 * @param userPay
+	 * @param newUserPay
+	 * @return
+	 */
+	User updateUserPay( User user, String userPay, String newUserPay);
 
-	public void bindUserToMyEnterprise(Long userUU);
+	/**
+	 * 保存用户实名认证信息
+	 * @param user
+	 * @return
+	 */
+	User saveRealAuth(User user);
+
+	/**
+	 * 分页获取实名认证信息
+	 * @param pageInfo
+	 * @param idEnable
+	 * @return
+	 */
+	Page<User> getPageStatusRealAuth(final PageParams pageInfo, Short idEnable);
 
-	public void removeUser(Long uu);
-	public boolean isEmailUseable(String email);
-	public boolean isTelUseable(String tel);
+	/**
+	 * 修改手机号
+	 * @param oldTel
+	 * @param newTel
+	 * @param uu
+	 * @return
+	 */
+	User updateUserTel(String oldTel,String newTel,Long uu);
 }

+ 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();
+        }
+    }
+}

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

@@ -3,36 +3,41 @@ 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;
 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.*;
+import org.springframework.util.StringUtils;
 
 @Service
 public class UserServiceImpl implements UserService {
@@ -57,6 +62,9 @@ public class UserServiceImpl implements UserService {
 	@Autowired
 	private CommonDao commonDao;
 
+	@Autowired
+	private UserCacheEnterpriseDao userCacheEnterpriseDao;
+
 	@Autowired
 	private MailService mailService;
 	@Autowired
@@ -263,17 +271,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 +351,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 +387,99 @@ 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);
+	}
+
+	@Override
+	public User updateUserTel(String oldTel, String newTel,Long uu) {
+		//旧手机号是否正确
+		User user = userDao.findOne(uu);
+			if(!user.getUserTel().equals(oldTel)){
+				throw new IllegalOperatorException("旧手机号错误");
+			}
+			try {
+				if(!StringUtils.isEmpty(oldTel) && !StringUtils.isEmpty(newTel)) {
+					//保存数据库
+					List<com.uas.account.entity.User> users = AccountUtils.updateTel(oldTel, newTel);
+					if (users != null && users.size() > 0) {
+						user.setUserTel(users.get(0).getUid());
+						user = userDao.save(user);
+						return user;
+					}
+				}
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+			return null;
+		}
 }

+ 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());
                 }
             }
         }

+ 90 - 23
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,115 @@ 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) {
+        if (!StringUtils.isEmpty(user.getDialectUID())) {
+            u.setUserUU(Long.valueOf(user.getDialectUID()));
+        }
+        if (user.getPwdSecLevel()!=null) {
+            u.setPwdSecLevel(user.getPwdSecLevel());
+        }
+        if(user.getLastLoginTime()!=null){
+            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);
                 }
             }
         }

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

@@ -10,23 +10,23 @@ public class SearchUrl {
     /**
      * 获取类目id
      */
-    public static final String KIND_ID_URL = "/search/kindIds/{keyword}";
+    public static final String KIND_ID_URL = "/search/kindIds?keyword={keyword}";
 
     /**
      * 获取类目的数据
      *
      */
-    public static final String KIND_INFO_URL = "/search/kinds/{keyword}?page={page}&size={size}";
+    public static final String KIND_INFO_URL = "/search/kinds?keyword={keyword}?page={page}&size={size}";
 
     /**
      * 搜索品牌的id
      */
-    public static final String BRAND_ID_URL = "/search/brandIds/{keyword}?page={page}&size={size}";
+    public static final String BRAND_ID_URL = "/search/brandIds?keyword={keyword}?page={page}&size={size}";
 
     /**
      * 搜索品牌的具体信息
      */
-    public static final String BRAND_INFO_URL = "/search/brands/{keyword}?page={page}&size={size}";
+    public static final String BRAND_INFO_URL = "/search/brands?keyword={keyword}?page={page}&size={size}";
 
 
     /**
@@ -59,38 +59,38 @@ public class SearchUrl {
     /**
      * 根据关键字联想
      */
-    public static final String SIMILAR_KEYWORD_URL = "/search/similarKeywords/{keyword}";
+    public static final String SIMILAR_KEYWORD_URL = "/search/similarKeywords?keyword={keyword}";
 
 
     /**
      * 根据关键字联想器件
      */
-    public static final String SIMILAR_COMPONENT_URL = "/search/similarComponents/{keyword}";
+    public static final String SIMILAR_COMPONENT_URL = "/search/similarComponents?keyword={keyword}";
 
 
     /**
      * 根据关键字联想品牌
      */
-    public static final String SIMILAR_BRAND_URL = "/search/similarBrands/{keyword}";
+    public static final String SIMILAR_BRAND_URL = "/search/similarBrands?keyword={keyword}";
 
 
     /**
      * 根据关键字联想类目
      */
-    public static final String SIMILAR_KIND_URL = "/search/similarKinds/{keyword}";
+    public static final String SIMILAR_KIND_URL = "/search/similarKinds?keyword={keyword}";
 
 
 
     /**
      * 获取某个信息的叶子节点
      */
-    public static final String SIMILAR_LEAF_KIND_URL = "/search/similarLeafKinds/{keyword}";
+    public static final String SIMILAR_LEAF_KIND_URL = "/search/similarLeafKinds?keyword={keyword}";
 
 
     /**
      * 获取类目的层级
      */
-    public static final String SIMILAR__KIND_LEVEL_URL = "/search/similarKindsByLevel?kindName={kindName}&level={level}";
+    public static final String SIMILAR__KIND_LEVEL_URL = "/search/similarKindsByLevel?keyword={kindName}&level={level}";
 
 
     /**

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

@@ -256,8 +256,8 @@ public class SearcherController {
 	 */
 	@RequestMapping(value = "/similarKeywords", method = RequestMethod.GET)
 	@ResponseBody
-	public List<String> getSimilarKeywords(String keyword) {
-		return (List<String>) searcherService.getSimilarKeywords(keyword).get("all");
+	public Map<String,Object> getSimilarKeywords(String keyword) {
+		return  searcherService.getSimilarKeywords(keyword);
 	}
 
 	/**

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

@@ -1,6 +1,7 @@
 package com.uas.platform.b2c.common.search.rpc.service.Impl;
 
 
+import com.alibaba.fastjson.JSONArray;
 import com.uas.platform.b2c.common.search.constant.SearchUrl;
 import com.uas.platform.b2c.common.search.rpc.service.SearchService;
 import com.uas.platform.b2c.core.config.SysConf;
@@ -215,9 +216,9 @@ public class SearchServiceImpl implements SearchService{
         }else {
             try {
                 List<String> reMapA = FastjsonUtils.fromJson(strA, List.class);
-                List<String> reMapC = FastjsonUtils.fromJson(strC, List.class);
-                List<String> reMapB = FastjsonUtils.fromJson(strB, List.class);
-                List<String> reMapK = FastjsonUtils.fromJson(strK, List.class);
+                List<Object> reMapC = FastjsonUtils.fromJsonArray(strC);
+                List<Object> reMapB = FastjsonUtils.fromJsonArray(strB);
+                List<Object> reMapK = FastjsonUtils.fromJsonArray(strK);
                 map.clear();
                 map.put("all",reMapA);
                 map.put("kind",reMapK);

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

@@ -8,6 +8,8 @@ import com.uas.platform.b2c.common.search.rpc.service.SearchService;
 import com.uas.platform.b2c.common.search.service.SearcherService;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
+import com.uas.platform.b2c.prod.commodity.model.Goods;
 import com.uas.platform.b2c.prod.product.brand.dao.BrandDao;
 import com.uas.platform.b2c.prod.product.component.dao.ComponentGoodsDao;
 import com.uas.platform.b2c.prod.product.component.dao.ComponentInfoDao;
@@ -57,6 +59,9 @@ public class SearcherServiceImpl implements SearcherService {
 	@Autowired
 	private BrandDao brandDao;
 
+	@Autowired
+	private GoodsDao goodsDao;
+
 	@Autowired
 	private SearchHistoryDao searchHistoryDao;
 
@@ -201,11 +206,22 @@ public class SearcherServiceImpl implements SearcherService {
 		List<ComponentGoods> components = new ArrayList<>();
 		if (!CollectionUtils.isEmpty(componentIds)) {
 			for (int i = 0 ;i < componentIds.size() ; i++){
-				Long cid = Long.valueOf(componentIds.get(i).toString());
+				Long cid = null;
+				if(!StringUtils.isEmpty
+						(componentIds.get(i)))  {
+					cid = Long.valueOf(componentIds.get(i).toString());
+				}
 				Long gid = goodsIds.get(i) == null ? 0L : Long.valueOf(goodsIds.get(i).toString());
-				ComponentGoods componentGoods = componentGoodsDao.findByCmpIdAndGoId(cid, gid);
-				if (componentGoods != null){
-					components.add(componentGoods);
+				if((cid == null) && (gid != 0L)) {
+					Goods goods = goodsDao.findOne(gid);
+					if(goods != null) {
+						components.add(new ComponentGoods(goods));
+					}
+				}else if(cid != null){
+					ComponentGoods componentGoods = componentGoodsDao.findByCmpIdAndGoId(cid, gid);
+					if (componentGoods != null){
+						components.add(componentGoods);
+					}
 				}
 			}
 			map.put("components", components);// 当前页器件内容

+ 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 已结束}
 	 */

+ 233 - 220
src/main/java/com/uas/platform/b2c/core/filter/SSOInterceptor.java

@@ -44,246 +44,259 @@ import java.util.*;
  */
 public class SSOInterceptor extends AbstractSSOInterceptor {
 
-	private static final Logger logger = Logger.getLogger(SSOInterceptor.class);
+    private static final Logger logger = Logger.getLogger(SSOInterceptor.class);
 
-	@Autowired
-	private UserService userService;
-	@Autowired
-	private ResourceItemDao resourceItemDao;
-	@Autowired
-	private SigninLogService signinLogService;
-	@Value("#{sys.profile}")
-	private String profile;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private ResourceItemDao resourceItemDao;
+    @Autowired
+    private SigninLogService signinLogService;
+    @Value("#{sys.profile}")
+    private String profile;
 
-	private final DeviceResolver deviceResolver = new LiteDeviceResolver();
+    private final DeviceResolver deviceResolver = new LiteDeviceResolver();
 
-	private HashMap<String, Collection<ConfigAttribute>> resourceMap;
-	private HashMap<Long, Collection<GrantedAuthority>> authorities;
+    private HashMap<String, Collection<ConfigAttribute>> resourceMap;
+    private HashMap<Long, Collection<GrantedAuthority>> authorities;
 
-	private User getUserByToken(SSOToken token) {
-		User authedUser = null;
-		if (token.getData() != null) {
-			com.uas.account.entity.User tokenUser = FlexJsonUtils.fromJson(token.getData(), com.uas.account.entity.User.class);
-			if (!StringUtils.isEmpty(tokenUser.getDialectUID())) {
-				// dialectUID表示client系统自己的唯一标识,比如user_uu,手机号没设置的情况下使用
-				authedUser = userService.findUserByUserUU(Long.parseLong(tokenUser.getDialectUID()));
-			} else if (!StringUtils.isEmpty(tokenUser.getUid())) {
-				// UID表示所有系统公认的唯一标识,这里统一使用手机号
-				authedUser = userService.findUserByUserTel(tokenUser.getUid());
-			} else {
-				logger.error(String.format("invalid user %s, please set uid or dialectUID", tokenUser.getName()));
-			}
-			if (authedUser != null && authedUser.getEnterprises() != null) {
-				// 企业资料在client系统自己的唯一标识,比如en_uu
-				if (tokenUser.getSpaceDialectUID() != null) {
-					authedUser.setCurrentEnterprise(Long.parseLong(tokenUser.getSpaceDialectUID()));
-				} else if (tokenUser.getSpaceUID() != null) {
-					for (Enterprise enterprise : authedUser.getEnterprises()) {
-						// 企业资料在所有系统公认的唯一标识,这里使用商业登记证号
-						if (tokenUser.getSpaceUID().equals(enterprise.getEnBussinessCode())) {
-							authedUser.setEnterprise(enterprise);
-							break;
-						}
-					}
-				}
-			}
-		}
-		return authedUser;
-	}
+    private User getUserByToken(SSOToken token) {
+        User authedUser = null;
+        if (token.getData() != null) {
+            com.uas.account.entity.User tokenUser = FlexJsonUtils.fromJson(token.getData(), com.uas.account.entity.User.class);
+            if (!StringUtils.isEmpty(tokenUser.getDialectUID())) {
+                // dialectUID表示client系统自己的唯一标识,比如user_uu,手机号没设置的情况下使用
+                authedUser = userService.findUserByUserUU(Long.parseLong(tokenUser.getDialectUID()));
+            } else if (!StringUtils.isEmpty(tokenUser.getUid())) {
+                // UID表示所有系统公认的唯一标识,这里统一使用手机号
+                authedUser = userService.findUserByUserTel(tokenUser.getUid());
+            } else {
+                logger.error(String.format("invalid user %s, please set uid or dialectUID", tokenUser.getName()));
+            }
+            if (authedUser != null && authedUser.getEnterprises() != null) {
+                // 企业资料在client系统自己的唯一标识,比如en_uu
+                if (tokenUser.getSpaceDialectUID() != null) {
+                    authedUser.setCurrentEnterprise(Long.parseLong(tokenUser.getSpaceDialectUID()));
+                } else if (tokenUser.getSpaceUID() != null) {
+                    for (Enterprise enterprise : authedUser.getEnterprises()) {
+                        // 企业资料在所有系统公认的唯一标识,这里使用商业登记证号
+                        if (tokenUser.getSpaceUID().equals(enterprise.getEnBussinessCode())) {
+                            authedUser.setEnterprise(enterprise);
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+        return authedUser;
+    }
 
-	@Override
-	protected boolean onAuthenticateFailed(HttpServletRequest request, HttpServletResponse response) {
-		SystemSession.clear();
-		if (request.getRequestURI().endsWith(PathConstant.AUTHENTICATION_URL)) {
-			return true;
-		}
-		response.setStatus(HttpStatus.UNAUTHORIZED.value());
-		if (!isRedirectAble(request)) {
-			try {
-				printJson(response, new ModelMap("loginUrl", getLoginPage(request, response)));
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		}
-		return false;
-	}
+    @Override
+    protected boolean onAuthenticateFailed(HttpServletRequest request, HttpServletResponse response) {
+        SystemSession.clear();
+        if (request.getRequestURI().endsWith(PathConstant.AUTHENTICATION_URL)) {
+            return true;
+        }
+        response.setStatus(HttpStatus.UNAUTHORIZED.value());
+        if (!isRedirectAble(request)) {
+            try {
+                printJson(response, new ModelMap("loginUrl", getLoginPage(request, response)));
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return false;
+    }
 
-	/**
-	 * 输出json格式
-	 * 
-	 * @param obj
-	 * @throws IOException
-	 */
-	protected void printJson(HttpServletResponse response, Object obj) throws IOException {
-		response.addHeader("Content-Type", "application/json; charset=UTF-8");
-		PrintWriter printWriter = response.getWriter();
-		printWriter.append(FlexJsonUtils.toJson(obj));
-		printWriter.flush();
-		printWriter.close();
-	}
+    /**
+     * 输出json格式
+     *
+     * @param obj
+     * @throws IOException
+     */
+    protected void printJson(HttpServletResponse response, Object obj) throws IOException {
+        response.addHeader("Content-Type", "application/json; charset=UTF-8");
+        PrintWriter printWriter = response.getWriter();
+        printWriter.append(FlexJsonUtils.toJson(obj));
+        printWriter.flush();
+        printWriter.close();
+    }
 
-	private String getLoginPage(HttpServletRequest request, HttpServletResponse response) throws IOException {
-		request.getSession().setAttribute(SSOConfig.SSOReferer, request.getHeader("Referer"));
-		SSOHelper.clearLogin(request, response);
-		String redirectUrl = SSOHelper.getRedirectRefererLoginUrl(request);
-		/*boolean cross = SSOHelper.isCrossDomain(request);
+    private String getLoginPage(HttpServletRequest request, HttpServletResponse response) throws IOException {
+        request.getSession().setAttribute(SSOConfig.SSOReferer, request.getHeader("Referer"));
+        SSOHelper.clearLogin(request, response);
+        String redirectUrl;
+        if ("prod".equals(profile)) {
+            redirectUrl = (SSOHelper.getRedirectLoginUrl(request, "https://www.usoftmall.com" + request.getRequestURI()));
+        } else {
+            if (null == request.getParameter("returnURL") || "".equals(request.getParameter("returnURL"))) {
+                redirectUrl = (SSOHelper.getRedirectLoginUrl(request,"http://192.168.253.12:23400" + request.getRequestURI()));
+            } else {
+                redirectUrl = (SSOHelper.getRedirectLoginUrl(request, request.getParameter("returnURL")));
+            }
+        }
+        //String redirectUrl = SSOHelper.getRedirectRefererLoginUrl(request);
+        /*boolean cross = SSOHelper.isCrossDomain(request);
 		if (cross) {
 			// 跨域代理界面
 			redirectUrl = request.getContextPath() + "/login/proxy";
 		}*/
-		return redirectUrl;
-	}
+        return redirectUrl;
+    }
 
-	@Override
-	protected void onAuthenticateSuccess(HttpServletRequest request, HttpServletResponse response) {
-		User user = (User) request.getSession().getAttribute("user");
-		SSOToken token = SSOHelper.attrToken(request);
-		// cookie变化的情况下,session可能还未变化
-		if (user == null || (user.getUserTel() != null && !token.getUid().equals(user.getUserTel()))) {
-			user = getUserByToken(token);
-			if (user != null) {
-				user.setIp(AgentUtils.getIp(request));
-				request.getSession().setAttribute("user", user);
-				setGrantedAuthorities(user);
-			}
-		}
-		if (user != null) {
-			SystemSession.setUser(user);
-			accessDecision(request, user);
-		}
-	}
+    @Override
+    protected void onAuthenticateSuccess(HttpServletRequest request, HttpServletResponse response) {
+        User user = (User) request.getSession().getAttribute("user");
+        SSOToken token = SSOHelper.attrToken(request);
+        // cookie变化的情况下,session可能还未变化
+        if (user == null || (user.getUserTel() != null && !token.getUid().equals(user.getUserTel()))) {
+            user = getUserByToken(token);
+            if (user != null) {
+                user.setIp(AgentUtils.getIp(request));
+                request.getSession().setAttribute("user", user);
+                setGrantedAuthorities(user);
+            }
+        }
+        if (user != null) {
+            SystemSession.setUser(user);
+            accessDecision(request, user);
+        }
+    }
 
-	/**
-	 * 权限验证
-	 */
-	private void accessDecision(HttpServletRequest request, User user) {
-		Collection<ConfigAttribute> configAttributes = getAttributes(request);
-		if (null == configAttributes || configAttributes.size() == 0 || user.isSys()) {
-			return;
-		}
-		Iterator<ConfigAttribute> iterator = configAttributes.iterator();
-		String needPermission = null;
-		if (!authorities.containsKey(user.getUserUU())) {
-			setGrantedAuthorities(user);
-		}
-		Collection<GrantedAuthority> userAuthorities = authorities.get(user.getUserUU());
-		while (iterator.hasNext()) {
-			ConfigAttribute configAttribute = iterator.next();
-			needPermission = configAttribute.getAttribute();
-			if (userAuthorities != null) {
-				for (GrantedAuthority ga : userAuthorities) {
-					if (needPermission.equals(ga.getAuthority())) {
-						return;
-					}
-				}
-			}
-		}
-		if (needPermission != null){
-			return;
+    /**
+     * 权限验证
+     */
+    private void accessDecision(HttpServletRequest request, User user) {
+        Collection<ConfigAttribute> configAttributes = getAttributes(request);
+        if (null == configAttributes || configAttributes.size() == 0 || user.isSys()) {
+            return;
+        }
+        Iterator<ConfigAttribute> iterator = configAttributes.iterator();
+        String needPermission = null;
+        if (!authorities.containsKey(user.getUserUU())) {
+            setGrantedAuthorities(user);
+        }
+        Collection<GrantedAuthority> userAuthorities = authorities.get(user.getUserUU());
+        while (iterator.hasNext()) {
+            ConfigAttribute configAttribute = iterator.next();
+            needPermission = configAttribute.getAttribute();
+            if (userAuthorities != null) {
+                for (GrantedAuthority ga : userAuthorities) {
+                    if (needPermission.equals(ga.getAuthority())) {
+                        return;
+                    }
+                }
+            }
+        }
+        if (needPermission != null) {
+            return;
 //			throw new AccessDeniedException("无法访问,没有 " + needPermission + " 权限!");
-		}
-	}
+        }
+    }
 
-	@Override
-	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
-		try {
-			super.afterCompletion(request, response, handler, ex);
-		} finally {
-			SystemSession.clear();
-		}
-	}
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+        try {
+            super.afterCompletion(request, response, handler, ex);
+        } finally {
+            SystemSession.clear();
+        }
+    }
 
-	/**
-	 * 加载资源,初始化资源变量
-	 * 
-	 */
-	private void loadResourceDefine() {
-		if (resourceMap == null) {
-			resourceMap = new HashMap<String, Collection<ConfigAttribute>>();
-			List<ResourceItem> resources = resourceItemDao.findAll();
-			for (ResourceItem resource : resources) {
-				Collection<ConfigAttribute> configAttributes = new ArrayList<ConfigAttribute>();
-				ConfigAttribute configAttribute = new SecurityConfig(resource.getName());
-				configAttributes.add(configAttribute);
-				resourceMap.put(resource.getMethod() + ":" + resource.getUrl(), configAttributes);
-			}
-		}
-	}
+    /**
+     * 加载资源,初始化资源变量
+     */
+    private void loadResourceDefine() {
+        if (resourceMap == null) {
+            resourceMap = new HashMap<String, Collection<ConfigAttribute>>();
+            List<ResourceItem> resources = resourceItemDao.findAll();
+            for (ResourceItem resource : resources) {
+                Collection<ConfigAttribute> configAttributes = new ArrayList<ConfigAttribute>();
+                ConfigAttribute configAttribute = new SecurityConfig(resource.getName());
+                configAttributes.add(configAttribute);
+                resourceMap.put(resource.getMethod() + ":" + resource.getUrl(), configAttributes);
+            }
+        }
+    }
 
-	/**
-	 * 根据路径获取访问权限的集合接口
-	 * 
-	 * @param request
-	 * @return
-	 * @throws IllegalArgumentException
-	 */
-	public Collection<ConfigAttribute> getAttributes(HttpServletRequest request) throws IllegalArgumentException {
-		if (resourceMap == null)
-			loadResourceDefine();
+    /**
+     * 根据路径获取访问权限的集合接口
+     *
+     * @param request
+     * @return
+     * @throws IllegalArgumentException
+     */
+    public Collection<ConfigAttribute> getAttributes(HttpServletRequest request) throws IllegalArgumentException {
+        if (resourceMap == null)
+            loadResourceDefine();
 
-		for (Iterator<String> iter = resourceMap.keySet().iterator(); iter.hasNext();) {
-			String resourceKey = iter.next();
-			String[] resourceParam = resourceKey.split(":");
-			String resourceMethod = resourceParam[0];
-			String resourceUrl = resourceParam[1];
-			AntPathRequestMatcher matcher = new AntPathRequestMatcher(resourceUrl);
-			if (null != resourceUrl && request.getMethod().equals(resourceMethod) && matcher.matches(request)) {
-				return resourceMap.get(resourceKey);
-			}
-		}
-		return null;
-	}
+        for (Iterator<String> iter = resourceMap.keySet().iterator(); iter.hasNext(); ) {
+            String resourceKey = iter.next();
+            String[] resourceParam = resourceKey.split(":");
+            String resourceMethod = resourceParam[0];
+            String resourceUrl = resourceParam[1];
+            AntPathRequestMatcher matcher = new AntPathRequestMatcher(resourceUrl);
+            if (null != resourceUrl && request.getMethod().equals(resourceMethod) && matcher.matches(request)) {
+                return resourceMap.get(resourceKey);
+            }
+        }
+        return null;
+    }
 
-	private void setGrantedAuthorities(User user) {
-		Set<GrantedAuthority> authSet = new HashSet<GrantedAuthority>();
-		user.setCurrentEnterpriseRoles();
-		Set<Role> roles = user.getRoles();
-		if (!CollectionUtils.isEmpty(roles)) {
-			for (Role role : roles) {
-				if (role.isSys()) {// 超级账号
-					user.setIssys(Constant.YES);
-					break;
-				}
-				Set<ResourceItem> resourceItems = role.getResourceItems();
-				if (!CollectionUtils.isEmpty(resourceItems)) {
-					for (ResourceItem res : resourceItems) {
-						authSet.add(new SimpleGrantedAuthority(res.getName()));
-					}
-				}
-			}
-		}
-		if (authorities == null) {
-			authorities = new HashMap<Long, Collection<GrantedAuthority>>();
-		}
-		authorities.put(user.getUserUU(), authSet);
-	}
+    private void setGrantedAuthorities(User user) {
+        Set<GrantedAuthority> authSet = new HashSet<GrantedAuthority>();
+        user.setCurrentEnterpriseRoles();
+        Set<Role> roles = user.getRoles();
+        if (!CollectionUtils.isEmpty(roles)) {
+            for (Role role : roles) {
+                if (role.isSys()) {// 超级账号
+                    user.setIssys(Constant.YES);
+                    break;
+                }
+                Set<ResourceItem> resourceItems = role.getResourceItems();
+                if (!CollectionUtils.isEmpty(resourceItems)) {
+                    for (ResourceItem res : resourceItems) {
+                        authSet.add(new SimpleGrantedAuthority(res.getName()));
+                    }
+                }
+            }
+        }
+        if (authorities == null) {
+            authorities = new HashMap<Long, Collection<GrantedAuthority>>();
+        }
+        authorities.put(user.getUserUU(), authSet);
+    }
 
-	@Override
-	protected void sendRedirect(HttpServletRequest request, HttpServletResponse response) throws IOException {
-		boolean cross = SSOHelper.isCrossDomain(request);
-		if (cross) {
-			request.getSession().setAttribute("SSOReferer", request.getRequestURL());
-			if ("prod".equals(profile)){
-				response.sendRedirect(SSOHelper.getRedirectLoginUrl(request, "https://www.usoftmall.com"+request.getRequestURI()));
-			}else{
-				response.sendRedirect(SSOHelper.getRedirectLoginUrl(request, request.getParameter("returnURL"))+ "&baseUrl=http://192.168.253.121:3000/login/other" );
-			}
-		} else {
-			SSOHelper.clearRedirectLogin(request, response);
-		}
-	}
+    @Override
+    protected void sendRedirect(HttpServletRequest request, HttpServletResponse response) throws IOException {
+        boolean cross = SSOHelper.isCrossDomain(request);
+        if (cross) {
+            request.getSession().setAttribute("SSOReferer", request.getRequestURL());
+            if ("prod".equals(profile)) {
+                response.sendRedirect(SSOHelper.getRedirectLoginUrl(request, "https://www.usoftmall.com" + request.getRequestURI()));
+            } else {
+                if (null == request.getParameter("returnURL") || "".equals(request.getParameter("returnURL"))) {
+                    response.sendRedirect(SSOHelper.getRedirectLoginUrl(request,"http://192.168.253.12:23400" + request.getRequestURI()));
+                } else {
+                    response.sendRedirect(SSOHelper.getRedirectLoginUrl(request, request.getParameter("returnURL")));
+                }
+            }
+        } else {
+            SSOHelper.clearRedirectLogin(request, response);
+        }
+    }
 
-	private SitePreference getDefaultSitePreferenceForDevice(Device device) {
-		if (device == null) {
-			return null;
-		}
-		if (device.isMobile()) {
-			return SitePreference.MOBILE;
-		}
-		if (device.isTablet()) {
-			return SitePreference.TABLET;
-		}
-		return SitePreference.NORMAL;
-	}
+    private SitePreference getDefaultSitePreferenceForDevice(Device device) {
+        if (device == null) {
+            return null;
+        }
+        if (device.isMobile()) {
+            return SitePreference.MOBILE;
+        }
+        if (device.isTablet()) {
+            return SitePreference.TABLET;
+        }
+        return SitePreference.NORMAL;
+    }
 
 }

+ 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;
+	}
 }

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

@@ -0,0 +1,114 @@
+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.BeanUtils;
+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 existProduct = productExists.get(0);
+                BeanUtils.copyProperties(product, productExists.get(0), "id");
+                existProduct.setCmpUuId(null);// 将已存在的变更过物料uuid置为null,以便后续进行重新匹配
+                products.add(existProduct);
+            } else {
+                products.add(product);
+            }
+        }
+        productDao.save(products);// 保存上传的物料
+
+        logger.log("物料资料",  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);
 
 			//转账和订单的关联信息

+ 5 - 4
src/main/java/com/uas/platform/b2c/logistics/service/impl/AddressServiceImpl.java

@@ -148,6 +148,7 @@ public class AddressServiceImpl implements AddressService {
 					num =addressDao.getCountByUseruuTypeUsetypeAndDissociative(user.getUserUU(),address.getType(), address.getUsetype(), Type.PERSONAL.value());
 				}
 			}else {
+				address.setUseruu(user.getUserUU());
 				address.setEnuu(user.getEnterprise().getUu());
 				address.setUsetype((short)2);
 				num = addressDao.getCountByEnuuAndTypeAndUsetype(user.getEnterprise().getUu(), address.getType(), address.getUsetype());
@@ -156,13 +157,13 @@ public class AddressServiceImpl implements AddressService {
 		}
 		Long modifyId = address.getId();
 		Address add = save(address);
-		if (modifyId == null && add.getNum().intValue() == 1){
+		if (modifyId == null && add.getNum() == 1){
 			isSetTop = true;
 		}
 		if(modifyId == null || isSetTop) { //只有新增加的地址 或者需要被置顶的地址 才需要重新排序。
 			setTop(add.getId(), isSetTop);
 		}
-		if (address.getNum().intValue() == 1 && !isSetTop) { //取消默认地址的时候需要重新排序
+		if (address.getNum() == 1 && !isSetTop) { //取消默认地址的时候需要重新排序
 			setTop(add.getId(), isSetTop);
 		}
 		return add;
@@ -173,9 +174,9 @@ public class AddressServiceImpl implements AddressService {
 		List<Address> address = new ArrayList<Address>();
 		if (send) {
 			if (enuu != null) {
-				address = addressDao.findByUseruuAndEnuuAndTypeAndUsetypeOrderByNumAsc(useruu, enuu, Type.Address_Sending_Code.value(), (short)1);
+				address = addressDao.findByEnuuAndTypeAndUsetypeOrderByNumAsc(enuu, Type.Address_Sending_Code.value(), (short)2);
 			} else {
-				address = addressDao.findByUseruuAndTypeAndUsetypeAndDissociative(useruu, Type.Address_Sending_Code.value(), (short)1, Type.PERSONAL.value());
+				address = addressDao.findByUseruuAndTypeAndUsetypeAndDissociative(useruu, Type.Address_Sending_Code.value(), (short)2, Type.PERSONAL.value());
 			}
 		} else {
 			if (enuu != null) {

+ 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();

+ 7 - 5
src/main/java/com/uas/platform/b2c/prod/commodity/controller/GoodsController.java

@@ -95,9 +95,9 @@ public class GoodsController {
 		PageInfo info = new PageInfo(params);
 		Long enUU = SystemSession.getUser().getEnterprise().getUu();
 		info.filter("enUU", enUU);
-		if (status.equals("AVAILABLE")) {
+		if ("AVAILABLE".equals(status)) {
 			info.filter("status", Status.AVAILABLE.value());
-		} else if (status.equals("UNAVAILABLE")) {
+		} else if ("UNAVAILABLE".equals(status)) {
 			info.filter("status", Status.UNAVAILABLE.value());
 		}
 		Page<Goods> page = goodsService.findPageByStatus(info, keyword);
@@ -116,9 +116,9 @@ public class GoodsController {
     @RequestMapping(value = "/saling/admin", method = RequestMethod.GET)
 	public Page<Goods> findSalingGoodsAdmin(PageParams params, String status, String keyword) {
 		PageInfo info = new PageInfo(params);
-		if (status.equals("AVAILABLE")) {
+		if ("AVAILABLE".equals(status)) {
 			info.filter("status", Status.AVAILABLE.value());
-		} else if (status.equals("UNAVAILABLE")) {
+		} else if ("UNAVAILABLE".equals(status)) {
 			info.filter("status", Status.UNAVAILABLE.value());
 		}
 		Page<Goods> page = goodsService.findPageByStatus(info, keyword);
@@ -214,7 +214,8 @@ public class GoodsController {
     @RequestMapping(value = "/simple/byUuidAndCurrency", method = RequestMethod.GET, params = "_status=available")
 	@ResponseBody
 	public List<GoodsSimple> findSimpleAvailableByUuid(String uuid, String currencyName) {
-		if (StringUtils.isEmpty(currencyName) || "without".equals(currencyName)) {// 不进行币别筛选
+		// 不进行币别筛选
+		if (StringUtils.isEmpty(currencyName) || "without".equals(currencyName)) {
 			logger.log("商品批次", "根据商品uuid获取有效的商品批次", "uuid: " + uuid);
 			return goodsService.findSimpleAvailableByUuid(uuid);
 		} else {
@@ -313,6 +314,7 @@ public class GoodsController {
 	public Goods findByBatchCode(@PathVariable String batchCode) {
 		batchCode = StringUtilB2C.decodeValue(batchCode);
 		Goods goods = goodsService.findGoodsByBatchCode(batchCode);
+		goodsService.addVisitCount(batchCode);
 		logger.log("商品批次", "根据批次号获取商品信息", "批次号:" + batchCode);
 		return goods;
 	}

+ 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);
+	}
 }

+ 37 - 1
src/main/java/com/uas/platform/b2c/prod/commodity/dao/GoodsDao.java

@@ -409,7 +409,7 @@ public interface GoodsDao extends JpaSpecificationExecutor<Goods>, JpaRepository
      * @param storeUuid 店铺UUID
      * @return the set
      */
-    @Query(value = "select distinct g.kindUuid from Goods g where g.storeid = :storeUuid and g.status=601")
+    @Query(value = "select distinct g.kindUuid from Goods g where g.storeid = :storeUuid and g.status=601 and g.kindUuid is not null")
 	Set<Long> findAllKindsByStoreUuid(@Param("storeUuid") String storeUuid);
 
     /**
@@ -495,4 +495,40 @@ 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);
+
+    /**
+     * 产品点击次数加一
+     * @param batchCode
+     * @return
+     */
+    @Modifying
+    @Transactional
+    @Query( nativeQuery = true, value = "update trade$goods set go_visit_count = ifnull(go_visit_count, 0) + 1 where go_batchcode = :batchCode")
+    public void addVisitCount(@Param("batchCode") String batchCode);
 }

+ 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);
 	}

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

@@ -12,6 +12,7 @@ import com.uas.platform.b2c.core.support.SystemSession;
 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.core.exception.IllegalOperatorException;
 import com.uas.platform.core.model.EncodingRulesConstant;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.Row;
@@ -55,6 +56,10 @@ public class ProductImportHistFacadeImpl implements ProductImportHistFacade {
     public ResultMap productImportByExcel(Workbook workbook) {
         Sheet sheet = workbook.getSheetAt(0);
         int rowNum = sheet.getLastRowNum();
+        if(rowNum > 2000) {
+            throw new IllegalOperatorException
+                    ("您上传的信息超过了我们的设置2000条上限,请您控制上传的文件在2000条以内");
+        }
         Row headerRow = sheet.getRow(0);
         if(!validProductImportHeaderInfo(headerRow)) {
             return new ResultMap(CodeType.PARAMETER_ERROR, "表头与模板中的表头不一致,请在模板中填写相应的数据");

+ 15 - 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;
 
@@ -212,6 +212,12 @@ public class Goods implements Serializable {
 	@Transient
 	private Double oldReserve;
 
+	/**
+	 * 单位
+	 */
+	@Column(name = "go_unit")
+	private String unit;
+
 	/**
 	 * 发布备注
 	 */
@@ -561,6 +567,14 @@ public class Goods implements Serializable {
 		this.img = img;
 	}
 
+	public String getUnit() {
+		return unit;
+	}
+
+	public void setUnit(String unit) {
+		this.unit = unit;
+	}
+
 	public String getKindNameCn() {
 		return kindNameCn;
 	}

+ 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;
+    }
+}

+ 17 - 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);
+
     /**
      * 批量发布(上架)商品,
      *
@@ -538,4 +548,11 @@ public interface GoodsService {
      * @return
      */
     ResultMap updateGoodsRelateInfo(List<Order> orders, List<Cart> carts, List<GoodsBrowsingHistory> browsingHistoryList, Product product, ProductStandardPutOnInfo putOnInfo, GoodsHistory goodsHistory, Goods goods);
+
+    /**
+     * 商品点击次数加一
+     * @param uuid
+     * @return
+     */
+    public void addVisitCount(String batchCode);
 }

+ 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);
 }

+ 30 - 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) {
@@ -798,6 +819,10 @@ public class GoodsServiceImpl implements GoodsService {
 		List<Goods> goodses = new ArrayList<Goods>();
 		Sheet sheet = workbook.getSheetAt(0);
 		int rowNum = sheet.getLastRowNum();
+		if(rowNum > 2000) {
+			throw new IllegalOperatorException
+					("信息超过2000条,请拆分成2000条以内");
+		}
 		Row headerRow = sheet.getRow(0);
 		try {
 			if (headerRow != null) {
@@ -2354,4 +2379,9 @@ public class GoodsServiceImpl implements GoodsService {
 		goodsHistoryService.save(goodsHistory);
 		return ResultMap.success(null);
 	}
+
+	@Override
+	public void addVisitCount(String batchCode) {
+		goodsDao.addVisitCount(batchCode);
+	}
 }

+ 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);
+    }
 }
 

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

@@ -108,6 +108,11 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 			throw new IllegalOperatorException("您上传的信息列信息不正确,请与模板的列做比较");
 		}
 		int rowNum = sheet.getLastRowNum();
+		if(rowNum > 2000) {
+			throw new IllegalOperatorException
+					("您上传的信息超过2000条,请拆分成2000" +
+							"以再在上传");
+		}
 		String batch = createNumberService.getTimeNumber("product$goods", 8, rowNum);
 		StoreIn storeIn = getStoreInfo(selfSale);
 		String storeid = storeIn.getUuid(), storeName = storeIn.getStoreName();

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

@@ -45,6 +45,26 @@ public class BrandController {
 		return brandService.getAllBrandInfo();
 	}
 
+	/**
+	 * 查找已推广的按权重排序的品牌信息
+	 *
+	 * @return 品牌简易信息
+	 */
+	@RequestMapping(value = "/Info/weight", method = RequestMethod.GET)
+	public List<BrandInfo> getBrankInfoOrderByWeight() {
+		return brandService.getAllBrandInfoByWeight();
+	}
+
+	/**
+	 * 修改某个品牌的 权重
+	 *
+	 * @return 品牌简易信息
+	 */
+	@RequestMapping(value = "/Info/weight", method = RequestMethod.PUT)
+	public BrandInfo updateBrankInfoOrderByWeight(@RequestBody BrandInfo brandInfo ,@RequestParam Double weight) {
+		return brandService.updateBrankInfoOrderByWeight(brandInfo,weight);
+	}
+
 	/**
 	 * 获取按首字母分组的品牌信息
 	 * @return 品牌简易信息
@@ -110,6 +130,7 @@ public class BrandController {
 	 */
 	@RequestMapping(value = "/{uuid}")
 	private Brand findByUuid(@PathVariable("uuid") String uuid) {
+		brandService.addVisitCount(uuid);
 		return brandService.findByUuid(uuid);
 	}
 

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

@@ -52,6 +52,7 @@ public class BrandController {
 	 */
 	@RequestMapping(value = "/{uuid}", method = RequestMethod.GET)
 	public Brand findByUuid(@PathVariable("uuid") String uuid) {
+		brandService.addVisitCount(uuid);
 		return brandService.findByUuid(uuid);
 	}
 

+ 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;
 	}
 }

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

@@ -7,11 +7,13 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
 import com.uas.platform.b2c.prod.product.brand.modal.Brand;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 品牌
@@ -78,4 +80,14 @@ public interface BrandDao extends JpaSpecificationExecutor<Brand>, JpaRepository
 	 */
 	@Query(value = "select b from Brand b  where b.inital in :initals and (b.nameEn like %:keyword% or b.nameCn like %:keyword%)")
 	public Page<Brand> findInInitalsPage(@Param("initals") String[] initals ,@Param("keyword") String keyword, Pageable pageable);
+
+	/**
+	 * 器件点击次数加一
+	 * @param uuid
+	 * @return
+	 */
+	@Modifying
+	@Transactional
+	@Query( nativeQuery = true, value = "update product$brand b set b.br_visit_count = ifnull(b.br_visit_count, 0) + 1 where b.br_uuid = :uuid")
+	public void addVisitCount(@Param("uuid") String uuid);
 }

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

@@ -66,4 +66,19 @@ public interface BrandInfoDao extends JpaSpecificationExecutor<BrandInfo>, JpaRe
 	 */
 	@Query(nativeQuery = true, value = "select * from product$brand where br_inital in :initals")
 	public List<BrandInfo> findInInitals(@Param("initals") String[] initals);
+
+	/**
+	 * 根据权重倒序排列品牌信息
+	 * @return
+	 */
+	@Query(value = "select b from BrandInfo b where b.weight is not null and b.weight <> 0 order by b.weight desc")
+	public List<BrandInfo> findByWeight();
+
+	/**
+	 * 根据权重倒序排列品牌信息
+	 * @return
+	 */
+	@Modifying
+	@Query(value = "update BrandInfo b set b.weight = :increaseNum where b.uuid = :uuid")
+	public int setWeight(@Param("uuid") String uuid, @Param("increaseNum") Double increaseNum);
 }

+ 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;
 
 	/**

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

@@ -42,6 +42,19 @@ public interface BrandService {
 	 */
 	public List<BrandInfo> getAllBrandInfo();
 
+	/**
+	 * 查找已推广的按权重排序的品牌信息
+	 * @author wangdy
+	 * @return 品牌简易信息
+	 */
+	public List<BrandInfo> getAllBrandInfoByWeight();
+
+	/**
+	 * 修改某个品牌的 权重
+	 * @return 品牌简易信息
+	 */
+	public BrandInfo updateBrankInfoOrderByWeight(BrandInfo brandInfo , Double weight);
+
 	/**
 	 * 获取按首字母分组的品牌信息
 	 * @return 品牌简易信息
@@ -165,4 +178,11 @@ public interface BrandService {
 	 * @return 品牌信息
 	 */
 	public List<BrandMostSimpleInfo> getBatchBrandMostSimpleInfs(List<Long> batchIds);
+
+	/**
+	 * 器件点击次数加一
+	 * @param uuid
+	 * @return
+	 */
+	public void addVisitCount(String uuid);
 }

+ 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);
+
 }

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

@@ -26,6 +26,7 @@ import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 
 import javax.persistence.criteria.CriteriaBuilder;
@@ -62,6 +63,18 @@ public class BrandServiceImpl implements BrandService {
 		return brandInfoDao.findAll();
 	}
 
+	@Override
+	public List<BrandInfo> getAllBrandInfoByWeight() {
+		return brandInfoDao.findByWeight();
+	}
+
+	@Override
+	@Transactional
+	public BrandInfo updateBrankInfoOrderByWeight(BrandInfo brandInfo , Double weight) {
+		brandInfoDao.setWeight(brandInfo.getUuid(),weight);
+		return brandInfoDao.findOne(brandInfo.getId());
+	}
+
 	@Override
 	public Map<String, List<BrandInfo>> getInitialSimpleInfo() {
 		List<BrandInfo> brands = brandInfoDao.findAll();
@@ -371,4 +384,9 @@ public class BrandServiceImpl implements BrandService {
 		}
 		return brandMostSimpleInfoDao.findBatchBrands(batchIds);
 	}
+
+	@Override
+	public void addVisitCount(String uuid) {
+		brandDao.addVisitCount(uuid);
+	}
 }

+ 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;
     }
 

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

@@ -166,6 +166,7 @@ public class ComponentController {
 		// 获取user信息 方便获取器件信息时 能根据是否登录 返回不同的附件链接,不登陆 不能看附件信息。
 		User user = (User) request.getSession().getAttribute("user");
 		SystemSession.setUser(user);
+		componentService.addVisitCount(uuid);
 		return componentService.findByUuid(uuid);
 	}
 

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

@@ -4,14 +4,12 @@ import java.util.List;
 
 import javax.persistence.QueryHint;
 
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.jpa.repository.QueryHints;
+import org.springframework.data.jpa.repository.*;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
 import com.uas.platform.b2c.prod.product.component.modal.Component;
+import org.springframework.transaction.annotation.Transactional;
 
 @Repository
 public interface ComponentDao extends JpaSpecificationExecutor<Component>, JpaRepository<Component, Long> {
@@ -122,4 +120,14 @@ public interface ComponentDao extends JpaSpecificationExecutor<Component>, JpaRe
 	 */
 	@Query("select count(1) from Component")
 	public Integer findAllCount();
+
+	/**
+	 * 器件点击次数加一
+	 * @param uuid
+	 * @return
+	 */
+	@Modifying
+	@Transactional
+	@Query( nativeQuery = true, value = "update product$component set cmp_visit_count = ifnull(cmp_visit_count, 0) + 1 where cmp_uuid = :uuid")
+	public void addVisitCount(@Param("uuid") String uuid);
 }

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

@@ -1,6 +1,7 @@
 package com.uas.platform.b2c.prod.product.component.modal;
 
 import com.alibaba.fastjson.annotation.JSONField;
+import com.uas.platform.b2c.prod.commodity.model.Goods;
 import com.uas.platform.b2c.prod.commodity.model.GoodsQtyPrice;
 import com.uas.platform.b2c.prod.product.brand.modal.BrandInfo;
 import com.uas.platform.b2c.prod.product.kind.model.KindInfo;
@@ -146,6 +147,11 @@ public class ComponentGoods implements Serializable {
 	@Transient
 	private boolean hasSample;
 
+	@Transient
+	private String brandEn;
+
+	@Transient
+	private String kindName;
 	/**
 	 * 本批次的库存数量
 	 */
@@ -290,6 +296,22 @@ public class ComponentGoods implements Serializable {
 		return b2cMaxDelivery;
 	}
 
+	public String getBrandEn() {
+		return brandEn;
+	}
+
+	public void setBrandEn(String brandEn) {
+		this.brandEn = brandEn;
+	}
+
+	public String getKindName() {
+		return kindName;
+	}
+
+	public void setKindName(String kindName) {
+		this.kindName = kindName;
+	}
+
 	public void setB2cMaxDelivery(Short b2cMaxDelivery) {
 		this.b2cMaxDelivery = b2cMaxDelivery;
 	}
@@ -568,4 +590,56 @@ public class ComponentGoods implements Serializable {
 		this.breakUp = breakUp;
 		return this;
 	}
+
+    public ComponentGoods() {
+    }
+	public ComponentGoods(Goods goods) {
+		this.cmpId = 0L;
+		this.goId = goods.getId();
+		this.code = goods.getCode();
+		this.img = goods.getImg();
+		this.uuid = goods.getUuid();
+		this.breakUp = goods.getBreakUp();
+		this.batchCode = goods.getBatchCode();
+		this.minpriceusd = goods
+				.getMinPriceUSD() == null ? ""
+				: goods
+				.getMinPriceUSD().toString();
+		this.minpricermb = goods
+				.getMinPriceRMB() == null ? ""
+				: goods
+				.getMinPriceRMB().toString();
+		this.status = goods.getStatus();
+		this.kindid = goods.getKindUuid();
+		this.brandEn = goods.getBrandNameEn();
+		this.kindName = goods.getKindNameCn();
+		this.brandid = goods.getBrandid();
+//		this. BrandInfo brand;
+//		this. KindInfo kind;
+		this.attach = goods.getAttach();
+		this.sampleQty = goods.getSampleQty();
+		this.sampleAppliedQty = goods
+				.getSampleAppliedQty();
+		this.reserve = goods.getReserve();
+		this.unit = goods.getUnit();
+		this.qtyPrice = goods.getQtyPrice();
+		this.currencyName = goods
+				.getCurrencyName();
+		this.cmpReserve = 0d;
+		this.produceDate = goods.getProduceDate();
+		this.original = goods.getOriginal();
+		this.packaging = goods.getPackaging();
+		this.encapsulation = goods
+				.getEncapsulation();
+		this.minPackQty = goods.getMinPackQty();
+		this.minBuyQty = goods.getMinBuyQty();
+		this.updateDate = goods.getUpdateDate();
+		this.b2cMaxDelivery = goods
+				.getB2cMaxDelivery();
+		this.b2cMinDelivery = goods
+				.getB2cMinDelivery();
+		this.shipArea = goods.getShipArea();
+		this.storeId = goods.getStoreid();
+		this.storeName = goods.getStoreName();
+	}
 }

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

@@ -210,4 +210,11 @@ public interface ComponentService {
 	 * @return 器件信息
 	 */
 	List<ComponentInfo> getBatchComponents(List<Long> batchIds);
+
+	/**
+	 * 器件点击次数加一
+	 * @param uuid
+	 * @return
+	 */
+	public void addVisitCount(String uuid);
 }

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

@@ -544,4 +544,8 @@ public class ComponentServiceImpl implements ComponentService {
 		return componentInfoDao.findByBatchids(batchIds);
 	}
 
+	@Override
+	public void addVisitCount(String uuid) {
+		componentDao.addVisitCount(uuid);
+	}
 }

+ 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

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff