Explorar el Código

Merge branch 'hotfix-yuj-1009' into release-lottery-wangcz

# Conflicts:
#	src/main/webapp/WEB-INF/spring/webmvc.xml
yujia hace 7 años
padre
commit
9c2bce6d15
Se han modificado 100 ficheros con 1935 adiciones y 653 borrados
  1. 1 1
      src/main/java/com/uas/platform/b2c/advertise/ad/service/impl/FloorsServiceImpl.java
  2. 21 11
      src/main/java/com/uas/platform/b2c/common/account/model/UsageLog.java
  3. 1 1
      src/main/java/com/uas/platform/b2c/common/account/service/impl/EnterpriseServiceImpl.java
  4. 9 1
      src/main/java/com/uas/platform/b2c/common/base/service/impl/RestSmsServiceImpl.java
  5. 0 1
      src/main/java/com/uas/platform/b2c/common/lottery/controller/LotteryController.java
  6. 0 1
      src/main/java/com/uas/platform/b2c/common/lottery/service/WinningHistoryService.java
  7. 3 2
      src/main/java/com/uas/platform/b2c/common/lottery/service/impl/ActivityItemServiceImpl.java
  8. 3 3
      src/main/java/com/uas/platform/b2c/common/lottery/service/impl/LotteryServiceImpl.java
  9. 3 2
      src/main/java/com/uas/platform/b2c/common/lottery/service/impl/PrizeServiceImpl.java
  10. 3 2
      src/main/java/com/uas/platform/b2c/common/lottery/service/impl/UserInfoServiceImpl.java
  11. 3 3
      src/main/java/com/uas/platform/b2c/common/lottery/service/impl/WinningHistoryServiceImpl.java
  12. 0 3
      src/main/java/com/uas/platform/b2c/common/message/service/InternalMessageService.java
  13. 2 3
      src/main/java/com/uas/platform/b2c/common/search/controller/SearcherController.java
  14. 13 29
      src/main/java/com/uas/platform/b2c/common/weixin/contoller/WeChatController.java
  15. 3 1
      src/main/java/com/uas/platform/b2c/common/weixin/model/MessageModel.java
  16. 11 5
      src/main/java/com/uas/platform/b2c/common/weixin/service/impl/WeChatServiceImpl.java
  17. 4 5
      src/main/java/com/uas/platform/b2c/common/weixin/util/CheckoutUtil.java
  18. 0 1
      src/main/java/com/uas/platform/b2c/common/weixin/util/HttpReqUtil.java
  19. 6 1
      src/main/java/com/uas/platform/b2c/core/constant/ReleaseStatus.java
  20. 2 2
      src/main/java/com/uas/platform/b2c/core/filter/SSOInterceptor.java
  21. 1 1
      src/main/java/com/uas/platform/b2c/core/support/mq/PushUtils.java
  22. 17 1
      src/main/java/com/uas/platform/b2c/core/support/view/JxlsExcelView.java
  23. 10 4
      src/main/java/com/uas/platform/b2c/core/utils/StringUtilB2C.java
  24. 6 2
      src/main/java/com/uas/platform/b2c/external/erp/order/api/OrderController.java
  25. 0 1
      src/main/java/com/uas/platform/b2c/external/erp/order/service/impl/InvoiceNotifyServiceImpl.java
  26. 8 3
      src/main/java/com/uas/platform/b2c/fa/payment/controller/BankInfoController.java
  27. 10 2
      src/main/java/com/uas/platform/b2c/fa/payment/service/impl/BankTransferServiceImpl.java
  28. 12 2
      src/main/java/com/uas/platform/b2c/fa/settlement/model/Refund.java
  29. 11 2
      src/main/java/com/uas/platform/b2c/fa/settlement/model/RefundDetail.java
  30. 5 1
      src/main/java/com/uas/platform/b2c/fa/settlement/service/impl/RefundServiceImpl.java
  31. 7 3
      src/main/java/com/uas/platform/b2c/logistics/controller/InvoiceController.java
  32. 2 1
      src/main/java/com/uas/platform/b2c/logistics/controller/InvoiceFOrderController.java
  33. 2 1
      src/main/java/com/uas/platform/b2c/logistics/controller/InvoiceFPurchaseController.java
  34. 1 2
      src/main/java/com/uas/platform/b2c/logistics/dao/InvoiceDao.java
  35. 0 1
      src/main/java/com/uas/platform/b2c/logistics/dao/InvoiceDetailDao.java
  36. 0 2
      src/main/java/com/uas/platform/b2c/logistics/dao/InvoiceFOrderDao.java
  37. 13 2
      src/main/java/com/uas/platform/b2c/logistics/model/Invoice.java
  38. 9 3
      src/main/java/com/uas/platform/b2c/logistics/model/InvoiceDetail.java
  39. 1 3
      src/main/java/com/uas/platform/b2c/logistics/model/InvoiceFOrder.java
  40. 8 1
      src/main/java/com/uas/platform/b2c/logistics/model/InvoiceFOrderDetail.java
  41. 1 1
      src/main/java/com/uas/platform/b2c/logistics/model/InvoiceFPurchase.java
  42. 8 1
      src/main/java/com/uas/platform/b2c/logistics/model/InvoiceFPurchaseDetail.java
  43. 10 2
      src/main/java/com/uas/platform/b2c/logistics/model/Receipt.java
  44. 8 1
      src/main/java/com/uas/platform/b2c/logistics/model/ReceiptDetail.java
  45. 0 2
      src/main/java/com/uas/platform/b2c/logistics/service/InvoiceFOrderDetailService.java
  46. 5 1
      src/main/java/com/uas/platform/b2c/logistics/service/InvoiceService.java
  47. 1 2
      src/main/java/com/uas/platform/b2c/logistics/service/impl/InvoiceFOrderDetailServiceImpl.java
  48. 27 6
      src/main/java/com/uas/platform/b2c/logistics/service/impl/InvoiceServiceImpl.java
  49. 10 2
      src/main/java/com/uas/platform/b2c/logistics/service/impl/ReceiptServiceImpl.java
  50. 6 1
      src/main/java/com/uas/platform/b2c/logistics/util/ModelConvertUtil.java
  51. 5 0
      src/main/java/com/uas/platform/b2c/prod/commodity/constant/StringConstant.java
  52. 20 0
      src/main/java/com/uas/platform/b2c/prod/commodity/constant/UploadConstant.java
  53. 14 3
      src/main/java/com/uas/platform/b2c/prod/commodity/controller/ProductController.java
  54. 14 28
      src/main/java/com/uas/platform/b2c/prod/commodity/controller/ReleaseProductByBatchController.java
  55. 27 6
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/ReleaseProductByBatchDao.java
  56. 18 4
      src/main/java/com/uas/platform/b2c/prod/commodity/model/CommodityInOutbound.java
  57. 18 8
      src/main/java/com/uas/platform/b2c/prod/commodity/model/Goods.java
  58. 9 1
      src/main/java/com/uas/platform/b2c/prod/commodity/model/GoodsHistory.java
  59. 10 2
      src/main/java/com/uas/platform/b2c/prod/commodity/model/InOutboundDetail.java
  60. 5 1
      src/main/java/com/uas/platform/b2c/prod/commodity/model/ModifyInfo.java
  61. 10 1
      src/main/java/com/uas/platform/b2c/prod/commodity/model/Product.java
  62. 5 1
      src/main/java/com/uas/platform/b2c/prod/commodity/model/ProductPrivate.java
  63. 18 139
      src/main/java/com/uas/platform/b2c/prod/commodity/model/ReleaseProductByBatch.java
  64. 9 2
      src/main/java/com/uas/platform/b2c/prod/commodity/model/V_ProductPerson.java
  65. 9 2
      src/main/java/com/uas/platform/b2c/prod/commodity/model/V_ProductPrivate.java
  66. 0 1
      src/main/java/com/uas/platform/b2c/prod/commodity/service/CommodityInOutboundService.java
  67. 12 2
      src/main/java/com/uas/platform/b2c/prod/commodity/service/GoodsService.java
  68. 8 3
      src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java
  69. 76 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/ReleaseProductByBatchService.java
  70. 11 11
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/CommodityInOutboundServiceImpl.java
  71. 85 9
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java
  72. 7 2
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/InOutboundDetailServiceImpl.java
  73. 12 3
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductPrivateServiceImpl.java
  74. 71 14
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductServiceImpl.java
  75. 274 247
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ReleaseProductByBatchServiceImpl.java
  76. 10 2
      src/main/java/com/uas/platform/b2c/prod/product/common/CommonTask.java
  77. 13 2
      src/main/java/com/uas/platform/b2c/prod/product/common/api/CommonCountController.java
  78. 2 0
      src/main/java/com/uas/platform/b2c/prod/product/kind/api/KindController.java
  79. 18 1
      src/main/java/com/uas/platform/b2c/prod/store/api/OrderController.java
  80. 1 1
      src/main/java/com/uas/platform/b2c/prod/store/facade/impl/StoreApplyFacadeImpl.java
  81. 8 1
      src/main/java/com/uas/platform/b2c/prod/store/model/StoreApply.java
  82. 7 1
      src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreApplyServiceImpl.java
  83. 18 2
      src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreInServiceImpl.java
  84. 40 0
      src/main/java/com/uas/platform/b2c/trade/b2b/controller/B2bSaleOrderController.java
  85. 12 2
      src/main/java/com/uas/platform/b2c/trade/order/controller/OrderController.java
  86. 121 0
      src/main/java/com/uas/platform/b2c/trade/order/controller/PurchaseProductController.java
  87. 9 0
      src/main/java/com/uas/platform/b2c/trade/order/dao/OrderDao.java
  88. 10 0
      src/main/java/com/uas/platform/b2c/trade/order/dao/PurchaseDao.java
  89. 30 3
      src/main/java/com/uas/platform/b2c/trade/order/model/Order.java
  90. 1 1
      src/main/java/com/uas/platform/b2c/trade/order/model/OrderDetail.java
  91. 1 1
      src/main/java/com/uas/platform/b2c/trade/order/model/OrderIndex.java
  92. 1 1
      src/main/java/com/uas/platform/b2c/trade/order/model/OrderSimpleInfo.java
  93. 45 2
      src/main/java/com/uas/platform/b2c/trade/order/model/Purchase.java
  94. 4 0
      src/main/java/com/uas/platform/b2c/trade/order/model/PurchaseDetail.java
  95. 30 2
      src/main/java/com/uas/platform/b2c/trade/order/service/OrderService.java
  96. 34 0
      src/main/java/com/uas/platform/b2c/trade/order/service/PurchaseProductService.java
  97. 9 0
      src/main/java/com/uas/platform/b2c/trade/order/service/PurchaseService.java
  98. 9 2
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderDetailServiceImpl.java
  99. 77 4
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderServiceImpl.java
  100. 391 0
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/PurchaseProductServiceImpl.java

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

@@ -120,7 +120,7 @@ public class FloorsServiceImpl implements FloorsService {
 					home.put("name", goods1.getCode());
 					home.put("body", goods1.getBrandNameEn() + "<br/>" + goods1.getKindNameCn());
 					home.put("pictureUrl", goods1.getImg());
-					home.put("hrefUrl", "http://www.usoftmall.com/store/batchInfo/" + goods1.getBatchCode());
+					home.put("hrefUrl", "http://mall.usoftchina.com/store/batchInfo/" + goods1.getBatchCode());
 					break;
 				}
 			}

+ 21 - 11
src/main/java/com/uas/platform/b2c/common/account/model/UsageLog.java

@@ -6,9 +6,16 @@ import com.uas.platform.core.logging.BufferedLogable;
 import org.codehaus.jackson.annotate.JsonIgnore;
 import org.springframework.util.StringUtils;
 
-import javax.persistence.*;
-import java.io.Serializable;
-import java.util.Date;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Index;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+import java.io.*;
 
 /**
  * 平台使用日志
@@ -237,7 +244,7 @@ public class UsageLog extends BufferedLogable implements Serializable {
 		this.detail = detail;
 		this.code = code;
 		this.key = key;
-		this.time = new Date().getTime();
+		this.time = System.currentTimeMillis();
 		if(SystemSession.getUser() != null) {
 			this.userUU = SystemSession.getUser().getUserUU();
 			this.enUU = SystemSession.getUser().getEnterprise() != null ? SystemSession.getUser().getEnterprise().getUu() : null;
@@ -253,7 +260,7 @@ public class UsageLog extends BufferedLogable implements Serializable {
 		this.detail = detail;
 		this.code = code;
 		this.key = key;
-		this.time = new Date().getTime();
+		this.time = System.currentTimeMillis();
 		if(SystemSession.getUser() != null) {
 			this.ip = SystemSession.getUser().getIp();
 		}
@@ -265,20 +272,23 @@ public class UsageLog extends BufferedLogable implements Serializable {
 		this.message = message;
 		this.code = code;
 		this.key = key;
-		this.time = new Date().getTime();
+		this.time = System.currentTimeMillis();
 		this.userUU = userUU;
 		this.ip = ip;
 	}
 
-	public void bufferedLog(String bufferedMessage) {
+	@Override
+    public void bufferedLog(String bufferedMessage) {
 		String[] strArray = bufferedMessage.split(separator);
 		if (strArray.length == 9) {
 			this.time = Long.parseLong(strArray[0]);
 			this.ip = strArray[1];
-			if (!"null".equals(strArray[2]))
-				this.enUU = Long.parseLong(strArray[2]);
-			if (!"null".equals(strArray[3]))
-				this.userUU = Long.parseLong(strArray[3]);
+			if (!"null".equals(strArray[2])) {
+                this.enUU = Long.parseLong(strArray[2]);
+            }
+			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;

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

@@ -255,7 +255,7 @@ public class EnterpriseServiceImpl implements EnterpriseService{
 			JSONObject data = JSON.parseObject(JSON.toJSONString(detail));
 			String userSpa = data.toJSONString();
 			// 调用账户中心的接口注册企业,账户中心不会回调保存,需要我们自己保存,以实现同步
-			detail = AccountUtils.register(detail, userView, false);
+//			detail = AccountUtils.register(detail, userView, false);
 			// 自己保存企业到商城数据库
 			v2EnterpriserService.update(detail);
 		} catch (Exception e) {

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

@@ -6,6 +6,8 @@ import com.uas.message.common.domain.SimpleMessage;
 import com.uas.message.sms.domain.SmsLog;
 import com.uas.message.sms.service.SmsService;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.platform.b2c.fa.settlement.service.ExchangeRateService;
+import com.uas.platform.b2c.trade.util.BoundedExecutor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpEntity;
@@ -20,6 +22,8 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 /**
  * 基于RestTemplate实现的短信息发送接口
@@ -31,6 +35,8 @@ public class RestSmsServiceImpl implements SmsService {
 
     private RestTemplate restTemplate;
 
+    private final BoundedExecutor executor;
+
     /**
      * 短信服务主机地址
      */
@@ -48,8 +54,10 @@ public class RestSmsServiceImpl implements SmsService {
     private static final String SMS_SEND_MANY_URL = "sms/send/o2m";
 
     @Autowired
-    public RestSmsServiceImpl(RestTemplate restTemplate) {
+    public RestSmsServiceImpl(RestTemplate restTemplate, ExchangeRateService exchangeRateService) {
         this.restTemplate = restTemplate;
+        ExecutorService executorService = Executors.newCachedThreadPool();
+        executor = new BoundedExecutor(executorService, 1600);
     }
 
     @Override

+ 0 - 1
src/main/java/com/uas/platform/b2c/common/lottery/controller/LotteryController.java

@@ -9,7 +9,6 @@ import com.uas.platform.b2c.common.lottery.service.WinningHistoryService;
 import com.uas.platform.b2c.common.search.util.PageParams;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;

+ 0 - 1
src/main/java/com/uas/platform/b2c/common/lottery/service/WinningHistoryService.java

@@ -3,7 +3,6 @@ package com.uas.platform.b2c.common.lottery.service;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2c.common.search.util.PageParams;
 import com.uas.platform.b2c.trade.support.ResultMap;
-import org.springframework.data.domain.Page;
 
 /**
  * Created by wangyc on 2018/9/12.

+ 3 - 2
src/main/java/com/uas/platform/b2c/common/lottery/service/impl/ActivityItemServiceImpl.java

@@ -8,12 +8,13 @@ import com.uas.platform.b2c.trade.support.CodeType;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.util.HttpUtil;
 import com.uas.platform.core.util.HttpUtil.Response;
-import java.util.HashMap;
-import java.util.Map;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * Created by wangyc on 2018/9/12.
  *

+ 3 - 3
src/main/java/com/uas/platform/b2c/common/lottery/service/impl/LotteryServiceImpl.java

@@ -1,7 +1,6 @@
 package com.uas.platform.b2c.common.lottery.service.impl;
 
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2c.common.lottery.service.LotteryService;
 import com.uas.platform.b2c.core.config.SysConf;
 import com.uas.platform.b2c.core.support.SystemSession;
@@ -9,12 +8,13 @@ import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.util.HttpUtil;
 import com.uas.platform.core.util.HttpUtil.Response;
 import com.uas.ps.core.page.exception.IllegalOperatorException;
-import java.util.HashMap;
-import java.util.Map;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * Created by wangyc on 2018/9/13.
  *

+ 3 - 2
src/main/java/com/uas/platform/b2c/common/lottery/service/impl/PrizeServiceImpl.java

@@ -8,12 +8,13 @@ import com.uas.platform.b2c.trade.support.CodeType;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.util.HttpUtil;
 import com.uas.platform.core.util.HttpUtil.Response;
-import java.util.HashMap;
-import java.util.Map;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * Created by wangyc on 2018/9/12.
  *

+ 3 - 2
src/main/java/com/uas/platform/b2c/common/lottery/service/impl/UserInfoServiceImpl.java

@@ -8,12 +8,13 @@ import com.uas.platform.b2c.trade.support.CodeType;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.util.HttpUtil;
 import com.uas.platform.core.util.HttpUtil.Response;
-import java.util.HashMap;
-import java.util.Map;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * Created by wangyc on 2018/9/12.
  *

+ 3 - 3
src/main/java/com/uas/platform/b2c/common/lottery/service/impl/WinningHistoryServiceImpl.java

@@ -11,13 +11,13 @@ import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.util.HttpUtil;
 import com.uas.platform.core.util.HttpUtil.Response;
 import com.uas.ps.core.page.exception.IllegalOperatorException;
-import java.util.HashMap;
-import java.util.Map;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * Created by wangyc on 2018/9/12.
  *

+ 0 - 3
src/main/java/com/uas/platform/b2c/common/message/service/InternalMessageService.java

@@ -2,13 +2,10 @@ package com.uas.platform.b2c.common.message.service;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.uas.platform.b2c.common.message.model.MessageModel;
 import com.uas.platform.b2c.trade.deprecated.model.BasicMessage;
 import com.uas.platform.core.model.PageParams;
-import org.springframework.data.domain.Page;
 
 import java.util.Date;
-import java.util.List;
 
 /**
  * 站内信service

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

@@ -32,9 +32,8 @@ import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.net.URLDecoder;
-import java.net.URLEncoder;
+import java.io.*;
+import java.net.*;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;

+ 13 - 29
src/main/java/com/uas/platform/b2c/common/weixin/contoller/WeChatController.java

@@ -10,7 +10,6 @@ import org.apache.commons.lang3.ArrayUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.ui.Model;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -18,10 +17,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.PrintWriter;
 import java.util.List;
 
 /**
@@ -52,32 +47,20 @@ public class WeChatController {
     /**
      * 与微信服务器接口配置
      *
-     * @param model
-     * @param request
-     * @param response
+     * @param signature 与微信服务器接口配置
+     * @param timestamp 时间戳
+     * @param nonce 随机数
+     * @param echostr 随机字符串
      */
     @RequestMapping(value = "/check", method = RequestMethod.GET)
-    public void wenxinCheck(Model model, HttpServletRequest request, HttpServletResponse response) {
-        // 微信加密签名
-        String signature = request.getParameter("signature");
-        // 时间戳
-        String timestamp = request.getParameter("timestamp");
-        // 随机数
-        String nonce = request.getParameter("nonce");
-        // 随机字符串
-        String echostr = request.getParameter("echostr");
+    public String wenxinCheck(String signature, String timestamp, String nonce, String echostr) {
         logger.info("与微信服务器接口配置 with signature: {} and timestamp: {} and nonce: {} and echostr: {}", signature, timestamp, nonce, echostr);
-        PrintWriter print;
+
         // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
         if (signature != null && CheckoutUtil.checkSignature(signature, timestamp, nonce)) {
-            try {
-                print = response.getWriter();
-                print.write(echostr);
-                print.flush();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
+            return echostr;
         }
+        return null;
     }
 
     /**
@@ -96,7 +79,8 @@ public class WeChatController {
     /**
      * 发送模板消息
      *
-     * @return
+     * @param messages 需要发送模板的实体,包括uu号
+     * @return 提示信息
      */
     @RequestMapping(value = "/sendTemplateMessage", method = RequestMethod.POST)
     public ModelMap sendTemplateMessage(@RequestBody List<MessageModel> messages) {
@@ -107,8 +91,8 @@ public class WeChatController {
     /**
      * 绑定用户
      *
-     * @param user
-     * @return
+     * @param user 用户包装类型。传入 code 或密码
+     * @return 正确信息或者错误信息,前端使用
      */
     @RequestMapping(value = "/bindUser", method = RequestMethod.POST)
     public ModelMap bindUser(@RequestBody UserVo user) {
@@ -119,7 +103,7 @@ public class WeChatController {
     /**
      * 发送手机验证码
      * @param mobile 手机号
-     * @return
+     * @return 前端使用的提示信息
      */
     @RequestMapping(value = "/sendSmsCode", method = RequestMethod.GET)
     public ModelMap sendSmsCode(String mobile) {

+ 3 - 1
src/main/java/com/uas/platform/b2c/common/weixin/model/MessageModel.java

@@ -1,7 +1,9 @@
 package com.uas.platform.b2c.common.weixin.model;
 
 /**
- * 消息
+ * 模板消息实体类
+ * @author liuam
+ * @date 2018年9月25日17:11:32
  */
 public class MessageModel {
     /**

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

@@ -38,6 +38,7 @@ import java.util.TreeMap;
 import java.util.concurrent.TimeUnit;
 
 /**
+ * 微信服务类
  * @author liusw
  * @date 2018-05-30 9:24
  */
@@ -55,12 +56,12 @@ public class WeChatServiceImpl implements WeChatService{
     /**
      * 保存到 redis 里的 ACCESS_TOKEN 过期时间(second)
      */
-    private static final Integer ACCESS_TOKEN_EXPIRES_IN = 3600;
+    private static final int ACCESS_TOKEN_EXPIRES_IN = 3600;
 
     /**
      * 保存到 redis 里的验证码过期时间(second)
      */
-    private static final Integer SMS_EXPIRES_IN = 10 * 60;
+    private static final int SMS_EXPIRES_IN = 10 * 60;
 
     @Override
     public ModelMap getWxUserInfo(String code, String state, String openId) {
@@ -100,6 +101,11 @@ public class WeChatServiceImpl implements WeChatService{
         return result;
     }
 
+    /**
+     * User 类型转换成 UserAccout 类型,账户中心使用
+     * @param user 商城 user 实体
+     * @return
+     */
     private UserAccount convertUserAccount(User user) {
         UserAccount userAccount = new UserAccount();
         userAccount.setAppId("mall");
@@ -133,7 +139,7 @@ public class WeChatServiceImpl implements WeChatService{
                 params.put("keyword3", WechatTemplateMsg.item("点击查看详情", "#173177"));
                 params.put("remark", WechatTemplateMsg.item(WeChatUtil.TEMPLATE_REMARK.replace("cmpCode", messageModel.getCmpCode()), null));
 
-                wechatTemplateMsg.setUrl("https://www.usoftmall.com/mobile/wechat?url=/mobile/applyPurchase/list/businessOpportunity&enuu=" + messageModel.getReceiverEnuu());
+                wechatTemplateMsg.setUrl("https://mall.usoftchina.com/mobile/wechat?url=/mobile/applyPurchase/list/businessOpportunity&enuu=" + messageModel.getReceiverEnuu());
                 wechatTemplateMsg.setTouser(user.getOpenId());
                 wechatTemplateMsg.setData(params);
                 String json = HttpReqUtil.doPost(sendTemplateUrl, FlexJsonUtils.toJsonDeep(wechatTemplateMsg));
@@ -257,7 +263,7 @@ public class WeChatServiceImpl implements WeChatService{
      * 通过code获取用户openId
      * @param code
      */
-    private AuthUserInfo getAccessTokenByCode(String code) throws Exception {
+    private AuthUserInfo getAccessTokenByCode(String code) throws WeChatException {
         logger.info("通过code获取用户openId, code: {}", code);
         long start = System.currentTimeMillis();
         AuthTokenParams authTokenParams = new AuthTokenParams(WeChatUtil.APPID, WeChatUtil.APPSECRET, code, "authorization_code");
@@ -281,7 +287,7 @@ public class WeChatServiceImpl implements WeChatService{
      * @param openId
      * @return
      */
-    private AuthUserInfo getUserInfo(String accessToken, String openId) throws Exception {
+    private AuthUserInfo getUserInfo(String accessToken, String openId) throws WeChatException {
         logger.info("获取用户信息 accessToken: {}, openId: {}", accessToken, openId);
         // 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语
         AuthUserParams authUserParams = new AuthUserParams(accessToken, openId, "zh_CN");

+ 4 - 5
src/main/java/com/uas/platform/b2c/common/weixin/util/CheckoutUtil.java

@@ -25,7 +25,6 @@ public class CheckoutUtil {
     public static boolean checkSignature(String signature, String timestamp, String nonce) {
         String[] arr = new String[] { token, timestamp, nonce };
         // 将token、timestamp、nonce三个参数进行字典序排序
-        // Arrays.sort(arr);
         sort(arr);
         StringBuilder content = new StringBuilder();
         for (int i = 0; i < arr.length; i++) {
@@ -69,14 +68,14 @@ public class CheckoutUtil {
      * @return
      */
     private static String byteToHexStr(byte mByte) {
-        char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+        char[] digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
         char[] tempArr = new char[2];
-        tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
-        tempArr[1] = Digit[mByte & 0X0F];
+        tempArr[0] = digit[(mByte >>> 4) & 0X0F];
+        tempArr[1] = digit[mByte & 0X0F];
         String s = new String(tempArr);
         return s;
     }
-    public static void sort(String a[]) {
+    public static void sort(String[] a) {
         for (int i = 0; i < a.length - 1; i++) {
             for (int j = i + 1; j < a.length; j++) {
                 if (a[j].compareTo(a[i]) < 0) {

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

@@ -82,7 +82,6 @@ public class HttpReqUtil {
                         hasParams = true;
                     }
                     if (charset != null && !"".equals(charset)) {
-                        // builder.append(key).append("=").append(URLDecoder.(value,charset));
                         builder.append(key).append("=").append(urlEncode(value, charset));
                     } else {
                         builder.append(key).append("=").append(value);

+ 6 - 1
src/main/java/com/uas/platform/b2c/core/constant/ReleaseStatus.java

@@ -73,7 +73,12 @@ public enum ReleaseStatus {
 	/**
 	 * {@code 115  产品库已存在}
 	 */
-	had_exists(115, "产品库已存在");
+	had_exists(115, "产品库已存在"),
+
+	/**
+	 * {@code 116  个人物料库已存在}
+	 */
+	personal_had_exists(116, "个人物料库已存在");
 
 	/**
 	 * @param value

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

@@ -135,7 +135,7 @@ public class SSOInterceptor extends AbstractSSOInterceptor {
         SSOHelper.clearLogin(request, response);
         String redirectUrl;
         if ("prod".equals(profile)) {
-            redirectUrl = (SSOHelper.getRedirectLoginUrl(request, "https://www.usoftmall.com" + request.getRequestURI()));
+            redirectUrl = (SSOHelper.getRedirectLoginUrl(request, "https://mall.usoftchina.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()));
@@ -338,7 +338,7 @@ public class SSOInterceptor extends AbstractSSOInterceptor {
         if (cross) {
             request.getSession().setAttribute("SSOReferer", request.getRequestURL());
             if ("prod".equals(profile)) {
-                response.sendRedirect(SSOHelper.getRedirectLoginUrl(request, "https://www.usoftmall.com" + request.getRequestURI()));
+                response.sendRedirect(SSOHelper.getRedirectLoginUrl(request, "https://mall.usoftchina.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()));

+ 1 - 1
src/main/java/com/uas/platform/b2c/core/support/mq/PushUtils.java

@@ -63,7 +63,7 @@ public class PushUtils {
 		params.put("content", content);
 		AccessToken token = getAccessTokenService().createNew(null, 259200);// 有效期:三天
 		// ex:
-		// http://www.ubtob.com/openapi/webpage?access_token=282a8ba2fa1f4fdc9e025c1eea2ad7e8&redirect_page=http%3A%2F%2Fwww.ubtob.com%2F%23sale%2Forder%2F123
+		// http://www.usoftchina.com/openapi/webpage?access_token=282a8ba2fa1f4fdc9e025c1eea2ad7e8&redirect_page=http%3A%2F%2Fwww.usoftchina.com%2F%23sale%2Forder%2F123
 		try {
 			params.put("url", String.format("%s/openapi/webpage?access_token=%s&redirect_page=%s", getSysConf().getB2c(), token.getId(), URLEncoder.encode(getSysConf().getB2c() + "/" + url, "utf-8")));
 			// 调用推送接口

+ 17 - 1
src/main/java/com/uas/platform/b2c/core/support/view/JxlsExcelView.java

@@ -14,7 +14,7 @@ import org.springframework.web.servlet.view.document.AbstractExcelView;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.net.URLEncoder;
+import java.net.*;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Locale;
@@ -33,10 +33,26 @@ public class JxlsExcelView extends AbstractExcelView {
 	 */
 	public final static int MAX_SIZE = 50000;
 
+    /**
+     * 文件名
+     */
 	private String fileName;
 
+	/**
+	 * 导入.xls格式文件
+	 */
 	private static final String EXTENSION = ".xls";
 
+	/**
+	 *  .xls 表格
+	 */
+	public static final String EXCEL_XLS = "xls";
+
+	/**
+	 * .xlsx 表格
+	 */
+	public static final String EXCEL_XLSX = "xlsx";
+
 	public JxlsExcelView(String tplPath, String fileName) {
 		super();
 		setUrl(tplPath);

+ 10 - 4
src/main/java/com/uas/platform/b2c/core/utils/StringUtilB2C.java

@@ -11,8 +11,14 @@ import com.uas.platform.core.model.Type;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.util.StringUtils;
 
-import java.io.UnsupportedEncodingException;
-import java.util.*;
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Random;
+import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -219,10 +225,10 @@ public class StringUtilB2C {
 	public static <T> String joinListUseContact(List<T> tList, String contactStr) {
 		String str = "";
 		for (T t : tList) {
-			str = t.toString() + contactStr;
+			str = str +  t.toString() + contactStr;
 		}
 		if(!StringUtils.isEmpty(str)) {
-			str.substring(0, str.length() - 1);
+			str = str.substring(0, str.length() - 1);
 		}
 		return str;
 	}

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

@@ -5,10 +5,10 @@ import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.account.service.VendorService;
-import com.uas.platform.b2c.fa.payment.model.BankTransfer;
 import com.uas.platform.b2c.core.support.SystemSession;
 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.trade.order.model.Order;
 import com.uas.platform.b2c.trade.order.model.OrderDetail;
 import com.uas.platform.b2c.trade.order.model.OrderSimpleInfo;
@@ -22,7 +22,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
+import 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 javax.management.OperationsException;
 import java.util.ArrayList;

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

@@ -5,7 +5,6 @@ import com.uas.api.b2c_erp.buyer.model.AcceptNotifyDetail;
 import com.uas.api.b2c_erp.buyer.service.InvoiceNotifyService;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.logistics.dao.InvoiceDao;
-import com.uas.platform.b2c.logistics.dao.InvoiceFOrderDao;
 import com.uas.platform.b2c.logistics.model.Invoice;
 import com.uas.platform.b2c.logistics.model.InvoiceDetail;
 import com.uas.platform.core.model.Status;

+ 8 - 3
src/main/java/com/uas/platform/b2c/fa/payment/controller/BankInfoController.java

@@ -6,10 +6,10 @@ import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.base.model.FileUpload;
 import com.uas.platform.b2c.core.config.SysConf;
 import com.uas.platform.b2c.core.support.SystemSession;
-import com.uas.platform.b2c.fa.payment.model.BankInfo;
-import com.uas.platform.b2c.fa.payment.service.BankInfoService;
 import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
+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.ResultMap;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.PageParams;
@@ -19,7 +19,12 @@ 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.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
 import java.util.Set;

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

@@ -31,7 +31,11 @@ import com.uas.platform.b2c.trade.support.CodeType;
 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.model.EncodingRulesConstant;
+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;
@@ -50,7 +54,11 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
-import java.util.*;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 /**
  * @author yujia

+ 12 - 2
src/main/java/com/uas/platform/b2c/fa/settlement/model/Refund.java

@@ -6,8 +6,18 @@ import com.uas.platform.b2c.core.utils.FastjsonUtils;
 import com.uas.platform.b2c.trade.order.model.Order;
 import org.springframework.util.StringUtils;
 
-import javax.persistence.*;
-import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+import java.io.*;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;

+ 11 - 2
src/main/java/com/uas/platform/b2c/fa/settlement/model/RefundDetail.java

@@ -5,8 +5,17 @@ import com.uas.platform.b2c.trade.order.model.Document;
 import com.uas.platform.b2c.trade.order.model.OrderDetail;
 import org.codehaus.jackson.annotate.JsonIgnore;
 
-import javax.persistence.*;
-import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+import java.io.*;
 
 
 /**

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

@@ -32,7 +32,11 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 import javax.servlet.http.HttpServletRequest;
-import java.util.*;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 /**
  * The type Refund service.

+ 7 - 3
src/main/java/com/uas/platform/b2c/logistics/controller/InvoiceController.java

@@ -19,7 +19,11 @@ 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.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.management.OperationsException;
 import java.util.List;
@@ -384,7 +388,7 @@ public class InvoiceController {
 	 * @return ResultMap
 	 */
 	@RequestMapping(value = "/enterprise/inbound", method = RequestMethod.GET)
-    public Page<Invoice> getEnterpriseInboundInvoice(PageParams pageParams, String keyword) {
-		return invoiceService.getEnterpriseInboundInvoice(pageParams, keyword);
+    public Page<Invoice> getEnterpriseInboundInvoice(PageParams pageParams, String keyword, Long fromDate, Long toDate) {
+		return invoiceService.getEnterpriseInboundInvoice(pageParams, keyword, fromDate, toDate);
 	}
 }

+ 2 - 1
src/main/java/com/uas/platform/b2c/logistics/controller/InvoiceFOrderController.java

@@ -1,7 +1,8 @@
 package com.uas.platform.b2c.logistics.controller;
 
 
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 /**
  * The type InvoiceFOrder controller.
  */

+ 2 - 1
src/main/java/com/uas/platform/b2c/logistics/controller/InvoiceFPurchaseController.java

@@ -1,6 +1,7 @@
 package com.uas.platform.b2c.logistics.controller;
 
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 
 /**

+ 1 - 2
src/main/java/com/uas/platform/b2c/logistics/dao/InvoiceDao.java

@@ -1,14 +1,13 @@
 package com.uas.platform.b2c.logistics.dao;
 
 
+import com.uas.platform.b2c.logistics.model.Invoice;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
-import com.uas.platform.b2c.logistics.model.Invoice;
-
 import java.util.List;
 
 /**

+ 0 - 1
src/main/java/com/uas/platform/b2c/logistics/dao/InvoiceDetailDao.java

@@ -1,7 +1,6 @@
 package com.uas.platform.b2c.logistics.dao;
 
 import com.uas.platform.b2c.logistics.model.InvoiceDetail;
-import com.uas.platform.b2c.logistics.model.InvoiceFPurchaseDetail;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Repository;

+ 0 - 2
src/main/java/com/uas/platform/b2c/logistics/dao/InvoiceFOrderDao.java

@@ -3,8 +3,6 @@ package com.uas.platform.b2c.logistics.dao;
 import com.uas.platform.b2c.logistics.model.InvoiceFOrder;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;

+ 13 - 2
src/main/java/com/uas/platform/b2c/logistics/model/Invoice.java

@@ -9,8 +9,19 @@ import com.uas.platform.core.model.Status;
 import com.uas.platform.core.persistence.StatusColumn;
 import org.hibernate.annotations.CacheConcurrencyStrategy;
 
-import javax.persistence.*;
-import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import java.io.*;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.Set;

+ 9 - 3
src/main/java/com/uas/platform/b2c/logistics/model/InvoiceDetail.java

@@ -2,16 +2,21 @@ package com.uas.platform.b2c.logistics.model;
 
 import com.alibaba.fastjson.annotation.JSONField;
 import com.uas.platform.b2c.core.utils.NumberUtil;
-import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
 import com.uas.platform.b2c.trade.order.model.OrderDetail;
 import com.uas.platform.b2c.trade.order.model.PurchaseDetail;
 import com.uas.platform.core.exception.IllegalStatusException;
-import com.uas.platform.core.model.EncodingRulesConstant;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.persistence.StatusColumn;
 import org.codehaus.jackson.annotate.JsonIgnore;
 
-import javax.persistence.*;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
 
 /**
  * 发货单(来源于订单的)明细
@@ -603,6 +608,7 @@ public class InvoiceDetail {
 		this.b2cMaxDelivery = puDetail.getB2cMaxDelivery();
 		this.remark = puDetail.getRemark();
 		this.goodsnumber = puDetail.getGoodsnumber();
+		this.spec = puDetail.getSpec();
 		this.productid = puDetail.getProductid();
 		this.orderDetailId = puDetail.getOrDetailId();
 		this.orderDetailid = puDetail.getOrderdetailid();

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

@@ -1,9 +1,7 @@
 package com.uas.platform.b2c.logistics.model;
 
-import com.uas.platform.b2c.core.utils.NumberUtil;
 import com.uas.platform.b2c.trade.order.model.Document;
 import com.uas.platform.b2c.trade.order.model.Order;
-import com.uas.platform.b2c.trade.order.model.OrderDetail;
 import com.uas.platform.core.exception.IllegalStatusException;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.persistence.StatusColumn;
@@ -22,7 +20,7 @@ import javax.persistence.OneToMany;
 import javax.persistence.OneToOne;
 import javax.persistence.OrderBy;
 import javax.persistence.Table;
-import java.io.Serializable;
+import java.io.*;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.Set;

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

@@ -7,7 +7,14 @@ import com.uas.platform.core.model.Status;
 import com.uas.platform.core.persistence.StatusColumn;
 import org.codehaus.jackson.annotate.JsonIgnore;
 
-import javax.persistence.*;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
 
 /**
  * 发货单(来源于订单的)明细

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

@@ -20,7 +20,7 @@ import javax.persistence.OneToOne;
 import javax.persistence.OrderBy;
 import javax.persistence.Table;
 import javax.persistence.Transient;
-import java.io.Serializable;
+import java.io.*;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.Set;

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

@@ -7,7 +7,14 @@ import com.uas.platform.core.exception.IllegalStatusException;
 import com.uas.platform.core.persistence.StatusColumn;
 import org.codehaus.jackson.annotate.JsonIgnore;
 
-import javax.persistence.*;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
 
 /**
  * 发货单(来源于采购单的)明细

+ 10 - 2
src/main/java/com/uas/platform/b2c/logistics/model/Receipt.java

@@ -7,8 +7,16 @@ import com.uas.platform.core.persistence.StatusColumn;
 import org.hibernate.annotations.Cache;
 import org.hibernate.annotations.CacheConcurrencyStrategy;
 
-import javax.persistence.*;
-import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+import java.io.*;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.Set;

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

@@ -4,7 +4,14 @@ import com.alibaba.fastjson.annotation.JSONField;
 import com.uas.platform.core.persistence.StatusColumn;
 import org.codehaus.jackson.annotate.JsonIgnore;
 
-import javax.persistence.*;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
 
 /**
  * 入库单明细

+ 0 - 2
src/main/java/com/uas/platform/b2c/logistics/service/InvoiceFOrderDetailService.java

@@ -1,7 +1,5 @@
 package com.uas.platform.b2c.logistics.service;
 
-import com.uas.platform.b2c.logistics.model.InvoiceFOrderDetail;
-
 /**
  * The interface InvoiceFOrderDetail service.
  */

+ 5 - 1
src/main/java/com/uas/platform/b2c/logistics/service/InvoiceService.java

@@ -213,7 +213,11 @@ public interface InvoiceService {
 
     /**
      * 获取买家的待收货出库单
+     * @param pageParams 分页信息。
+     * @param keyword 搜索关键字
+     * @param fromDate 开始时间
+     * @param toDate 结束时间
      * @return Page<Invoice>
      */
-    Page<Invoice> getEnterpriseInboundInvoice(PageParams pageParams, String keyword);
+    Page<Invoice> getEnterpriseInboundInvoice(PageParams pageParams, String keyword, Long fromDate, Long toDate);
 }

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

@@ -1,8 +1,7 @@
 package com.uas.platform.b2c.logistics.service.impl;
 
-import org.springframework.stereotype.Service;
-
 import com.uas.platform.b2c.logistics.service.InvoiceFOrderDetailService;
+import org.springframework.stereotype.Service;
 
 @Service
 public class InvoiceFOrderDetailServiceImpl implements InvoiceFOrderDetailService {

+ 27 - 6
src/main/java/com/uas/platform/b2c/logistics/service/impl/InvoiceServiceImpl.java

@@ -16,7 +16,11 @@ import com.uas.platform.b2c.core.utils.StringUtilB2C;
 import com.uas.platform.b2c.logistics.dao.InvoiceDao;
 import com.uas.platform.b2c.logistics.dao.InvoiceFOrderDao;
 import com.uas.platform.b2c.logistics.dao.InvoiceFPurchaseDao;
-import com.uas.platform.b2c.logistics.model.*;
+import com.uas.platform.b2c.logistics.model.Invoice;
+import com.uas.platform.b2c.logistics.model.InvoiceDetail;
+import com.uas.platform.b2c.logistics.model.InvoiceFOrder;
+import com.uas.platform.b2c.logistics.model.InvoiceFPurchase;
+import com.uas.platform.b2c.logistics.model.Logistics;
 import com.uas.platform.b2c.logistics.service.InvoiceService;
 import com.uas.platform.b2c.logistics.service.LogisticsOldService;
 import com.uas.platform.b2c.logistics.service.LogisticsPortService;
@@ -53,6 +57,7 @@ import com.uas.sso.util.FlexJsonUtil;
 import org.apache.commons.collections.CollectionUtils;
 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;
@@ -64,7 +69,14 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 @Service
 public class InvoiceServiceImpl implements InvoiceService {
@@ -912,10 +924,10 @@ public class InvoiceServiceImpl implements InvoiceService {
         Invoice inFpu = new Invoice(purchase);
 
         //保存适用配送规则和自提点信息
-        if (purchase.getJsonRule() != null){
+        if (purchase.getJsonRule() != null) {
             inFpu.setJsonRule(purchase.getJsonRule());
         }
-        if (purchase.getJsonTakeSelf() != null){
+        if (purchase.getJsonTakeSelf() != null) {
             inFpu.setJsonTakeSelf(purchase.getJsonTakeSelf());
         }
         // 生成出货单号
@@ -1214,7 +1226,7 @@ public class InvoiceServiceImpl implements InvoiceService {
     }
 
     @Override
-    public Page<Invoice> getEnterpriseInboundInvoice(PageParams pageParams, String keyword) {
+    public Page<Invoice> getEnterpriseInboundInvoice(PageParams pageParams, String keyword, Long fromDate, Long toDate) {
         final PageInfo info = new PageInfo(pageParams);
         User user = SystemSession.getUser();
         Enterprise enterprise = user.getEnterprise();
@@ -1224,14 +1236,23 @@ public class InvoiceServiceImpl implements InvoiceService {
         } else {
             info.filter("buyerenuu", user.getEnterprise().getUu());
         }
+        if (StringUtilB2C.isEmpty(info.getSort())) {
+            info.sorting("createtime", Sort.Direction.DESC);
+        }
         if (org.apache.commons.lang3.StringUtils.isNotEmpty(keyword)) {
             CriterionExpression[] expressions = new CriterionExpression[2];
             expressions[0] = PredicateUtils.like("invoiceid", keyword, true);
             expressions[1] = PredicateUtils.like("sellername", keyword, true);
-
             LogicalExpression logicalExpression = PredicateUtils.or(expressions);
             info.expression(logicalExpression);
         }
+        if (fromDate != null && toDate != null) {
+            CriterionExpression[] expressions = new CriterionExpression[2];
+            expressions[0] = PredicateUtils.gte("createtime", new Date(fromDate), false);
+            expressions[1] = PredicateUtils.lte("createtime", new Date(toDate), false);
+            LogicalExpression logicalExpression = PredicateUtils.and(expressions);
+            info.expression(logicalExpression);
+        }
         info.filter("status", com.uas.platform.b2c.core.constant.Status.INBOUND.value());
         return invoiceDao.findAll(new Specification<Invoice>() {
             @Override

+ 10 - 2
src/main/java/com/uas/platform/b2c/logistics/service/impl/ReceiptServiceImpl.java

@@ -8,7 +8,11 @@ import com.uas.platform.b2c.core.utils.NumberUtil;
 import com.uas.platform.b2c.core.utils.StringUtilB2C;
 import com.uas.platform.b2c.fa.settlement.util.SettlementUtil;
 import com.uas.platform.b2c.logistics.dao.ReceiptDao;
-import com.uas.platform.b2c.logistics.model.*;
+import com.uas.platform.b2c.logistics.model.Invoice;
+import com.uas.platform.b2c.logistics.model.InvoiceFPurchase;
+import com.uas.platform.b2c.logistics.model.InvoiceFPurchaseDetail;
+import com.uas.platform.b2c.logistics.model.Receipt;
+import com.uas.platform.b2c.logistics.model.ReceiptDetail;
 import com.uas.platform.b2c.logistics.service.ReceiptDetailService;
 import com.uas.platform.b2c.logistics.service.ReceiptService;
 import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
@@ -37,7 +41,11 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 import static com.uas.platform.b2c.trade.util.Preconditions.checkArgument;
 import static com.uas.platform.b2c.trade.util.Preconditions.checkNotNull;

+ 6 - 1
src/main/java/com/uas/platform/b2c/logistics/util/ModelConvertUtil.java

@@ -1,6 +1,11 @@
 package com.uas.platform.b2c.logistics.util;
 
-import com.uas.platform.b2c.logistics.model.*;
+import com.uas.platform.b2c.logistics.model.Invoice;
+import com.uas.platform.b2c.logistics.model.InvoiceDetail;
+import com.uas.platform.b2c.logistics.model.InvoiceFOrder;
+import com.uas.platform.b2c.logistics.model.InvoiceFOrderDetail;
+import com.uas.platform.b2c.logistics.model.InvoiceFPurchase;
+import com.uas.platform.b2c.logistics.model.InvoiceFPurchaseDetail;
 
 import java.util.HashSet;
 import java.util.Set;

+ 5 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/constant/StringConstant.java

@@ -51,4 +51,9 @@ public class StringConstant {
      * 在售产品默认的生辰日期
      */
     public static final String DEFAULT_PRODUCEDATE = "2018-08-20";
+
+    /**
+     * 应用来源
+     */
+    public static final String SOURCE = "MALL";
 }

+ 20 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/constant/UploadConstant.java

@@ -180,4 +180,24 @@ public final class UploadConstant {
      * PCB一级类目id
      */
     public static final long PCB_PARENTID = 3825L;
+
+    /**
+     * 个人物料上传品牌标识
+     */
+    public static final String PRODUCT_BRAND_NAME = "英文/中文品牌名称";
+
+    /**
+     * 个人物料上传物料名称标识
+     */
+    public static final String PRODUCT_KIND_NAME = "物料名称";
+
+    /**
+     * 个人物料上传型号标识
+     */
+    public static final String PRODUCT_CMPCODE_NAME = "型号";
+
+    /**
+     * 个人物料上传规格标识
+     */
+    public static final String PRODUCT_SPEC_NAME = "规格(含参数、封装)";
 }

+ 14 - 3
src/main/java/com/uas/platform/b2c/prod/commodity/controller/ProductController.java

@@ -6,7 +6,12 @@ import com.uas.platform.b2c.core.constant.SplitChar;
 import com.uas.platform.b2c.core.support.SystemSession;
 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.*;
+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.ProductReplace;
+import com.uas.platform.b2c.prod.commodity.model.V_ProductPerson;
+import com.uas.platform.b2c.prod.commodity.model.V_ProductPrivate;
 import com.uas.platform.b2c.prod.commodity.service.GoodsService;
 import com.uas.platform.b2c.prod.commodity.service.ProductService;
 import com.uas.platform.b2c.prod.commodity.type.ProductConstant;
@@ -19,13 +24,19 @@ import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.ui.ModelMap;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
 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.io.UnsupportedEncodingException;
+import java.io.*;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;

+ 14 - 28
src/main/java/com/uas/platform/b2c/prod/commodity/controller/ReleaseProductByBatchController.java

@@ -14,6 +14,7 @@ import com.uas.platform.b2c.prod.product.brand.service.BrandService;
 import com.uas.platform.b2c.prod.product.component.dao.ComponentDao;
 import com.uas.platform.b2c.prod.product.component.modal.Component;
 import com.uas.platform.b2c.trade.order.StringConstant.Currency;
+import com.uas.platform.b2c.trade.order.support.AjaxUtil;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.PageInfo;
@@ -26,15 +27,18 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.ui.ModelMap;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 import 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.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
+import java.io.*;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -374,21 +378,12 @@ public class ReleaseProductByBatchController {
      */
     @RequestMapping(value = "/release/failure/xls", method = RequestMethod.GET)
     public ModelAndView exportOrderses(String batch, HttpServletRequest request, @RequestParam(defaultValue = "false") Boolean isAjax, String currency, Integer isPerson) {
-        ModelAndView modelAndView = new ModelAndView();
         HttpSession session = request.getSession();
-        Object loading = session.getAttribute("load-error-ing");
-        if (isAjax) {
-            MappingJackson2JsonView view = new MappingJackson2JsonView();
-            Map attributes = new HashMap();
-            if (loading == null || !Boolean.valueOf(loading.toString())) {
-                attributes.put("load", false);
-            } else if (Boolean.valueOf(loading.toString())) {
-                attributes.put("load", true);
-            }
-            view.setAttributesMap(attributes);
-            modelAndView.setView(view);
+        ModelAndView modelAndView = AjaxUtil.checkIsAjax(session, isAjax);
+        if (!modelAndView.isEmpty()) {
             return modelAndView;
         }
+        Object loading = session.getAttribute("load-error-ing");
         if (loading == null || !Boolean.valueOf(loading.toString())) {
             session.setAttribute("load-error-ing", true);
         }
@@ -439,21 +434,12 @@ public class ReleaseProductByBatchController {
      */
     @RequestMapping(value = "/modify/failure", method = RequestMethod.GET)
     public ModelAndView exportFailureData(String batch, HttpServletRequest request, @RequestParam(defaultValue = "false") Boolean isAjax) throws UnsupportedEncodingException {
-        ModelAndView modelAndView = new ModelAndView();
         HttpSession session = request.getSession();
-        Object loading = session.getAttribute("load-error-ing");
-        if (isAjax) {
-            MappingJackson2JsonView view = new MappingJackson2JsonView();
-            Map<String, Boolean> attributes = new HashMap<>();
-            if (loading == null || !Boolean.valueOf(loading.toString())) {
-                attributes.put("load", false);
-            } else if (Boolean.valueOf(loading.toString())) {
-                attributes.put("load", true);
-            }
-            view.setAttributesMap(attributes);
-            modelAndView.setView(view);
+        ModelAndView modelAndView = AjaxUtil.checkIsAjax(session, isAjax);
+        if (!modelAndView.isEmpty()) {
             return modelAndView;
         }
+        Object loading = session.getAttribute("load-error-ing");
         if (loading == null || !Boolean.valueOf(loading.toString())) {
             session.setAttribute("load-error-ing", true);
         }

+ 27 - 6
src/main/java/com/uas/platform/b2c/prod/commodity/dao/ReleaseProductByBatchDao.java

@@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.jpa.repository.query.Procedure;
 import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
 
 import java.util.List;
 
@@ -16,6 +17,7 @@ import java.util.List;
  * @time 创建时间 :2016年9月24日
  * @version 2017年8月3日13:47:42 yuj 增加注释
  */
+@Repository
 public interface ReleaseProductByBatchDao
 		extends JpaSpecificationExecutor<ReleaseProductByBatch>, JpaRepository<ReleaseProductByBatch, Long> {
 
@@ -23,13 +25,23 @@ public interface ReleaseProductByBatchDao
     /**
      * 创建时间 :2016年12月22日 上午10:16:26
      *
-     * @param publisherUu the publisher uu 发部分enuu
      * @param relbatchid  the relbatchid 单号
      * @param releaseCode the release code 发布状态编号
      * @return list
      * @Description: 通过uu查找对应的信息
      */
-    public List<ReleaseProductByBatch> findByPublisherUuAndRelbatchidAndReleaseCode(Long publisherUu, String relbatchid, Integer releaseCode);
+    List<ReleaseProductByBatch> findByRelbatchidAndReleaseCode(String relbatchid, Integer releaseCode);
+
+	/**
+	 * 通过批号和匹配状态过滤数据
+     *
+	 * @param relbatchid 批号
+	 * @param releaseCode 匹配状态(不等于)
+     * @param publisherUu 发布者UU
+	 * @return List<ReleaseProductByBatch>
+	 */
+    @Query("select r from ReleaseProductByBatch r where r.publisherUu =:publisherUu and r.relbatchid =:relbatchid and r.releaseCode not in :releaseCode")
+    List<ReleaseProductByBatch> findByRelbatchidAndReleaseCodeNot(@Param("publisherUu") Long publisherUu, @Param("relbatchid") String relbatchid, @Param("releaseCode") List<Integer> releaseCode);
 
 	@Query("select r from ReleaseProductByBatch r where r.publisherUu =:publisherUu and r.relbatchid =:relbatchid and r.releaseCode in :failCodes")
 	List<ReleaseProductByBatch> findByPublisherUuAndRelbatchidAndFailCode(@Param("publisherUu") Long publisherUu, @Param("relbatchid") String relbatchid, @Param("failCodes") List<Integer> failCodes);
@@ -42,7 +54,7 @@ public interface ReleaseProductByBatchDao
      * @author yujia
      * @Description: 查找指定人的所有的信息
      */
-    public List<ReleaseProductByBatch> findByPublisherUu(Long publisherUu);
+    List<ReleaseProductByBatch> findByPublisherUu(Long publisherUu);
 
 	/**
 	 *
@@ -50,7 +62,7 @@ public interface ReleaseProductByBatchDao
 	 * @return List<ReleaseProductByBatch> list
 	 * @author wangdy
 	 */
-	public List<ReleaseProductByBatch> findByRelbatchid(String batch);
+    List<ReleaseProductByBatch> findByRelbatchid(String batch);
 
     /**
      * 获取某一次上传多少的条数据
@@ -61,7 +73,7 @@ public interface ReleaseProductByBatchDao
      * @return the count publisher uu and batch and release code
      */
     @Query("select count(*) from ReleaseProductByBatch r where r.publisherUu =:publisherUu and r.relbatchid =:relbatchid and r.releaseCode =:releaseCode")
-	public Integer getCountPublisherUuAndBatchAndReleaseCode(@Param("publisherUu") Long publisherUu, @Param("relbatchid") String relbatchid, @Param("releaseCode") Integer releaseCode);
+    Integer getCountPublisherUuAndBatchAndReleaseCode(@Param("publisherUu") Long publisherUu, @Param("relbatchid") String relbatchid, @Param("releaseCode") Integer releaseCode);
 
 	/**
 	 * 获取某次上传失败的数,包括必填项错误和已存在
@@ -118,5 +130,14 @@ public interface ReleaseProductByBatchDao
      * @Description: 批量上架的存储过程
      */
     @Procedure(procedureName = "PRODUCT_RELEASE_BATCH_PUBLISH")
-	public String callPublishByBatch(Long enuu, String enterName, String batchid);
+    String callPublishByBatch(Long enuu, String enterName, String batchid);
+
+    /**
+     * 批量上架个人物料验证数据信息是否重复
+     * @param batch 本批次代码
+     * @param enuu 公司enuu
+     * @param useruu 个人UU
+     */
+    @Procedure(procedureName = "PRODUCT_RELEASE_PERSON_EXIST_VALID")
+    void callReleasePersonExistValidProcedure(String batch, Long enuu, Long useruu);
 }

+ 18 - 4
src/main/java/com/uas/platform/b2c/prod/commodity/model/CommodityInOutbound.java

@@ -1,12 +1,23 @@
 package com.uas.platform.b2c.prod.commodity.model;
 
+import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.logistics.model.Logistics;
 import com.uas.platform.b2c.prod.commodity.type.InOutBoundType;
 import org.apache.commons.lang.StringUtils;
 
-import javax.persistence.*;
-import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import java.io.*;
 import java.util.Date;
 import java.util.Set;
 
@@ -303,8 +314,11 @@ public class CommodityInOutbound implements Serializable {
                 this.type = InOutBoundType.OUTBOUND;
             }
         }
-        this.enuu = SystemSession.getUser().getEnterprise().getUu();
-        this.enName = SystemSession.getUser().getEnterprise().getEnName();
+        Enterprise enterprise = SystemSession.getUser().getEnterprise();
+        if (enterprise != null) {
+            this.enuu = enterprise.getUu();
+            this.enName = enterprise.getEnName();
+        }
         this.createTime = new Date();
         this.operaterUseruu = SystemSession.getUser().getUserUU();
         this.operaterUserName = SystemSession.getUser().getUserName();

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

@@ -20,8 +20,15 @@ import org.hibernate.annotations.CacheConcurrencyStrategy;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.util.StringUtils;
 
-import javax.persistence.*;
-import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Index;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import java.io.*;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;
@@ -1173,7 +1180,7 @@ public class Goods implements Serializable {
 			this.attach = product.getAttachment();
 		}
 		this.packaging = product.getPackaging();
-		this.minPackQty = product.getMinPackQty();
+		this.minPackQty = product.getMinPackQty() == null ? 1 : product.getMinPackQty();
         this.reserve = product.getErpReserve() == null ? 0 : product.getErpReserve();
 
     }
@@ -1369,11 +1376,13 @@ public class Goods implements Serializable {
 		if(CollectionUtils.isEmpty(this.prices)) {
 			this.prices = FastjsonUtils.fromJsonArray(this.qtyPrice, GoodsQtyPrice.class);
 		}
-		for (GoodsQtyPrice price : this.prices) {
-			price.setRMBPrice(NumberUtil.fractionNumCeil(price.getRMBPrice(), 6));
-			price.setRMBNTPrice(NumberUtil.fractionNumCeil(price.getRMBNTPrice(), 6));
-			price.setUSDPrice(NumberUtil.fractionNumCeil(price.getUSDPrice(), 6));
-			price.setUSDNTPrice(NumberUtil.fractionNumCeil(price.getUSDNTPrice(), 6));
+		if (!StringUtils.isEmpty(this.prices)) {
+			for (GoodsQtyPrice price : this.prices) {
+				price.setRMBPrice(NumberUtil.fractionNumCeil(price.getRMBPrice(), 6));
+				price.setRMBNTPrice(NumberUtil.fractionNumCeil(price.getRMBNTPrice(), 6));
+				price.setUSDPrice(NumberUtil.fractionNumCeil(price.getUSDPrice(), 6));
+				price.setUSDNTPrice(NumberUtil.fractionNumCeil(price.getUSDNTPrice(), 6));
+			}
 		}
 		// 更新分段价格JSON字符串
 		this.qtyPrice = FastjsonUtils.toJson(this.prices);
@@ -1705,6 +1714,7 @@ public class Goods implements Serializable {
         g.setMinPackQty(product.getMinPackQty());
         g.setPackaging(product.getPackaging());
 		g.setCostPrice(product.getPrice());
+		g.setBatchCode(product.getId().toString().trim());
 		return g;
 	}
 

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

@@ -3,7 +3,15 @@ package com.uas.platform.b2c.prod.commodity.model;
 import com.uas.platform.b2c.common.account.model.UserBaseInfo;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
 
-import javax.persistence.*;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+import javax.persistence.Transient;
 import java.util.Date;
 import java.util.List;
 

+ 10 - 2
src/main/java/com/uas/platform/b2c/prod/commodity/model/InOutboundDetail.java

@@ -5,8 +5,16 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.uas.platform.b2c.logistics.model.InvoiceDetail;
 import com.uas.platform.b2c.trade.order.model.PurchaseDetail;
 
-import javax.persistence.*;
-import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import java.io.*;
 
 @Entity
 @Table(name = "trade$in_out_bound_detail")

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

@@ -1,6 +1,10 @@
 package com.uas.platform.b2c.prod.commodity.model;
 
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
 
 /**
  * 商品修改明细类

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

@@ -6,7 +6,16 @@ import com.uas.platform.core.persistence.EnterpriseUU;
 import com.uas.platform.core.persistence.Logger;
 import com.uas.platform.core.persistence.UserUU;
 
-import javax.persistence.*;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Index;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
 import java.util.Date;
 import java.util.Set;
 

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

@@ -2,7 +2,11 @@ package com.uas.platform.b2c.prod.commodity.model;
 
 import com.uas.platform.b2c.core.constant.IntegerConstant;
 
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
 
 /**
  * 存贮商城私有物料字段

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

@@ -1,7 +1,6 @@
 package com.uas.platform.b2c.prod.commodity.model;
 
 import com.alibaba.fastjson.annotation.JSONField;
-import com.uas.platform.b2c.core.constant.Status;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
 import com.uas.platform.b2c.core.utils.NumberUtil;
 import com.uas.platform.b2c.core.utils.RegexConstant;
@@ -16,9 +15,13 @@ import org.apache.commons.collections.CollectionUtils;
 import org.codehaus.jackson.annotate.JsonIgnore;
 import org.springframework.util.StringUtils;
 
-import javax.persistence.*;
-import java.io.Serializable;
-import java.io.UnsupportedEncodingException;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import java.io.*;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -42,7 +45,7 @@ public class ReleaseProductByBatch implements Serializable {
 	 */
 	private static final List<String> PACKAGING_LIST;
 
-	private static final List<String> STATUS_LIST;
+	public static final List<String> STATUS_LIST;
 
 	static {
 		String[] array = {"Bulk-散装", "Reel-卷装", "Tape/Reel-编带", "Tray-盘装",
@@ -76,7 +79,9 @@ public class ReleaseProductByBatch implements Serializable {
 	@GeneratedValue
 	private Long id;
 
-	// 当前的申请的这一批的单号
+	/**
+	 * 当前的申请的这一批的单号
+	 */
 	@Column(name = "rel_batchid")
 	private String relbatchid = "";
 
@@ -225,7 +230,7 @@ public class ReleaseProductByBatch implements Serializable {
 	 * 上传时间
 	 */
 	@Column(name = "rel_createdate")
-	private Date createDate;
+	private Date createDate = new Date(System.currentTimeMillis());
 
 	/**
 	 * 产品最小包装量
@@ -323,42 +328,6 @@ public class ReleaseProductByBatch implements Serializable {
 	@Column(name = "rel_thick")
 	private String thick = "";
 
-//	/**
-//	 * 商城最长交期
-//	 */
-//	@Column(name = "go_b2cmaxdelivery")
-//	private Short b2cMaxDelivery;
-//
-//	/**
-//	 * 商城最短交期
-//	 */
-//	@Column(name = "go_b2cmindelivery")
-//	private Short b2cMinDelivery;
-//
-//	/**
-//	 * 用户填写的大陆最长交期
-//	 */
-//	@Column(name = "rel_maxdeliverydemtime")
-//	private Short deliveryDemMaxTime;
-//
-//	/**
-//	 * 用户填写的大陆最短交期
-//	 */
-//	@Column(name = "rel_mindeliverydemtime")
-//	private Short deliveryDemMinTime;
-//
-//	/**
-//	 * 用户填写的香港最短交期
-//	 */
-//	@Column(name = "rel_mindeliveryhktime")
-//	private Short deliveryHKMinTime;
-//
-//	/**
-//	 * 用户填写的香港最长交期
-//	 */
-//	@Column(name = "rel_maxdeliveryhktime")
-//	private Short deliveryHKMaxTime;
-
 	/**
 	 * 备注
 	 */
@@ -541,13 +510,13 @@ public class ReleaseProductByBatch implements Serializable {
 	 * 店铺的id
 	 */
 	@Column(name = "rel_storeid")
-	private String storeid;
+	private String storeid = "";
 
 	/**
 	 * 店铺名称
 	 */
 	@Column(name = "rel_storename")
-	private String storeName;
+	private String storeName = "";
 
 	/**
 	 * 规格信息
@@ -565,7 +534,7 @@ public class ReleaseProductByBatch implements Serializable {
 	 * 物料id信息
 	 */
 	@Column(name = "rel_pronum", length = 100)
-	private String productNum;
+	private String productNum = "";
 
 	/**
 	 * 规格书信息
@@ -592,15 +561,9 @@ public class ReleaseProductByBatch implements Serializable {
 
 		ReleaseProductByBatch that = (ReleaseProductByBatch) o;
 
-		if (!brandNameEn.equals(that.brandNameEn)) return false;
-//		if (!code.equals(that.code)) return false;
-//		if (!minBuyQtyStr.equals(that.minBuyQtyStr)) return false;
-//		if (!productDate.equals(that.productDate)) return false;
-//		if (!minPackageStr.equals(that.minPackageStr)) return false;
-//		if (!packaging.equals(that.packaging)) return false;
-//		if (!selfMaxDeliveryStr.equals(that.selfMaxDeliveryStr)) return false;
-//		if (!selfMinDeliveryStr.equals(that.selfMinDeliveryStr)) return false;
-//		return GoodsUtil.compareWithQtyPrice(prices, that.getPrices(), that.getCurrency());
+		if (!brandNameEn.equals(that.brandNameEn)) {
+		    return false;
+        }
 		return code.equals(that.code);
 	}
 
@@ -608,22 +571,6 @@ public class ReleaseProductByBatch implements Serializable {
 		setBatchCode(StringUtilB2C.getStr(value).trim());
 	}
 
-	public void setStatusByExcel(Object value) {
-		if (StringUtils.isEmpty(value)) {
-			addErrmsg(ErrorInfoConstant.SALE_EMPTY.getInfo());
-		} else {
-			String statusStr = StringUtilB2C.getStr(value);
-			setStatusStr(statusStr);
-			if (!STATUS_LIST.contains(statusStr)) {
-				addErrmsg(ErrorInfoConstant.SALE_EMPTY.getInfo());
-			} else {
-				int status = "上架".equals(statusStr) ? Status.AVAILABLE.value() : Status.REMOVED.value();
-				setStatus(status);
-			}
-		}
-
-	}
-
 	public void setBrandEnByExcel(Object value) {
 		if (StringUtils.isEmpty(value)) {
 			addErrmsg(ErrorInfoConstant.BRAND_EMPTY_INFO.getInfo());
@@ -717,19 +664,6 @@ public class ReleaseProductByBatch implements Serializable {
 		}
 	}
 
-	public void setProductDateByExcel(Object value) {
-		if (StringUtils.isEmpty(value)) {
-			addErrmsg(ErrorInfoConstant.PRODUCE_DATE_INFO.getInfo());
-		}
-		String productData = StringUtilB2C.replaceLineBreak(StringUtilB2C.getStr(value));
-		try {
-			productData = com.uas.platform.b2c.fa.payment.utils.StringUtils.cutOutString(productData, 12);
-		} catch (UnsupportedEncodingException e) {
-			throw new RuntimeException(e + "指定字符集不支持");
-		}
-		setProductDate(productData);
-	}
-
 	public void setPackagingByExcel(Object value, boolean isAPerson) {
 		if (!StringUtils.isEmpty(value)) {
 			String packagingData = StringUtilB2C.replaceLineBreak(StringUtilB2C.getStr(value));
@@ -954,8 +888,6 @@ public class ReleaseProductByBatch implements Serializable {
 		this.brandId = brandId;
 	}
 
-
-
 	public String getCode() {
 		return code;
 	}
@@ -1163,22 +1095,6 @@ public class ReleaseProductByBatch implements Serializable {
 		this.publisherName = publisherName;
 	}
 
-//	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 Long getPublisherUu() {
 		return publisherUu;
 	}
@@ -1577,43 +1493,6 @@ public class ReleaseProductByBatch implements Serializable {
 		return serialVersionUID;
 	}
 
-//	public Short getDeliveryDemMaxTime() {
-//		return deliveryDemMaxTime;
-//	}
-//
-//	public ReleaseProductByBatch setDeliveryDemMaxTime(Short deliveryDemMaxTime) {
-//		this.deliveryDemMaxTime = deliveryDemMaxTime;
-//		return this;
-//	}
-//
-//	public Short getDeliveryDemMinTime() {
-//		return deliveryDemMinTime;
-//	}
-//
-//	public ReleaseProductByBatch setDeliveryDemMinTime(Short deliveryDemMinTime) {
-//		this.deliveryDemMinTime = deliveryDemMinTime;
-//		return this;
-//	}
-//
-//	public Short getDeliveryHKMinTime() {
-//		return deliveryHKMinTime;
-//	}
-//
-//	public ReleaseProductByBatch setDeliveryHKMinTime(Short deliveryHKMinTime) {
-//		this.deliveryHKMinTime = deliveryHKMinTime;
-//		return this;
-//	}
-//
-//	public Short getDeliveryHKMaxTime() {
-//		return deliveryHKMaxTime;
-//	}
-//
-//	public ReleaseProductByBatch setDeliveryHKMaxTime(Short deliveryHKMaxTime) {
-//		this.deliveryHKMaxTime = deliveryHKMaxTime;
-//		return this;
-//	}
-
-
 	public Short getSelfMaxDelivery() {
 		return selfMaxDelivery;
 	}

+ 9 - 2
src/main/java/com/uas/platform/b2c/prod/commodity/model/V_ProductPerson.java

@@ -4,8 +4,15 @@ package com.uas.platform.b2c.prod.commodity.model;
 import com.uas.platform.core.persistence.EnterpriseUU;
 import com.uas.platform.core.persistence.UserUU;
 
-import javax.persistence.*;
-import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import java.io.*;
 import java.util.Date;
 import java.util.List;
 import java.util.Set;

+ 9 - 2
src/main/java/com/uas/platform/b2c/prod/commodity/model/V_ProductPrivate.java

@@ -3,8 +3,15 @@ package com.uas.platform.b2c.prod.commodity.model;
 import com.uas.platform.core.persistence.EnterpriseUU;
 import com.uas.platform.core.persistence.UserUU;
 
-import javax.persistence.*;
-import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import java.io.*;
 import java.util.Date;
 import java.util.Set;
 

+ 0 - 1
src/main/java/com/uas/platform/b2c/prod/commodity/service/CommodityInOutboundService.java

@@ -1,7 +1,6 @@
 package com.uas.platform.b2c.prod.commodity.service;
 
 import com.uas.platform.b2c.logistics.model.Invoice;
-import com.uas.platform.b2c.logistics.model.InvoiceFPurchase;
 import com.uas.platform.b2c.prod.commodity.model.CommodityInOutbound;
 import com.uas.platform.b2c.prod.commodity.model.InOutboundDetail;
 import com.uas.platform.b2c.trade.order.model.Order;

+ 12 - 2
src/main/java/com/uas/platform/b2c/prod/commodity/service/GoodsService.java

@@ -2,7 +2,12 @@ package com.uas.platform.b2c.prod.commodity.service;
 
 import com.uas.api.b2c_erp.seller.model.GoodsFUas;
 import com.uas.api.b2c_erp.seller.model.GoodsSimpleUas;
-import com.uas.platform.b2c.prod.commodity.model.*;
+import com.uas.platform.b2c.prod.commodity.model.Goods;
+import com.uas.platform.b2c.prod.commodity.model.GoodsFilter;
+import com.uas.platform.b2c.prod.commodity.model.GoodsHistory;
+import com.uas.platform.b2c.prod.commodity.model.GoodsInfo;
+import com.uas.platform.b2c.prod.commodity.model.GoodsSimple;
+import com.uas.platform.b2c.prod.commodity.model.Product;
 import com.uas.platform.b2c.prod.product.component.modal.Component;
 import com.uas.platform.b2c.trade.order.model.Order;
 import com.uas.platform.b2c.trade.order.model.PurchaseDetail;
@@ -47,7 +52,12 @@ public interface GoodsService {
      */
     Goods updateAvailableDays(Goods goods, GoodsHistory.OperateType operateType, Long... param);
 
-
+    /**
+     * 设置上架商品基本属性
+     *
+     * @param goods 商品信息
+     */
+    void setGoodsDefault(Goods goods);
 
     /**
      * 根据uuid查找货物信息

+ 8 - 3
src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java

@@ -1,14 +1,19 @@
 package com.uas.platform.b2c.prod.commodity.service;
 
 import com.alibaba.fastjson.JSONObject;
-import com.uas.platform.b2c.prod.commodity.model.*;
+import com.uas.platform.b2c.prod.commodity.model.Goods;
+import com.uas.platform.b2c.prod.commodity.model.InOutboundDetail;
+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.ProductReplace;
+import com.uas.platform.b2c.prod.commodity.model.ReleaseProductByBatch;
+import com.uas.platform.b2c.prod.commodity.model.V_ProductPerson;
+import com.uas.platform.b2c.prod.commodity.model.V_ProductPrivate;
 import com.uas.platform.b2c.prod.product.component.modal.Component;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import org.springframework.data.domain.Page;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
 
 import java.util.List;
 import java.util.Map;

+ 76 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/service/ReleaseProductByBatchService.java

@@ -1,7 +1,10 @@
 package com.uas.platform.b2c.prod.commodity.service;
 
 import com.uas.platform.b2c.prod.commodity.model.ReleaseProductByBatch;
+import com.uas.platform.b2c.prod.store.model.StoreIn;
 import com.uas.platform.core.model.PageInfo;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.data.domain.Page;
 import org.springframework.ui.ModelMap;
@@ -115,4 +118,77 @@ public interface ReleaseProductByBatchService {
      * 每天零层删除所有的信息
      */
     void deleteAllInfo();
+
+    /**
+     * 判断店铺信息
+     *
+     * @param selfSale 自营还是寄售
+     * @return StoreIn
+     * @see StoreIn
+     */
+    StoreIn getStoreInfo(Boolean selfSale);
+
+    /**
+     *	验证该模板是否是商城模板
+     * @param headerRow 首行
+     * @param colNum	总列
+     * @param currency	币别
+     * @param isPcb 是否pcb模块
+     * @param isAPerson 是否为个人用户
+     */
+    void validateTemplate(Row headerRow, int colNum, String currency, boolean isAPerson, boolean isPcb);
+
+    /**
+     * 验证是否是模板的数据
+     * @param row excel的row对象
+     * @param rowNum 行号
+     * @return true false
+     */
+    boolean validateExcelData(Row row, int rowNum);
+
+    /**
+     * 初始化product信息,将excel内容转换为product字段值
+     * @param row 行对象
+     * @param aProduct 验证单行数据
+     * @param rowNum 行数
+     * @param isPcb 是否pcb模块
+     * @param isAPerson 是否是个人用户
+     * @return 为空的个数
+     */
+    int convertValueToProduct(Row row, ReleaseProductByBatch aProduct, int rowNum, boolean isAPerson, boolean isPcb);
+
+    /**
+     * 统计批量上传数据相关
+     *
+     * @param modelMap ModelMap
+     * @param strCount
+     * @param batch
+     */
+    void checkReleaseCount(ModelMap modelMap, String strCount, String batch);
+
+    /**
+     *  1:比较品牌、型号、自定义标签是否重复,2:比较六要素是否重复
+     * @param releaseProductByBatchArrayList 批量上传商品建立临时表存储相关信息
+     */
+    void judgeSameReleaseProductByBatch(List<ReleaseProductByBatch> releaseProductByBatchArrayList);
+
+    /**
+     * 调用存储过程
+     * @param enUU 企业的enUU
+     * @param batch 批次
+     * @return 验证结果
+     */
+    String productReleaseValid(Long enUU, String batch);
+
+    /**
+     * 创建时间 :2016年12月11日 下午2:02:16
+     *
+     * @author yujia
+     * @param cell
+     * @param cellType
+     * @param n
+     * @param r
+     * @return Object
+     */
+    Object readWorkBookCell(Cell cell, int cellType, int r, int n);
 }

+ 11 - 11
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/CommodityInOutboundServiceImpl.java

@@ -40,7 +40,11 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 /**
  * description
@@ -50,21 +54,17 @@ import java.util.*;
 @Service
 public class CommodityInOutboundServiceImpl implements CommodityInOutboundService {
 
-    private final CommodityInOutboundDao commodityInOutboundDao;
-
-    private final CreateNumberService createNumberService;
+    @Autowired
+    private CommodityInOutboundDao commodityInOutboundDao;
 
-    private final ProductService productService;
+    @Autowired
+    private CreateNumberService createNumberService;
 
     @Autowired
-    private InvoiceService invoiceService;
+    private ProductService productService;
 
     @Autowired
-    public CommodityInOutboundServiceImpl(CommodityInOutboundDao commodityInOutboundDao, CreateNumberService createNumberService, ProductService productService) {
-        this.commodityInOutboundDao = commodityInOutboundDao;
-        this.createNumberService = createNumberService;
-        this.productService = productService;
-    }
+    private InvoiceService invoiceService;
 
     /**
      * 批量保存出入库记录

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

@@ -18,13 +18,24 @@ import com.uas.platform.b2c.core.constant.ShortConstant;
 import com.uas.platform.b2c.core.constant.SplitChar;
 import com.uas.platform.b2c.core.constant.Status;
 import com.uas.platform.b2c.core.support.SystemSession;
-import com.uas.platform.b2c.core.utils.*;
+import com.uas.platform.b2c.core.utils.DoubleArith;
+import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.platform.b2c.core.utils.NumberUtil;
+import com.uas.platform.b2c.core.utils.RegexConstant;
+import com.uas.platform.b2c.core.utils.StringUtilB2C;
 import com.uas.platform.b2c.external.erp.commodity.util.ModelConverter;
 import com.uas.platform.b2c.prod.commodity.constant.DoubleConstant;
 import com.uas.platform.b2c.prod.commodity.constant.IntegerConstant;
 import com.uas.platform.b2c.prod.commodity.constant.StringConstant;
 import com.uas.platform.b2c.prod.commodity.constant.UploadConstant;
-import com.uas.platform.b2c.prod.commodity.dao.*;
+import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
+import com.uas.platform.b2c.prod.commodity.dao.GoodsHistoryDao;
+import com.uas.platform.b2c.prod.commodity.dao.GoodsModifyInfoDao;
+import com.uas.platform.b2c.prod.commodity.dao.GoodsSimpleDao;
+import com.uas.platform.b2c.prod.commodity.dao.PCBDao;
+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.dao.ProductPrivateDao;
 import com.uas.platform.b2c.prod.commodity.model.*;
 import com.uas.platform.b2c.prod.commodity.model.GoodsHistory.OperateType;
 import com.uas.platform.b2c.prod.commodity.service.*;
@@ -66,7 +77,11 @@ import com.uas.platform.b2c.trade.support.CodeType;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.b2c.trade.util.BoundedExecutor;
 import com.uas.platform.core.exception.IllegalOperatorException;
-import com.uas.platform.core.model.*;
+import com.uas.platform.core.model.Constant;
+import com.uas.platform.core.model.EncodingRulesConstant;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import com.uas.platform.core.model.Type;
 import com.uas.platform.core.persistence.criteria.CriterionExpression;
 import com.uas.platform.core.persistence.criteria.CriterionExpression.Operator;
 import com.uas.platform.core.persistence.criteria.LogicalExpression;
@@ -110,7 +125,17 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.regex.Matcher;
@@ -159,6 +184,9 @@ public class GoodsServiceImpl implements GoodsService {
     @Autowired
     private ComponentDao componentDao;
 
+    @Autowired
+    private InOutboundDetailService inOutboundDetailService;
+
     @Autowired
     private ProductPrivateDao productPrivateDao;
 
@@ -195,6 +223,9 @@ public class GoodsServiceImpl implements GoodsService {
     @Autowired
     private JdbcTemplate jdbcTemplate;
 
+    @Autowired
+    private CommodityInOutboundService commodityInOutboundService;
+
     private final ProductDao productDao;
 
     @Autowired
@@ -286,9 +317,11 @@ public class GoodsServiceImpl implements GoodsService {
         }
 
         //验证分段价格的有效性。
-        ResultMap resultMap = validFragmentPrice(goods);
-        if (resultMap.getCode() != CodeType.OK.code()) {
-            return resultMap;
+        if (!CollectionUtils.isEmpty(goods.getPrices())) {
+            ResultMap resultMap = validFragmentPrice(goods);
+            if (resultMap.getCode() != CodeType.OK.code()) {
+                return resultMap;
+            }
         }
         if (goods.getProductid() == null) {
             throw new IllegalOperatorException("型号" + goods.getCode() + "品牌" + goods.getBrandNameEn() +"的物料库信息丢失");
@@ -550,7 +583,8 @@ public class GoodsServiceImpl implements GoodsService {
      *
      * @param goods
      */
-    private void setGoodsDefault(Goods goods) {
+    @Override
+    public void setGoodsDefault(Goods goods) {
         if (StringUtils.isEmpty(goods.getBatchCode())) {
             String batchCode = EncodingRulesConstant.BATCH.replace("_TIMESTAP_NUMBER",
                     createNumberService.getTimeNumber("product$goods", 8));
@@ -1429,6 +1463,9 @@ public class GoodsServiceImpl implements GoodsService {
      * @return
      */
     private String analyzeQtyNumber(List<GoodsQtyPrice> qtyPriceList) {
+        if (CollectionUtils.isEmpty(qtyPriceList)) {
+            return "";
+        }
         StringBuilder builder = new StringBuilder();
         for (GoodsQtyPrice qtyPrice : qtyPriceList) {
             builder.append(SplitChar.SLASH);
@@ -1447,6 +1484,9 @@ public class GoodsServiceImpl implements GoodsService {
      * @return
      */
     private String analyzeQtyPrice(List<GoodsQtyPrice> qtyPriceList) {
+        if (CollectionUtils.isEmpty(qtyPriceList)) {
+            return "";
+        }
         StringBuilder builder = new StringBuilder();
         Double price = null;
         for (GoodsQtyPrice qtyPrice : qtyPriceList) {
@@ -1591,6 +1631,42 @@ public class GoodsServiceImpl implements GoodsService {
         if(nowGoods.getProductid() != null) {
             Product product = productDao.findOne(nowGoods.getProductid());
             if(product != null) {
+                if (!StringUtilB2C.isEmpty(nowGoods.getSpec()) && !nowGoods.getSpec().equals(oldGoods.getSpec())) {
+                    product.setSpec(oldGoods.getSpec());
+                }
+                if (!StringUtilB2C.isEmpty(nowGoods.getPackaging()) && !nowGoods.getPackaging().equals(oldGoods.getPackaging())) {
+                    product.setPackaging(oldGoods.getPackaging());
+                }
+                if (!StringUtilB2C.isEmpty(nowGoods.getMinPackQty()) && !nowGoods.getMinPackQty().equals(oldGoods.getMinPackQty())) {
+                    product.setMinPackQty(oldGoods.getMinPackQty());
+                }
+                if (!StringUtilB2C.isEmpty(oldGoods.getCostPrice()) && !oldGoods.getCostPrice().equals(nowGoods.getCostPrice())) {
+                    product.setPrice(oldGoods.getCostPrice());
+                }
+                if (!StringUtilB2C.isEmpty(nowGoods.getReserve()) && !StringUtilB2C.isEmpty(product.getErpReserve())
+                        && !product.getErpReserve().equals(oldGoods.getReserve())) {
+                    product.setErpReserve(oldGoods.getReserve());
+                    InOutboundDetail inOutboundDetail = new InOutboundDetail(product);
+                    Double qty = NumberUtil.sub(oldGoods.getReserve(), product.getErpReserve());
+                    if (NumberUtil.compare(qty, DoubleConstant.zero) != 0) {
+                        //做出入库记录
+                        inOutboundDetail.setQty(qty);
+                        inOutboundDetail.setPrice(oldGoods.getCostPrice());
+                    }
+                    Set<InOutboundDetail> set = new HashSet<>();
+                    set.add(inOutboundDetail);
+                    if (CollectionUtils.isNotEmpty(set)) {
+                        Map<String, Set<InOutboundDetail>> inOutMap = inOutboundDetailService.initInOutboundDetailByQty(set);
+                        Set<String> stringSet = inOutMap.keySet();
+                        for (String type : stringSet) {
+                            CommodityInOutbound commodityInOutbound = commodityInOutboundService.produceCommodityInOutbound(inOutMap.get(type), type);
+                            if (commodityInOutbound != null) {
+                                commodityInOutboundService.save(commodityInOutbound);
+                            }
+                        }
+                    }
+                }
+                productDao.save(product);
                 if (StringConstant.ERP.equals(product.getSourceApp())) {
                     List<Goods> goodses = goodsDao.findByProductId(product.getId());
                     Double reserve = productService.getGoodsReserveByErpReserve(product.getErpReserve(), goodses);
@@ -4091,7 +4167,7 @@ public class GoodsServiceImpl implements GoodsService {
         if (CollectionUtils.isEmpty(prIds)) {
             return new HashedMap();
         } else {
-            String sql = "select go_productid, count(go_id) num from trade$goods where go_productid in (:prids) group by go_productid";
+            String sql = "/*#mycat:db_type=master*/select go_productid, count(go_id) num from trade$goods where go_productid in (:prids) group by go_productid";
             Map<String,Object> parameters = new HashMap<String,Object>();
             parameters.put("prids", prIds);
             final Map<Long, Integer> resultMap = new HashedMap();

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

@@ -3,15 +3,20 @@ package com.uas.platform.b2c.prod.commodity.service.impl;
 import com.uas.platform.b2c.core.utils.NumberUtil;
 import com.uas.platform.b2c.logistics.model.InvoiceDetail;
 import com.uas.platform.b2c.prod.commodity.constant.DoubleConstant;
-import com.uas.platform.b2c.prod.commodity.model.InOutboundDetail;
 import com.uas.platform.b2c.prod.commodity.dao.InOutboundDetailDao;
+import com.uas.platform.b2c.prod.commodity.model.InOutboundDetail;
 import com.uas.platform.b2c.prod.commodity.service.InOutboundDetailService;
 import com.uas.platform.b2c.prod.commodity.type.InOutBoundType;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 /**
  * description

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

@@ -1,12 +1,16 @@
 package com.uas.platform.b2c.prod.commodity.service.impl;
 
 import com.uas.platform.b2c.core.constant.IntegerConstant;
+import com.uas.platform.b2c.core.constant.SplitChar;
+import com.uas.platform.b2c.core.utils.StringUtilB2C;
 import com.uas.platform.b2c.prod.commodity.dao.ProductPrivateDao;
 import com.uas.platform.b2c.prod.commodity.model.ProductPrivate;
 import com.uas.platform.b2c.prod.commodity.service.GoodsService;
 import com.uas.platform.b2c.prod.commodity.service.ProductPrivateService;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -26,10 +30,13 @@ public class ProductPrivateServiceImpl implements ProductPrivateService {
 
     private final GoodsService goodsService;
 
+    private final JdbcTemplate jdbcTemplate;
+
     @Autowired
-    public ProductPrivateServiceImpl(ProductPrivateDao productPrivateDao, GoodsService goodsService) {
+    public ProductPrivateServiceImpl(ProductPrivateDao productPrivateDao, GoodsService goodsService, JdbcTemplate jdbcTemplate) {
         this.productPrivateDao = productPrivateDao;
         this.goodsService = goodsService;
+        this.jdbcTemplate = jdbcTemplate;
     }
 
 
@@ -55,8 +62,10 @@ public class ProductPrivateServiceImpl implements ProductPrivateService {
         if (CollectionUtils.isEmpty(prIds)) {
             return Collections.emptyList();
         } else {
-            List<ProductPrivate> privates = productPrivateDao.findByPrIds(prIds);
-            return privates;
+            String contact = StringUtilB2C.joinListUseContact(prIds, SplitChar.COMMA);
+            String sql = "/*#mycat:db_type=master*/ select p.id, p.pr_id,p.pr_b2cenabled,p.pr_batchcount,p.pr_attach from product$private p where p.pr_id in ("+ contact +");";
+            List<ProductPrivate> mapList = jdbcTemplate.query(sql, new BeanPropertyRowMapper(ProductPrivate.class));
+            return mapList;
         }
     }
 

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

@@ -13,7 +13,11 @@ import com.uas.platform.b2c.common.base.dao.CommonDao;
 import com.uas.platform.b2c.common.search.rpc.service.SearchService;
 import com.uas.platform.b2c.common.search.util.SPage;
 import com.uas.platform.b2c.core.config.SysConf;
-import com.uas.platform.b2c.core.constant.*;
+import com.uas.platform.b2c.core.constant.IntegerConstant;
+import com.uas.platform.b2c.core.constant.ReleaseStatus;
+import com.uas.platform.b2c.core.constant.ShortConstant;
+import com.uas.platform.b2c.core.constant.SplitChar;
+import com.uas.platform.b2c.core.constant.Status;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
 import com.uas.platform.b2c.core.utils.NumberUtil;
@@ -21,9 +25,44 @@ import com.uas.platform.b2c.core.utils.StringUtilB2C;
 import com.uas.platform.b2c.prod.commodity.constant.DoubleConstant;
 import com.uas.platform.b2c.prod.commodity.constant.PublicProductUrl;
 import com.uas.platform.b2c.prod.commodity.constant.StringConstant;
-import com.uas.platform.b2c.prod.commodity.dao.*;
-import com.uas.platform.b2c.prod.commodity.model.*;
-import com.uas.platform.b2c.prod.commodity.service.*;
+import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
+import com.uas.platform.b2c.prod.commodity.dao.GoodsHistoryDao;
+import com.uas.platform.b2c.prod.commodity.dao.MatchModelDao;
+import com.uas.platform.b2c.prod.commodity.dao.PCBDao;
+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.dao.ProductMatchResultDao;
+import com.uas.platform.b2c.prod.commodity.dao.ProductModifyHistoryDao;
+import com.uas.platform.b2c.prod.commodity.dao.ProductPersonDao;
+import com.uas.platform.b2c.prod.commodity.dao.ProductPrivateDao;
+import com.uas.platform.b2c.prod.commodity.dao.ProductReplaceDao;
+import com.uas.platform.b2c.prod.commodity.dao.ProductStoreStatusDao;
+import com.uas.platform.b2c.prod.commodity.dao.V_ProductPersonDao;
+import com.uas.platform.b2c.prod.commodity.dao.V_ProductPrivateDao;
+import com.uas.platform.b2c.prod.commodity.model.Goods;
+import com.uas.platform.b2c.prod.commodity.model.GoodsHistory;
+import com.uas.platform.b2c.prod.commodity.model.GoodsQtyPrice;
+import com.uas.platform.b2c.prod.commodity.model.InOutboundDetail;
+import com.uas.platform.b2c.prod.commodity.model.MatchModel;
+import com.uas.platform.b2c.prod.commodity.model.Product;
+import com.uas.platform.b2c.prod.commodity.model.ProductAttachSubmit;
+import com.uas.platform.b2c.prod.commodity.model.ProductDetail;
+import com.uas.platform.b2c.prod.commodity.model.ProductMatchResult;
+import com.uas.platform.b2c.prod.commodity.model.ProductPerson;
+import com.uas.platform.b2c.prod.commodity.model.ProductPrivate;
+import com.uas.platform.b2c.prod.commodity.model.ProductReplace;
+import com.uas.platform.b2c.prod.commodity.model.ProductStoreStatus;
+import com.uas.platform.b2c.prod.commodity.model.ReleaseProductByBatch;
+import com.uas.platform.b2c.prod.commodity.model.UASBatchPutOnProperty;
+import com.uas.platform.b2c.prod.commodity.model.V_ProductPerson;
+import com.uas.platform.b2c.prod.commodity.model.V_ProductPrivate;
+import com.uas.platform.b2c.prod.commodity.service.GoodsHistoryService;
+import com.uas.platform.b2c.prod.commodity.service.GoodsService;
+import com.uas.platform.b2c.prod.commodity.service.InOutboundDetailService;
+import com.uas.platform.b2c.prod.commodity.service.ProductAttachService;
+import com.uas.platform.b2c.prod.commodity.service.ProductPrivateService;
+import com.uas.platform.b2c.prod.commodity.service.ProductService;
+import com.uas.platform.b2c.prod.commodity.service.UASBatchPutOnPropertyService;
 import com.uas.platform.b2c.prod.commodity.type.ProductConstant;
 import com.uas.platform.b2c.prod.commodity.util.GoodsUtil;
 import com.uas.platform.b2c.prod.product.brand.dao.BrandDao;
@@ -90,7 +129,16 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -504,7 +552,9 @@ public class ProductServiceImpl implements ProductService {
             List<Goods> goodsList = goodsDao.findByProductIdOrderByGoodsId(product.getId());
             if (!CollectionUtils.isEmpty(goodsList)) {
                 //目前现在一颗物料只能存在一个在售产品,目前取id最大的在售产品信息
-                resultList.add(goodsList.get(0));
+                Goods needGoods = goodsList.get(0);
+                needGoods.setCostPrice(product.getPrice());
+                resultList.add(needGoods);
             } else {
                 Goods g = Goods.productConvertGoods(product);
                 resultList.add(g);
@@ -2015,15 +2065,17 @@ public class ProductServiceImpl implements ProductService {
                     @Override
                     public void run() {
                         List<Product> productList = productDao.findByCmpUuId(component.getUuid());
-                        List<Product> list = new ArrayList<>();
+                        Set<Product> set = new HashSet<>();
                         List<Long> ids = new ArrayList<>();
                         for (Product product : productList) {
                             if (!StringUtils.isEmpty(component.getAttach())) {
+                                product.setAttachment(component.getAttach());
+                                set.add(product);
                                 ids.add(product.getId());
                             }
-                            if (StringUtils.isEmpty(product.getSpec()) && !StringUtils.isEmpty(component.getSpec())) {
+                            if ((StringUtils.isEmpty(product.getSpec()) && !StringUtils.isEmpty(component.getSpec()))) {
                                 product.setSpec(component.getSpec());
-                                list.add(product);
+                                set.add(product);
                             }
                         }
                         if (CollectionUtils.isNotEmpty(ids)) {
@@ -2050,8 +2102,8 @@ public class ProductServiceImpl implements ProductService {
                                 productPrivateDao.save(productPrivatelist);
                             }
                         }
-                        if (CollectionUtils.isNotEmpty(list)) {
-                            productDao.save(list);
+                        if (CollectionUtils.isNotEmpty(set)) {
+                            productDao.save(set);
                         }
                         goodsService.updateGoodsByComponent(component);
                     }
@@ -2117,12 +2169,12 @@ public class ProductServiceImpl implements ProductService {
             return new ArrayList<>();
         }
         if (sysConf.getProfile().equals("prod")) {
-            String sql = "/*#mycat:db_type=master*/ select p.pr_id, p.pr_code from products p where p.pr_code in (:prodNums);";
+            String sql = "/*#mycat:db_type=master*/ select p.pr_id, p.pr_code, p.pr_attachment from products p where p.pr_code in (:prodNums);";
             Map<String, Object> map = new HashedMap();
             map.put("prodNums", prodNums);
             List<Map<String, Object>> maps = namedParameterJdbcTemplate.queryForList(sql, map);
             List<Product> list = new ArrayList<>();
-            Product product = null;
+            Product product;
             for (Map<String, Object> stringObjectMap : maps) {
                 product = new Product();
                 Object pr_id = stringObjectMap.get("pr_id");
@@ -2133,6 +2185,10 @@ public class ProductServiceImpl implements ProductService {
                 if (pr_code != null) {
                     product.setProdNum((String) pr_code);
                 }
+                Object pr_attachment = stringObjectMap.get("pr_attachment");
+                if (pr_attachment != null) {
+                    product.setAttachment((String) pr_attachment);
+                }
                 if ((pr_code != null) && (pr_id != null)) {
                     list.add(product);
                 }
@@ -2172,7 +2228,7 @@ public class ProductServiceImpl implements ProductService {
     @Override
     public void saveByJdbcTemplate(List<ReleaseProductByBatch> list) {
         if (CollectionUtils.isNotEmpty(list)) {
-            jdbcTemplate.batchUpdate("insert into products(pr_code,pr_cmpimg,pr_enuu,pr_brand,pr_cmpcode,pr_cmpuuid,pr_kind,pr_kindid,pr_pcmpcode,pr_pbrand,pr_pbranden,pr_pbrandid,pr_pbranduuid,pr_standard,pr_create_time,pr_spec,pr_title,pr_issale, pr_price, pr_minpack, pr_packaging, pr_reserve) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
+            jdbcTemplate.batchUpdate("insert into products(pr_code,pr_cmpimg,pr_enuu,pr_brand,pr_cmpcode,pr_cmpuuid,pr_kind,pr_kindid,pr_pcmpcode,pr_pbrand,pr_pbranden,pr_pbrandid,pr_pbranduuid,pr_standard,pr_create_time,pr_spec,pr_title,pr_issale, pr_price, pr_minpack, pr_packaging, pr_reserve,pr_attachment) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
                     list, list.size(), new ParameterizedPreparedStatementSetter<ReleaseProductByBatch>() {
 
                         @Override
@@ -2199,6 +2255,7 @@ public class ProductServiceImpl implements ProductService {
                             ps.setObject(20, t.getMinPackage());
                             ps.setObject(21, t.getPackaging());
                             ps.setObject(22, t.getReserve());
+                            ps.setObject(23, t.getAttach());
                         }
                     });
         } else {

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

@@ -10,10 +10,36 @@ import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.NumberUtil;
 import com.uas.platform.b2c.core.utils.RegexConstant;
 import com.uas.platform.b2c.core.utils.StringUtilB2C;
-import com.uas.platform.b2c.prod.commodity.constant.*;
-import com.uas.platform.b2c.prod.commodity.dao.*;
-import com.uas.platform.b2c.prod.commodity.model.*;
-import com.uas.platform.b2c.prod.commodity.service.*;
+import com.uas.platform.b2c.prod.commodity.constant.DoubleConstant;
+import com.uas.platform.b2c.prod.commodity.constant.ErrorInfoConstant;
+import com.uas.platform.b2c.prod.commodity.constant.ModifyConstant;
+import com.uas.platform.b2c.prod.commodity.constant.ShortConstant;
+import com.uas.platform.b2c.prod.commodity.constant.StringConstant;
+import com.uas.platform.b2c.prod.commodity.constant.UploadConstant;
+import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
+import com.uas.platform.b2c.prod.commodity.dao.PCBDao;
+import com.uas.platform.b2c.prod.commodity.dao.PcbPropertyvalueDao;
+import com.uas.platform.b2c.prod.commodity.dao.ProductDao;
+import com.uas.platform.b2c.prod.commodity.dao.ProductPersonDao;
+import com.uas.platform.b2c.prod.commodity.dao.ReleaseProductByBatchDao;
+import com.uas.platform.b2c.prod.commodity.model.CommodityInOutbound;
+import com.uas.platform.b2c.prod.commodity.model.Goods;
+import com.uas.platform.b2c.prod.commodity.model.GoodsHistory;
+import com.uas.platform.b2c.prod.commodity.model.GoodsQtyPrice;
+import com.uas.platform.b2c.prod.commodity.model.InOutboundDetail;
+import com.uas.platform.b2c.prod.commodity.model.PCB;
+import com.uas.platform.b2c.prod.commodity.model.PCBPropertyValue;
+import com.uas.platform.b2c.prod.commodity.model.Product;
+import com.uas.platform.b2c.prod.commodity.model.ProductPerson;
+import com.uas.platform.b2c.prod.commodity.model.ProductPrivate;
+import com.uas.platform.b2c.prod.commodity.model.ReleaseProductByBatch;
+import com.uas.platform.b2c.prod.commodity.service.CommodityInOutboundService;
+import com.uas.platform.b2c.prod.commodity.service.GoodsHistoryService;
+import com.uas.platform.b2c.prod.commodity.service.GoodsService;
+import com.uas.platform.b2c.prod.commodity.service.InOutboundDetailService;
+import com.uas.platform.b2c.prod.commodity.service.ProductPrivateService;
+import com.uas.platform.b2c.prod.commodity.service.ProductService;
+import com.uas.platform.b2c.prod.commodity.service.ReleaseProductByBatchService;
 import com.uas.platform.b2c.prod.commodity.util.GoodsUtil;
 import com.uas.platform.b2c.prod.commodity.util.SheetUtil;
 import com.uas.platform.b2c.prod.product.brand.dao.BrandInfoDao;
@@ -38,10 +64,13 @@ import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.persistence.criteria.SimpleExpression;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.map.HashedMap;
-import org.apache.log4j.Logger;
 import org.apache.poi.hssf.usermodel.HSSFCell;
 import org.apache.poi.hssf.usermodel.HSSFDateUtil;
-import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.DateUtil;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.dao.DataAccessException;
@@ -109,9 +138,6 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 	@Autowired
 	private RestTemplate restTemplate;
 
-	@Autowired
-	private ProductPrivateDao productPrivateDao;
-
     @Autowired
     private ProductPersonDao productPersonDao;
 
@@ -127,9 +153,6 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 	@Autowired
 	private PcbPropertyvalueDao pcbPropertyvalueDao;
 
-	@Autowired
-	private V_ProductPrivateDao v_productPrivateDao;
-
 	@Autowired
 	private  ProductService productService;
 
@@ -145,9 +168,6 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 	@Autowired
 	private InOutboundDetailService inOutboundDetailService;
 
-
-	private final Logger logger = Logger.getLogger(getClass());
-
 	/**
 	 * 控制任务提交速度的线程池
 	 */
@@ -286,46 +306,60 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 		} else {
 			strCount = productReleaseValid(enUU, batch);
 		}
-		Integer filter = 0, failure = 0, success = 0;
 		if (!StringUtilB2C.isEmpty(strCount)) {
-			String[] split = strCount.split(SplitChar.HYPHEN);
-            if (split.length == 3) {
-                filter = Integer.valueOf(split[0]);
-                failure = Integer.valueOf(split[1]);
-                success = Integer.valueOf(split[2]);
-            } else {
-                //上面的代码只能在正式上获取到返回值,为了在测试上执行,增加获取结果的代码
-                Long userUU = SystemSession.getUser().getUserUU();
-                filter = releaseProductByBatchDao.getCountOfImportFail(userUU, batch, failCode);
-                failure = releaseProductByBatchDao.getCountPublisherUuAndBatchAndReleaseCode(userUU, batch, ReleaseStatus.failure.value());
-                success = releaseProductByBatchDao.getCountPublisherUuAndBatchAndReleaseCode(userUU, batch, ReleaseStatus.success.value());
-            }
+			checkReleaseCount(modelMap, strCount, batch);
 		}
 		if (!isAPerson && !isPcb) {
 			String publish = publishByBatch(batch, isPcb, ignoreImport);
 			modelMap.put("publish", publish);
 		}
 		modelMap.put("total", total);
-		modelMap.put("success", success);
-		modelMap.put("failure", failure);
-		modelMap.put("filter", filter);
 		modelMap.put("batch", batch);
 		return modelMap;
 	}
 
+    /**
+     * 统计批量上传数据相关
+     *
+     * @param modelMap ModelMap
+     * @param strCount
+     * @param batch
+     */
+    @Override
+    public void checkReleaseCount(ModelMap modelMap, String strCount, String batch) {
+        Integer filter, failure, success;
+        String[] split = strCount.split(SplitChar.HYPHEN);
+        int splitIndex = 3;
+        if (split.length == splitIndex) {
+            filter = Integer.valueOf(split[0]);
+            failure = Integer.valueOf(split[1]);
+            success = Integer.valueOf(split[2]);
+        } else {
+            //上面的代码只能在正式上获取到返回值,为了在测试上执行,增加获取结果的代码
+            Long userUU = SystemSession.getUser().getUserUU();
+            filter = releaseProductByBatchDao.getCountOfImportFail(userUU, batch, failCode);
+            failure = releaseProductByBatchDao.getCountPublisherUuAndBatchAndReleaseCode(userUU, batch, ReleaseStatus.failure.value());
+            success = releaseProductByBatchDao.getCountPublisherUuAndBatchAndReleaseCode(userUU, batch, ReleaseStatus.success.value());
+        }
+        modelMap.put("success", success);
+        modelMap.put("failure", failure);
+        modelMap.put("filter", filter);
+    }
+
 	/**
 	 * 判断是存在相同的信息
 	 * @param releaseProductByBatchs
 	 */
-	private void judgeSameReleaseProductByBatch(List<ReleaseProductByBatch> releaseProductByBatchs) {
+	@Override
+	public void judgeSameReleaseProductByBatch(List<ReleaseProductByBatch> releaseProductByBatchs) {
 		if (CollectionUtils.isEmpty(releaseProductByBatchs)) {
 			return ;
 		}
-		for(int i = releaseProductByBatchs.size() - 1; i > -1; i--) {
+		for (int i = releaseProductByBatchs.size() - 1; i > -1; i--) {
 			ReleaseProductByBatch releaseProductByBatch = releaseProductByBatchs.get(i);
 			for (int j = i - 1; j > -1; j--) {
 				ReleaseProductByBatch byBatch = releaseProductByBatchs.get(j);
-				if(releaseProductByBatch.compareSameProductTagInfo(byBatch)) {
+				if (releaseProductByBatch.compareSameProductTagInfo(byBatch)) {
 					releaseProductByBatch.setTag("");
 					releaseProductByBatch.setTagstr("");
 					releaseProductByBatch.addErrmsg(ErrorInfoConstant.REPEAT_IN_EXCEL.getInfo());
@@ -339,7 +373,6 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 		}
 	}
 
-
 	/**
 	 * 根据上传的信息,查看是否在个人物料库已存在。
 	 * @param releaseProductByBatchs
@@ -373,14 +406,14 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 		}
 	}
 
-
 	/**
 	 * 调用存储过程
 	 * @param enUU 企业的enUU
 	 * @param batch 批次
 	 * @return 验证结果
 	 */
-	private String productReleaseValid(Long enUU, String batch) {
+	@Override
+	public String productReleaseValid(Long enUU, String batch) {
         if (enUU == null || StringUtilB2C.isEmpty(batch)) {
             return "0";
         }
@@ -419,6 +452,7 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 			throw new IllegalOperatorException("您上传的信息超过2000条,请拆分成2000以再在上传");
 		}
 		List<ReleaseProductByBatch> batchList = new ArrayList<>(rowNum);
+		List<ReleaseProductByBatch> repeatBatchList = new ArrayList<>(rowNum);
 		String batch = createNumberService.getTimeNumber("product$goods", 8, rowNum);
 		Row headerRow = sheet.getRow(1);
 		validateModifyExcel(headerRow);
@@ -433,7 +467,7 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 			Object sellObj = readWorkBookCell(row.getCell(ModifyConstant.SALE_METHOD), Cell.CELL_TYPE_STRING,
 					r, ModifyConstant.SALE_METHOD);
 			aBatch.setSaleMethod(StringUtilB2C.getStr(sellObj).trim());
-			StoreIn storeIn = getModifyStoreInfo(sellObj, self, consignment);
+			StoreIn storeIn = getModifyStoreInfo(sellObj, self, consignment, skuObj);
 			if (storeIn == null) {
 				aBatch.addErrmsg(ErrorInfoConstant.STORE_ERROR.getInfo());
 				aBatch.setErrmsg(aBatch.getErrmsg().substring(1));
@@ -454,13 +488,7 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 				aBatch.setReleaseCode(ReleaseStatus.lack_info.value());
 				aBatch.setReleaseStatus(ReleaseStatus.lack_info.getPhrase());
 			} else {
-				// 导入成功的需要判断自定义标签是否重复
-//				if (CollectionUtils.isNotEmpty(batchList) && aBatch.getTag() != null) {
-//					if (validateTagInfo(aBatch, batchList)) {
-//						aBatch.setTag(null);
-//					}
-//				}
-				validateRepeatInExcel(batchList, aBatch, true);
+				validateRepeatInExcel(batchList, aBatch, true, repeatBatchList);
 			}
 			batchList.add(aBatch);
 			total++;
@@ -471,10 +499,11 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 //		resetRepeatData(batchList, true, false);
 //		setDefaultTag(batchList);
 		commonDao.save(batchList, ReleaseProductByBatch.class);
+		commonDao.save(repeatBatchList, ReleaseProductByBatch.class);
 		Integer filter = releaseProductByBatchDao.getCountOfImportFail(userUU, batch, failCode);
 		modelMap.put("total", total);
 		modelMap.put("success", success);
-		modelMap.put("fail", batchList.size() - success);
+		modelMap.put("fail", batchList.size() - success + repeatBatchList.size());
 		modelMap.put("filter", filter);
 		modelMap.put("batch", batch);
 		return modelMap;
@@ -489,64 +518,125 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 		if (CollectionUtils.isEmpty(batchList)) {
 			return result;
 		}
+		List<Long> productIds = new ArrayList<>(batchList.size());
 		List<String> batchCodes = new ArrayList<>();
 		for (ReleaseProductByBatch aBatch : batchList) {
-			if (!StringUtilB2C.isEmpty(aBatch.getBatchCode())) {
+			if (!StringUtilB2C.isEmpty(aBatch.getBatchCode()) && RegexConstant.isNumber(aBatch.getBatchCode())
+					&& StringUtilB2C.isEmpty(aBatch.getErrmsg())) {
+				productIds.add(Long.parseLong(aBatch.getBatchCode()));
+				continue;
+			}
+			if (!StringUtilB2C.isEmpty(aBatch.getBatchCode()) && StringUtilB2C.isEmpty(aBatch.getErrmsg())) {
 				batchCodes.add(aBatch.getBatchCode());
 			}
 		}
-
+		List<Product> products = new ArrayList<>();
+		if (CollectionUtils.isNotEmpty(productIds)) {
+			products = productDao.findProductInIds(productIds);
+		}
+		Product newProduct = null;
 		List<Goods> goodses = new ArrayList<>();
 		if (CollectionUtils.isNotEmpty(batchCodes)) {
 			goodses = goodsService.findGoodsByBatchCodes(batchCodes);
 		}
 		Goods newGoods = null;
 		List<GoodsHistory> goodsHistoryList = new ArrayList<>();
-		for (ReleaseProductByBatch aBatch : batchList) {
+			for (ReleaseProductByBatch aBatch : batchList) {
 			newGoods = null;
-			for (Goods goods : goodses) {
-				if (goods.getBatchCode().equals(aBatch.getBatchCode())) {
-					aBatch.setB2cBranden(goods.getBrandNameEn());
-					aBatch.setBrandNameEn(goods.getBrandNameEn());
-					aBatch.setKindName(goods.getKindNameCn());
-					aBatch.setB2cCode(goods.getCode());
-					aBatch.setCode(goods.getCode());
-					aBatch.setCurrency(goods.getCurrencyName());
-					if (goods.getUuid() == null) {
-						aBatch.setReleaseCode(ReleaseStatus.failure.value());
-						aBatch.setReleaseStatus(ReleaseStatus.failure.getPhrase());
+			if (!RegexConstant.isNumber(aBatch.getBatchCode())) {
+				for (Goods goods : goodses) {
+					if (goods.getBatchCode().equals(aBatch.getBatchCode())) {
+						aBatch.setB2cBranden(goods.getBrandNameEn());
+						aBatch.setBrandNameEn(goods.getBrandNameEn());
+						aBatch.setKindName(goods.getKindNameCn());
+						aBatch.setB2cCode(goods.getCode());
+						aBatch.setCode(goods.getCode());
+						aBatch.setCurrency(goods.getCurrencyName());
+						if (goods.getUuid() == null) {
+							aBatch.setReleaseCode(ReleaseStatus.failure.value());
+							aBatch.setReleaseStatus(ReleaseStatus.failure.getPhrase());
+						}
+						fillInGoods(goods, aBatch);
+						newGoods = goods;
+						break;
 					}
-					fillInGoods(goods, aBatch);
-					newGoods = goods;
-					break;
 				}
-			}
-			if (newGoods == null) {
-				newGoods = new Goods();
-				TradeDeliveryDelayTime delayTime = getDelayTime(aBatch);
-				newGoods.setGoodsByReleaseProductByBatch(aBatch, delayTime);
-				goodsHistoryList.add(goodsHistoryService.converTGoodsHist(newGoods, GoodsHistory.OperateType.Publish.getPhrase(), false));
-			}
-			ResultMap resultMap = goodsService.updateGoods(newGoods);
-			if (resultMap.isSuccess()) {
-				Goods goods1 = (Goods) resultMap.getData();
-				if (Status.REMOVED.value() == aBatch.getStatus() && Status.REMOVED.value() != goods1.getStatus()) {
-					ResultMap offMap = goodsService.offShelfGoodsByProvider(newGoods.getBatchCode(), null, false);
-					if (offMap.isSuccess()) {
-						result++;
+				if (newGoods == null) {
+					newGoods = new Goods();
+					TradeDeliveryDelayTime delayTime = getDelayTime(aBatch);
+					newGoods.setGoodsByReleaseProductByBatch(aBatch, delayTime);
+					goodsHistoryList.add(goodsHistoryService.converTGoodsHist(newGoods, GoodsHistory.OperateType.Publish.getPhrase(), false));
+				}
+				ResultMap resultMap = goodsService.updateGoods(newGoods);
+				if (resultMap.isSuccess()) {
+					Goods goods1 = (Goods) resultMap.getData();
+					if (aBatch.getStatus() != null && goods1.getStatus() != null
+							&& Status.REMOVED.value() == aBatch.getStatus() && Status.REMOVED.value() != goods1.getStatus()) {
+						ResultMap offMap = goodsService.offShelfGoodsByProvider(newGoods.getBatchCode(), null, false);
+						if (offMap.isSuccess()) {
+							result++;
+						} else {
+							aBatch.setErrmsg(offMap.getMessage());
+							aBatch.setReleaseCode(ReleaseStatus.lack_info.value());
+							aBatch.setReleaseStatus(ReleaseStatus.lack_info.getPhrase());
+						}
 					} else {
-						aBatch.setErrmsg(offMap.getMessage());
-						aBatch.setReleaseCode(ReleaseStatus.lack_info.value());
-						aBatch.setReleaseStatus(ReleaseStatus.lack_info.getPhrase());
+						result++;
 					}
 				} else {
-					result++;
+					aBatch.setErrmsg(resultMap.getMessage());
+					aBatch.setReleaseCode(ReleaseStatus.lack_info.value());
+					aBatch.setReleaseStatus(ReleaseStatus.lack_info.getPhrase());
 				}
 			} else {
-				aBatch.setErrmsg(resultMap.getMessage());
-				aBatch.setReleaseCode(ReleaseStatus.lack_info.value());
-				aBatch.setReleaseStatus(ReleaseStatus.lack_info.getPhrase());
+				for (Product product : products) {
+					if (product.getId().equals(Long.parseLong(aBatch.getBatchCode()))) {
+						aBatch.setB2cCode(product.getPcmpcode());
+						aBatch.setProductNum(product.getProdNum());
+						aBatch.setBrandNameEn(product.getBrand());
+						aBatch.setKindName(product.getProdName());
+						aBatch.setCurrency(product.getCurrency());
+						aBatch.setProductNum(product.getProdNum());
+						newProduct = product;
+						InOutboundDetail inOutboundDetail = new InOutboundDetail(newProduct);
+						fillInProduct(newProduct, aBatch, inOutboundDetail);
+						Set<InOutboundDetail> set = new HashSet<>();
+						set.add(inOutboundDetail);
+						if (CollectionUtils.isNotEmpty(set)) {
+							Map<String, Set<InOutboundDetail>> inOutMap = inOutboundDetailService.initInOutboundDetailByQty(set);
+							Set<String> stringSet = inOutMap.keySet();
+							for (String type : stringSet) {
+								CommodityInOutbound commodityInOutbound = commodityInOutboundService.produceCommodityInOutbound(inOutMap.get(type), type);
+								if (commodityInOutbound != null) {
+									commodityInOutboundService.save(commodityInOutbound);
+								}
+							}
+						}
+						productDao.save(newProduct);
+						result++;
+					}
+				}
+				if (StringUtils.isEmpty(newProduct)) {
+					aBatch.setErrmsg("物料SKU码有误");
+					aBatch.setReleaseCode(ReleaseStatus.lack_info.value());
+					aBatch.setReleaseStatus(ReleaseStatus.lack_info.getPhrase());
+				} else {
+					Goods needGoods = new Goods();
+					needGoods.setProductInfo(newProduct);
+					needGoods.setMinBuyQty(aBatch.getMinBuyQty() == null ? needGoods.getMinPackQty() : aBatch.getMinBuyQty());
+					if (StringUtils.isEmpty(needGoods.getSelfSale())) {
+						needGoods.setSelfSale("2");
+					}
+					goodsService.setGoodsDefault(needGoods);
+					needGoods.setStatus();
+					goodsDao.save(needGoods);
+					GoodsHistory history = goodsHistoryService.converTGoodsHist(needGoods,
+							GoodsHistory.OperateType.Update.getPhrase(), false);
+					// 修改上下架状态并产生上下架历史
+					goodsHistoryService.save(history);
+				}
 			}
+
 		}
 		return result;
 	}
@@ -664,11 +754,56 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 		} else {
 			goods.setSelfSale("1");
 		}
+		if (null != aBatch.getCostPrice()) {
+			goods.setCostPrice(aBatch.getCostPrice());
+		}
 		goods.setSpec(aBatch.getSpec());
 		goods.setStatus(aBatch.getStatus());
 	}
 
-	private StoreIn getModifyStoreInfo(Object value, StoreIn self, StoreIn consignment) {
+	private void fillInProduct(Product product, ReleaseProductByBatch aBatch, InOutboundDetail inOutboundDetail) {
+		if (!StringUtils.isEmpty(aBatch.getSpec())) {
+			product.setSpec(aBatch.getSpec());
+		}
+		if (!StringUtils.isEmpty(aBatch.getPackaging())) {
+			product.setPackaging(aBatch.getPackaging());
+		}
+		if (!StringUtils.isEmpty(aBatch.getSelfMinDelivery())) {
+			product.setMinDelivery(aBatch.getSelfMinDelivery());
+		}
+		if (!StringUtils.isEmpty(aBatch.getSelfMaxDelivery())) {
+			product.setMaxDelivery(aBatch.getSelfMaxDelivery());
+		}
+		if (!StringUtils.isEmpty(aBatch.getBreakUp())) {
+			product.setBreakUp(aBatch.getBreakUp());
+		}
+		if (!StringUtils.isEmpty(aBatch.getMinPackage())) {
+			product.setMinPackQty(aBatch.getMinPackage());
+		} else {
+			product.setMinPackQty(1d);
+		}
+		if (!StringUtils.isEmpty(aBatch.getCostPrice())) {
+			product.setPrice(aBatch.getCostPrice());
+		}
+		if (!StringUtils.isEmpty(aBatch.getReserve())) {
+			product.setErpReserve(aBatch.getReserve());
+			Double qty = NumberUtil.sub(aBatch.getReserve(), product.getErpReserve());
+			if (NumberUtil.compare(qty, DoubleConstant.zero) != 0) {
+				//做出入库记录
+				product.setErpReserve(aBatch.getReserve());
+				inOutboundDetail = new InOutboundDetail(product);
+				inOutboundDetail.setQty(qty);
+				inOutboundDetail.setPrice(aBatch.getCostPrice());
+			}
+		}
+	}
+
+	private StoreIn getModifyStoreInfo(Object value, StoreIn self, StoreIn consignment, Object bachCode) {
+		if (!StringUtils.isEmpty(bachCode)) {
+			if (RegexConstant.isNumber(bachCode.toString().trim())) {
+				return consignment;
+			}
+		}
 		List<String> sellList = Arrays.asList("自营", "寄售");
 		if (StringUtils.isEmpty(value) || !sellList.contains(StringUtilB2C.getStr(value))) {
 			return null;
@@ -754,6 +889,18 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
         if (!StringUtils.isEmpty(statusValue)) {
             aProduct.setCostPriceByExcel(statusValue);
         }
+		Object status = readWorkBookCell(row.getCell(ModifyConstant.SALE_STATUS), Cell.CELL_TYPE_STRING,
+				rowNum, ModifyConstant.SALE_STATUS);
+        if (!StringUtils.isEmpty(status)) {
+        	List<String> statuss = ReleaseProductByBatch.STATUS_LIST;
+        	if (statuss.contains(status)) {
+        		if (statuss.get(0).equals(status)) {
+					aProduct.setStatus(601);
+				} else {
+        			aProduct.setStatus(612);
+				}
+			}
+		}
 
 //		Object tagValue = readWorkBookCell(row.getCell(ModifyConstant.CUSTOM_LABEL), Cell.CELL_TYPE_STRING,
 //				rowNum, ModifyConstant.CUSTOM_LABEL);
@@ -782,29 +929,28 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 	 * @param 	aBatch
 	 * @param 	isImport
 	 */
-	private void validateRepeatInExcel(List<ReleaseProductByBatch> batchList, ReleaseProductByBatch aBatch, Boolean isImport) {
+	private void validateRepeatInExcel(List<ReleaseProductByBatch> batchList, ReleaseProductByBatch aBatch, Boolean isImport,
+									   List<ReleaseProductByBatch> repeatBatchList) {
 		if (CollectionUtils.isEmpty(batchList) || !StringUtils.isEmpty(aBatch.getErrmsg()))
-			return ;
-		for (ReleaseProductByBatch each : batchList) {
-			if (StringUtils.isEmpty(each.getErrmsg()) && each.equals(aBatch)) {
-				aBatch.setErrmsg(ErrorInfoConstant.REPEAT_IN_EXCEL.getInfo());
-				aBatch.setReleaseCode(ReleaseStatus.had_exists.value());
-				aBatch.setReleaseStatus(ReleaseStatus.had_exists.getPhrase());
-//				if (!isImport) {
-//					aBatch.setErrmsg(ErrorInfoConstant.REPEAT_IN_EXCEL.getInfo());
-//					aBatch.setReleaseCode(ReleaseStatus.had_exists.value());
-//					aBatch.setReleaseStatus(ReleaseStatus.had_exists.getPhrase());
-//					break;
-//				} else {
-//					if (GoodsUtil.compareWithQtyPrice(each.getPrices(), aBatch.getPrices(), each.getCurrency())) {
-//						aBatch.setErrmsg(ErrorInfoConstant.REPEAT_IN_EXCEL.getInfo());
-//						aBatch.setReleaseCode(ReleaseStatus.had_exists.value());
-//						aBatch.setReleaseStatus(ReleaseStatus.had_exists.getPhrase());
-//						break;
-//					}
-//				}
-			}
-		}
+			return;
+		Iterator<ReleaseProductByBatch> iterator = batchList.iterator();
+		while (iterator.hasNext()) {
+			ReleaseProductByBatch byBatch = iterator.next();
+			if (StringUtils.isEmpty(byBatch.getErrmsg()) && byBatch.equals(aBatch)) {
+				byBatch.setErrmsg(ErrorInfoConstant.REPEAT_IN_EXCEL.getInfo());
+				byBatch.setReleaseCode(ReleaseStatus.had_exists.value());
+				byBatch.setReleaseStatus(ReleaseStatus.had_exists.getPhrase());
+				repeatBatchList.add(byBatch);
+				iterator.remove();
+			}
+		}
+//		for (ReleaseProductByBatch each : batchList) {
+//			if (StringUtils.isEmpty(each.getErrmsg()) && each.equals(aBatch)) {
+//				aBatch.setErrmsg(ErrorInfoConstant.REPEAT_IN_EXCEL.getInfo());
+//				aBatch.setReleaseCode(ReleaseStatus.had_exists.value());
+//				aBatch.setReleaseStatus(ReleaseStatus.had_exists.getPhrase());
+//			}
+//		}
 	}
 
 	/**
@@ -857,21 +1003,6 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 		}
 	}
 
-	/**
-	 * 验证该产品自定义标签是否重复
-	 * @param aProduct 单个产品
-	 * @param productSet 产品列表
-	 */
-	private Boolean validateTagInfo(ReleaseProductByBatch aProduct, List<ReleaseProductByBatch> productSet) {
-		for (ReleaseProductByBatch each : productSet) {
-			if (aProduct.getBrandNameEn().equals(each.getBrandNameEn()) && aProduct.getCode().equals(each.getCode())
-					&& aProduct.getTag().equals(each.getTag())) {
-				return true;
-			}
-		}
-		return false;
-	}
-
 	/**
 	 *	验证该模板是否是商城模板
 	 * @param headerRow 首行
@@ -879,7 +1010,8 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 	 * @param currency	币别
 	 * @param isPcb 是否pcb模块
 	 */
-	private void validateTemplate(Row headerRow, int colNum, String currency, boolean isAPerson, boolean isPcb) {
+	@Override
+	public void validateTemplate(Row headerRow, int colNum, String currency, boolean isAPerson, boolean isPcb) {
 		if (isAPerson) {
 			if (colNum == UploadConstant.MAX_TOTAL_COLUMN_PERSON) {
 				Cell errorCell = headerRow.getCell(UploadConstant.MAX_TOTAL_COLUMN_PERSON - 1);
@@ -939,11 +1071,17 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 	 * @param rowNum 行号
 	 * @return
 	 */
-	private boolean validateExcelData(Row row, int rowNum) {
+	@Override
+	public boolean validateExcelData(Row row, int rowNum) {
 		Object codeValue = readWorkBookCell(row.getCell(UploadConstant.PRODUCT_CODE), Cell.CELL_TYPE_STRING,
 				rowNum, UploadConstant.PRODUCT_CODE);
-		if ("只能填数字、英文、英文特殊符号".equals(StringUtilB2C.getStr(codeValue)) || "SJ-S-112DMH(举例)".equals(StringUtilB2C.getStr(codeValue)))
-			return false;
+		// 内容格式提示
+		String formatTip = "只能填数字、英文、英文特殊符号";
+		// 举例提示
+		String exampleTip = "SJ-S-112DMH(举例)";
+		if (formatTip.equals(StringUtilB2C.getStr(codeValue)) || exampleTip.equals(StringUtilB2C.getStr(codeValue))) {
+            return false;
+        }
 		return true;
 	}
 
@@ -982,52 +1120,13 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 		}
 	}
 
-	/**
-	 * 分析分段的价格
- 	 */
-	private List<GoodsQtyPrice> setPricesQty(List<GoodsQtyPrice> prices, ReleaseProductByBatch productByBatch) {
-		GoodsQtyPrice[] array = new GoodsQtyPrice[prices.size()];
-		prices.toArray(array);
-		Arrays.sort(array, new Comparator<GoodsQtyPrice>() {
-			@Override
-			public int compare(GoodsQtyPrice o1, GoodsQtyPrice o2) {
-				return NumberUtil.compare(o1.getEnd(), o2.getEnd());
-			}
-		});
-		List<GoodsQtyPrice> prices1 = Arrays.asList(array);
-		List<GoodsQtyPrice> prices2 = new ArrayList<>();
-		for (int j = 0; j < prices1.size(); j++) {
-			GoodsQtyPrice price = prices1.get(j);
-			if (j == 0) {
-				if(NumberUtil.compare(price.getEnd(), DoubleConstant.minReserve) > -1) {
-					price.setStart(DoubleConstant.minReserve);
-					prices2.add(price);
-				}
-			} else if (j < prices1.size() - 1) {
-				GoodsQtyPrice qtyPrice = prices1.get(j - 1);
-				if(NumberUtil.compare(qtyPrice.getEnd(), price.getEnd()) < 0 ) {
-					price.setStart(NumberUtil.add(qtyPrice.getEnd(), 1.0d));
-					prices2.add(price);
-				}
-			} else if (j == prices1.size() - 1) {
-				price.setEnd(DoubleConstant.maxMinPackageQty);
-				if (prices1.size() == 1) {
-					price.setStart(DoubleConstant.minReserve);
-				} else {
-					price.setStart(NumberUtil.add(prices1.get(j - 1).getEnd(), 1.0d));
-				}
-				prices2.add(price);
-			}
-		}
-		return prices2;
-	}
-
 	/**
 	 * 获取店铺的信息
 	 * @param selfSale
 	 * @return
 	 */
-	private StoreIn getStoreInfo(Boolean selfSale) {
+	@Override
+	public StoreIn getStoreInfo(Boolean selfSale) {
 		StoreIn storeIn = null;
 		if(selfSale) {
 			storeIn = storeInService.findByEnUU(SystemSession.getUser().getEnterprise().getUu());
@@ -1046,7 +1145,7 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 	 * @return
 	 */
 	private StoreIn getStoreIn(Boolean selfSale) {
-		StoreIn storeIn = null;
+		StoreIn storeIn;
 		if (selfSale) {
 			storeIn = storeInService.findByEnUU(SystemSession.getUser().getEnterprise().getUu());
 			if((storeIn == null) || (storeIn.getStatus() != StoreStatus.OPENED)) {
@@ -1116,41 +1215,6 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 		}
 	}
 
-	/**
-	 * 当分段价格为空时,设置默认分段价格
-	 * 其中分段1价格为必填项,这个是否还需要
-	 *
-	 * @param aProduct 单行数据
-	 * @param priceMaxMinPrice 最大和最小价格
-	 * @return
-	 */
-	private GoodsQtyPrice getDefaultQtyPrice(ReleaseProductByBatch aProduct, Double[] priceMaxMinPrice) {
-		GoodsQtyPrice qtyPrice = new GoodsQtyPrice();
-		qtyPrice.setStart(aProduct.getMinBuyQty());
-		if (Currency.USD.equals(aProduct.getCurrency())) {
-			Double usdMinPackPrice = aProduct.getUsdMinPackPrice();
-			if (usdMinPackPrice != null) {
-				qtyPrice.setUSDPrice(usdMinPackPrice);
-				qtyPrice.setUSDNTPrice(usdMinPackPrice);
-				priceMaxMinPrice[0] = usdMinPackPrice;
-				priceMaxMinPrice[1] = usdMinPackPrice;
-			}
-
-		} else {
-			Double rmbMinPackPrice = aProduct.getRmbMinPackPrice();
-			if (rmbMinPackPrice != null) {
-				qtyPrice.setRMBPrice(rmbMinPackPrice);
-				BigDecimal priceNum = new BigDecimal(rmbMinPackPrice);
-				BigDecimal taxNum = new BigDecimal(aProduct.getRmbTaxRate() + 1);
-				qtyPrice.setRMBNTPrice(priceNum.divide(taxNum, 6, BigDecimal.ROUND_HALF_UP).doubleValue());
-				priceMaxMinPrice[0] = rmbMinPackPrice;
-				priceMaxMinPrice[1] = rmbMinPackPrice;
-			}
-		}
-		qtyPrice.setEnd(DoubleConstant.maxMinPackageQty);
-		return qtyPrice;
-	}
-
 	/**
 	 * 初始化product信息,将excel内容转换为product字段值
 	 * @param row 行对象
@@ -1158,7 +1222,8 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 	 * @param rowNum 行数
 	 * @param isPcb 是否pcb模块
 	 */
-	private int convertValueToProduct(Row row, ReleaseProductByBatch aProduct, int rowNum, boolean isAPerson, boolean isPcb) {
+	@Override
+	public int convertValueToProduct(Row row, ReleaseProductByBatch aProduct, int rowNum, boolean isAPerson, boolean isPcb) {
 		// 统计为空的个数
 		int result = 0;
 		aProduct.setNum(rowNum - 2);
@@ -1168,7 +1233,7 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 			result += 1;
 		}
 		aProduct.setBrandEnByExcel(brandValue);
-		// pcb模块判断类目是否为商城标准品牌
+		// pcb模块判断类目是否为商城标准品牌,是则补充标准品牌信息
 		if (isPcb && !StringUtils.isEmpty(aProduct.getBrandNameEn())) {
 			List<BrandInfo> brandInfos = brandInfoDao.findByName(aProduct.getBrandNameEn());
 			if (CollectionUtils.isNotEmpty(brandInfos)) {
@@ -1177,8 +1242,6 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 					aProduct.setBranduuid(brandInfo.getUuid());
 					aProduct.setBrandId(brandInfo.getId());
 				}
-			} else {
-				aProduct.addErrmsg(ErrorInfoConstant.BRAND_UNSTANDARD.getInfo());
 			}
 		}
 
@@ -1266,10 +1329,6 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 			aProduct.setMinBuyQtyByExcel(buyQtyValue);
 
 			aProduct.setTagByExcel("");
-//			// 自定义标签不为null,则检查是否重复
-//			if (aProduct.getCode() != null && aProduct.getBrandNameEn() != null && aProduct.getTag() != null) {
-//				resetTag(aProduct);
-//			}
 
 			// 如果是pcb模块,解析尺寸、颜色、铜厚、厚度
 			if (isPcb) {
@@ -1298,38 +1357,6 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 		return result;
 	}
 
-	/**
-	 * 重新设置tag标签
-	 * @param aProduct
-	 */
-	private void resetTag(ReleaseProductByBatch aProduct) {
-		Long enuu = SystemSession.getUser().getEnterprise().getUu();
-		int count = 0;
-		List<Product> productList = productDao.findMatchStandard(enuu, aProduct.getBrandNameEn(), aProduct.getCode(), IntegerConstant.YES_SHORT);
-		if (!CollectionUtils.isEmpty(productList)) {
-			if (aProduct.getBatchCode() != null) {
-				count = goodsDao.findCountByTagNotBatch(enuu, aProduct.getBatchCode(), productList.get(0).getPbranden(),
-						productList.get(0).getPcmpcode(), aProduct.getTag());
-			} else {
-				count = goodsDao.findCountByTagInGoods(enuu, productList.get(0).getPbranden(),
-						productList.get(0).getPcmpcode(), aProduct.getTag());
-			}
-
-		} else {
-			if (aProduct.getBatchCode() != null) {
-				count = goodsDao.findCountByTagNotBatch(enuu, aProduct.getBatchCode(), aProduct.getBrandNameEn(),
-						aProduct.getCode(), aProduct.getTag());
-			} else {
-				count = goodsDao.findCountByTagInGoods(enuu, aProduct.getBrandNameEn(),
-						aProduct.getCode(), aProduct.getTag());
-			}
-		}
-		// 如果在该型号品牌已有重复,则忽略该自定义标签
-		if (count != 0) {
-			aProduct.setTag(null);
-		}
-	}
-
 	/**
 	 * 初始化产品导入分段价格
 	 * @param row 行对象
@@ -1549,7 +1576,8 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 	 * @throws @Description:
 	 *             传入单元格,类型,返回值
 	 */
-	private Object readWorkBookCell(Cell cell, int cellType, int r, int n) {
+ 	@Override
+	public Object readWorkBookCell(Cell cell, int cellType, int r, int n) {
 		Object obj = null;
 		try {
 			if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) {
@@ -1561,9 +1589,7 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 						throw new IllegalOperatorException("读取表格中"+ (r + 1)+"行"+ (n+1)+ "列的内容错误,需要文本格式的信息");
 					}
 					String str = cell.getStringCellValue().trim();
-//					Object data = getCellData(cell);
-//					String str = data == null ? "" : data.toString();
-					if(str.indexOf("\u00A0") > -1){
+					if (str.indexOf("\u00A0") > -1){
 						  str= str.replaceAll("\u00A0", "");
 					}
 					str = StringUtilB2C.replaceTabAndLineBreak(str);
@@ -2040,6 +2066,7 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 			List<Product> productes = productService.findProductIdAndProdnumsByProdNums(proNums);
 			for (Product producte : productes) {
 				ProductPrivate productPrivate = new ProductPrivate(producte.getId());
+				productPrivate.setAttach(producte.getAttachment());
 				productPrivates.add(productPrivate);
 
 				prIds.add(producte.getId());

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

@@ -5,6 +5,7 @@ import com.uas.platform.b2c.prod.product.common.dao.CommonCountDao;
 import com.uas.platform.b2c.prod.product.common.model.CommonCount;
 import com.uas.platform.core.util.HttpUtil;
 import java.util.Date;
+import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Component;
@@ -24,6 +25,8 @@ public class CommonTask {
 
     private final JdbcTemplate jdbcTemplate;
 
+    private final Logger logger = Logger.getLogger(getClass());
+
     @Autowired
     public CommonTask(CommonCountDao commonCountDao, JdbcTemplate jdbcTemplate) {
         this.commonCountDao = commonCountDao;
@@ -37,6 +40,7 @@ public class CommonTask {
             if (CommonCount.SourceType.HTTP.equals(commonCount.getSourceType())) {
                 try {
                     String responseText = HttpUtil.sendGetRequest(commonCount.getSql(), null).getResponseText();
+                    logger.info(String.format("commonTask-%s: %s , result: %s", commonCount.getItem(), commonCount.getSql(), responseText));
                     if (!StringUtils.isEmpty(responseText)) {
                         if (commonCount.getSql().contains("113.105.74.140:8092")) {
                             commonCount.setCount(JSON.parseObject(responseText).getDouble("totalCount"));
@@ -45,14 +49,18 @@ public class CommonTask {
                         } else {
                             commonCount.setCount(Double.parseDouble(responseText));
                         }
+                        commonCount.setUpdateTime(new Date());
                     }
                 } catch (Exception e) {
+                    logger.error(String.format("请求:%s,执行错误:%s", commonCount.getSql(), e.getMessage()));
                 }
             } else {
                 // 默认,通过执行SQL语句获取数据结果
-                commonCount.setCount(jdbcTemplate.queryForObject(commonCount.getSql(), Double.class));
+                Double count = jdbcTemplate.queryForObject(commonCount.getSql(), Double.class);
+                logger.info(String.format("commonTask-%s: %s , result: %s", commonCount.getItem(), commonCount.getSql(), count));
+                commonCount.setCount(count);
+                commonCount.setUpdateTime(new Date());
             }
-            commonCount.setUpdateTime(new Date());
         }
         commonCountDao.save(commonCounts);
     }

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

@@ -1,5 +1,6 @@
 package com.uas.platform.b2c.prod.product.common.api;
 
+import com.uas.platform.b2c.prod.product.common.CommonTask;
 import com.uas.platform.b2c.prod.product.common.model.CommonCount;
 import com.uas.platform.b2c.prod.product.common.service.CommonCountService;
 import com.uas.platform.b2c.prod.store.model.StoreStatus;
@@ -34,6 +35,9 @@ public class CommonCountController {
     @Autowired
     private StoreInService storeInService;
 
+    @Autowired
+    private CommonTask commonTask;
+
     /**
      * 获取已激活的通用计数器
      * @return
@@ -64,10 +68,10 @@ public class CommonCountController {
      * @date 2017年11月7日17:03:34
      * @return
      */
-    @RequestMapping(value ="/{id}/count", method = RequestMethod.GET)
+    @RequestMapping(value = "/{id}/count", method = RequestMethod.GET)
     public String findCountById(@PathVariable("id") Long id) {
         CommonCount commonCount = commonCountService.findById(id);
-        if(commonCount == null && commonCount.getCount() != null)
+        if (commonCount == null && commonCount.getCount() != null)
             throw new IllegalArgumentException("参数ID错误,数据不存在");
 
         String result = "";
@@ -123,4 +127,11 @@ public class CommonCountController {
         return commonCountService.findAllForCust();
     }
 
+    /**
+     * 执行更新任务
+     */
+    @RequestMapping(value = "/updateTask", method = RequestMethod.GET)
+    public void updateCount() {
+        commonTask.updateCount();
+    }
 }

+ 2 - 0
src/main/java/com/uas/platform/b2c/prod/product/kind/api/KindController.java

@@ -228,6 +228,7 @@ public class KindController {
 	 *         {{相关的第一级类目},{相关的第二级类目},{相关的第三级类目},{相关的第四级类目}}
 	 */
 	@RequestMapping(value = "/{brandId}/pcbkindinfos", method = RequestMethod.GET)
+	@Deprecated
 	public List<List<KindInfo>> getKindInfosByBrandId(@PathVariable("brandId") Long brandId) {
 		return kindService.findByPCBBrandId(brandId);
 	}
@@ -239,6 +240,7 @@ public class KindController {
 	 * @return 物料属性信息
 	 */
 	@RequestMapping(value = "/pcbproperty/{productId}",method = RequestMethod.GET)
+	@Deprecated
 	public List<PCBPropertyValue> getPCBProperty(@PathVariable("productId") Long productId) {
 		return kindService.findByPCBProductId(productId);
 	}

+ 18 - 1
src/main/java/com/uas/platform/b2c/prod/store/api/OrderController.java

@@ -1,5 +1,7 @@
 package com.uas.platform.b2c.prod.store.api;
 
+import com.uas.platform.b2c.trade.order.model.Order;
+import com.uas.platform.b2c.trade.order.service.OrderService;
 import com.uas.platform.b2c.trade.order.service.PurchaseService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.ui.ModelMap;
@@ -24,9 +26,12 @@ public class OrderController {
 
 	private final PurchaseService purchaseService;
 
+	private final OrderService orderService;
+
 	@Autowired
-	public OrderController(PurchaseService purchaseService) {
+	public OrderController(PurchaseService purchaseService, OrderService orderService) {
 		this.purchaseService = purchaseService;
+		this.orderService = orderService;
 	}
 
 	/**
@@ -43,4 +48,16 @@ public class OrderController {
 		map.put("orderCount", count);
 		return map;
 	}
+
+	/**
+	 * 修正原先历史状态记录中没有时间数据的问题。
+	 * @return
+	 */
+	@RequestMapping(value = "/completeTime/test", method = RequestMethod.GET)
+	public ModelMap insertCompleteTimeToOrderAndPurchase() {
+		List<Order> orders = orderService.insertCompleteTimeToOrderAndPurchase();
+		ModelMap map = new ModelMap();
+		map.put("order", orders);
+		return map;
+	}
 }

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/store/facade/impl/StoreApplyFacadeImpl.java

@@ -115,7 +115,7 @@ public class StoreApplyFacadeImpl implements StoreApplyFacade {
 			storeApplyService.handlerApply(storeApply);
 		} else {
 			storeApply.setBannerUrl("http://dfs.ubtob.com/group1/M00/19/BF/CgpkyFlSBRmAcascAANK5vkByag940.jpg");
-			storeApply.setLogoUrl("https://dfs.ubtob.com/group1/M00/88/4D/CgpkyFrMEHeAbmFgAAAVUSwA8go871.png");
+			storeApply.setLogoUrl("https://mall.usoftchina.com/static/img/store/common/default.png");
 			StoreApply savedApply = storeApplyService.handlerApply(storeApply);
 			StoreIn storeIn = storeService.createByStoreApplyAndSave(savedApply);
 			return ResultMap.success(storeIn.getUuid());

+ 8 - 1
src/main/java/com/uas/platform/b2c/prod/store/model/StoreApply.java

@@ -6,7 +6,14 @@ import com.uas.platform.b2c.core.utils.JacksonUtils;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Transient;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;

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

@@ -7,7 +7,13 @@ import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.UuidUtils;
 import com.uas.platform.b2c.prod.store.dao.StoreApplyDao;
 import com.uas.platform.b2c.prod.store.dao.StoreBrandInfoDao;
-import com.uas.platform.b2c.prod.store.model.*;
+import com.uas.platform.b2c.prod.store.model.EnterpriseSimple;
+import com.uas.platform.b2c.prod.store.model.Qualification;
+import com.uas.platform.b2c.prod.store.model.QualificationType;
+import com.uas.platform.b2c.prod.store.model.StoreApply;
+import com.uas.platform.b2c.prod.store.model.StoreBrandInfo;
+import com.uas.platform.b2c.prod.store.model.StoreIn;
+import com.uas.platform.b2c.prod.store.model.StoreType;
 import com.uas.platform.b2c.prod.store.service.StoreApplyService;
 import com.uas.platform.b2c.prod.store.service.StoreInService;
 import com.uas.platform.b2c.trade.support.CodeType;

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

@@ -26,7 +26,13 @@ import com.uas.platform.b2c.prod.store.dao.StoreApplyDao;
 import com.uas.platform.b2c.prod.store.dao.StoreBrandInfoDao;
 import com.uas.platform.b2c.prod.store.dao.StoreInDao;
 import com.uas.platform.b2c.prod.store.exception.EmptyParameterException;
-import com.uas.platform.b2c.prod.store.model.*;
+import com.uas.platform.b2c.prod.store.model.EnterpriseSimple;
+import com.uas.platform.b2c.prod.store.model.Qualification;
+import com.uas.platform.b2c.prod.store.model.StoreApply;
+import com.uas.platform.b2c.prod.store.model.StoreBrandInfo;
+import com.uas.platform.b2c.prod.store.model.StoreIn;
+import com.uas.platform.b2c.prod.store.model.StoreStatus;
+import com.uas.platform.b2c.prod.store.model.StoreType;
 import com.uas.platform.b2c.prod.store.service.StoreInService;
 import com.uas.platform.b2c.trade.order.dao.PurchaseDao;
 import com.uas.platform.b2c.trade.support.ResultMap;
@@ -58,7 +64,17 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 import javax.servlet.http.HttpServletRequest;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
 
 /**
  * 店铺业务实现类

+ 40 - 0
src/main/java/com/uas/platform/b2c/trade/b2b/controller/B2bSaleOrderController.java

@@ -0,0 +1,40 @@
+package com.uas.platform.b2c.trade.b2b.controller;
+
+import com.uas.platform.b2c.core.config.SysConf;
+import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * b2b销售订单
+ *
+ * @author hejq
+ * @date 2018-08-29 15:54
+ */
+@RestController("B2bSaleOrderController")
+@RequestMapping("/b2b/sale")
+public class B2bSaleOrderController {
+
+    @Autowired
+    private SysConf conf;
+
+    /**
+     * 操作日志
+     */
+    private static final UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+    /**
+     * 获取B2b访问路径
+     *
+     * @return b2b访问地址
+     */
+    @RequestMapping(value = "/accessUrl", method = RequestMethod.GET)
+    private ModelMap getB2bAccessUrl() {
+        logger.log("B2B商务", "获取B2B访问路径");
+        return new ModelMap("url", conf.getB2bUrl());
+    }
+}

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

@@ -30,14 +30,24 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.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.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import static com.uas.platform.b2c.core.utils.StringUtilB2C.decodeValue;
 

+ 121 - 0
src/main/java/com/uas/platform/b2c/trade/order/controller/PurchaseProductController.java

@@ -0,0 +1,121 @@
+package com.uas.platform.b2c.trade.order.controller;
+
+import com.uas.platform.b2c.common.base.model.FileUpload;
+import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
+import com.uas.platform.b2c.core.support.view.JxlsExcelView;
+import com.uas.platform.b2c.trade.order.service.PurchaseProductService;
+import com.uas.platform.b2c.trade.order.support.AjaxUtil;
+import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.core.exception.IllegalOperatorException;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import java.io.*;
+
+/**
+ * 买家中心物料相关
+ *
+ * @author hejq
+ * @date 2018-09-18 9:30
+ * @version 1.0
+ */
+@RequestMapping("/trade/purchaseProduct")
+@RestController("trade.PurchaseProductController")
+public class PurchaseProductController {
+
+    /**
+     * 系统操作日志
+     */
+    private static final UsageBufferedLogger LOGGER = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+    @Autowired
+    private PurchaseProductService purchaseProductService;
+
+    /**
+     * 下载Excel批量上传个人物料模板
+     *
+     * @return model and view
+     */
+    @RequestMapping(value = "/release/template", method = RequestMethod.GET)
+    public ModelAndView releasePersonalProductTemplate() {
+        LOGGER.log("买家物料", "下载Excel批量上传个人物料模板");
+        ModelAndView modelAndView = new ModelAndView();
+        modelAndView.setView(new JxlsExcelView("classpath:jxls-tpl/trade/releaseByBatch-person", "导入个人产品库-优软商城"));
+        return modelAndView;
+    }
+
+    /**
+     * 通过excel批量导入个人物料
+     *
+     * @param uploadItem the upload item 上传的文件
+     * @param ignoreImport 是覆盖导入,还是忽略导入 1是忽略导入,0是覆盖导入
+     * @return ResultMap
+     * @see ResultMap
+     */
+    @RequestMapping(value = "/personal/release/excel", method = RequestMethod.POST)
+    public ResultMap releasePersonalProductByExcel(FileUpload uploadItem, Integer ignoreImport) {
+        CommonsMultipartFile file = uploadItem.getFile();
+        if (null == file) {
+            return ResultMap.error(new IllegalOperatorException("请上传excel文件"));
+        }
+        String fileName = file.getOriginalFilename();
+        // 获取EXCEL后缀格式
+        String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
+        InputStream inputStream;
+        Workbook workbook;
+        try {
+            inputStream = file.getInputStream();
+            // 根据表格格式分开处理
+            if (JxlsExcelView.EXCEL_XLS.equals(suffix)) {
+                workbook = new HSSFWorkbook(inputStream);
+            } else if (JxlsExcelView.EXCEL_XLSX.equals(suffix)) {
+                workbook = new XSSFWorkbook(inputStream);
+            } else {
+                return ResultMap.error(new IllegalOperatorException("文件格式不正确!请上传.xls或.xlsx格式的文件"));
+            }
+            ResultMap resultMap = purchaseProductService.releasePersonalProductByExcel(workbook, ignoreImport);
+            LOGGER.log("买家物料", "通过Excel批量上传个人物料-优软商城");
+            return resultMap;
+        } catch (IOException e) {
+            return ResultMap.error(e);
+        }
+    }
+
+    /**
+     * 导出失败的个人物料
+     *
+     * @param batch   the batch 批次号
+     * @param request the request 请求对象
+     * @param isAjax  the is ajax 是否是ajax 请求
+     * @return model and view
+     */
+    @RequestMapping(value = "/release/failure/xls", method = RequestMethod.GET)
+    public ModelAndView exportReleaseByBatchError(String batch, HttpServletRequest request, @RequestParam(defaultValue = "false") Boolean isAjax) {
+        HttpSession session = request.getSession();
+        ModelAndView modelAndView = AjaxUtil.checkIsAjax(session, isAjax);
+        if (!modelAndView.isEmpty()) {
+            return modelAndView;
+        }
+        Object loading = session.getAttribute("load-error-ing");
+        if (loading == null || !Boolean.valueOf(loading.toString())) {
+            session.setAttribute("load-error-ing", true);
+        }
+        modelAndView.addObject("data", purchaseProductService.findFailureReleaseProductByBatch(batch));
+        String url = "classpath:jxls-tpl/trade/releaseByBatchError-person";
+        modelAndView.setView(new JxlsExcelView(url, "导出失败的个人物料-优软商城"));
+        LOGGER.log("买家物料", "以Excel形式导出失败的个人物料");
+        session.setAttribute("load-error-ing", false);
+        return modelAndView;
+    }
+}

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

@@ -342,4 +342,13 @@ public interface OrderDao extends JpaSpecificationExecutor<Order>, JpaRepository
 	 */
 	@Query(value = "select o from trade.Order o where o.buyerenuu = :enuu and o.status in (:status)")
 	List<Order> getOrderByEnuuAndstatus(@Param("enuu") Long enuu, @Param("status") List<Integer> status);
+
+	/**
+	 * 获取待自动完成的订单
+	 * @param status 状态
+	 * @param time 时间
+	 * @return List<Order>
+	 */
+	@Query(value = "select o from trade.Order o where o.status = :status and o.autoCompleteTime < :time")
+	List<Order> getToBeAutoCompleteOrder(@Param("status") Integer status, @Param("time") Date time);
 }

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

@@ -203,4 +203,14 @@ public interface PurchaseDao extends JpaSpecificationExecutor<Purchase>, JpaRepo
 	 */
 	@Query(value = "SELECT p.orderid FROM trade.Purchase p where p.purchaseid=:purchaseid")
 	String findOrderIdByPuid(@Param("purchaseid") String purchaseid);
+
+
+	/**
+	 * 根据采购单号和状态获取销售订单
+	 * @param orid
+	 * @param status
+	 * @return
+	 */
+	@Query(value = "select p from trade.Purchase p where p.orderid = :orid and p.status = :status")
+	List<Purchase> getPurchaseByOrIdAndStatus(@Param("orid") String orid, @Param("status") Integer status);
 }

+ 30 - 3
src/main/java/com/uas/platform/b2c/trade/order/model/Order.java

@@ -14,9 +14,26 @@ import com.uas.platform.core.model.EncodingRulesConstant;
 import com.uas.platform.core.persistence.StatusColumn;
 import org.springframework.util.StringUtils;
 
-import javax.persistence.*;
-import java.io.Serializable;
-import java.util.*;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import java.io.*;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
 
 /**
  * 订单
@@ -1301,6 +1318,16 @@ public class Order extends Document implements Serializable {
 		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
 	}
 
+	/**
+	 * Sets status.
+	 *
+	 * @param status the status
+	 * @param uu     the uu
+	 */
+	public void addStatusHistory(Integer status, Long uu) {
+		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
+	}
+
 	/**
 	 * Sets status to be confirmed.
 	 *

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

@@ -24,7 +24,7 @@ import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 import javax.persistence.Transient;
-import java.io.Serializable;
+import java.io.*;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;

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

@@ -22,7 +22,7 @@ import javax.persistence.OneToOne;
 import javax.persistence.OrderBy;
 import javax.persistence.Table;
 import javax.persistence.Transient;
-import java.io.Serializable;
+import java.io.*;
 import java.util.Date;
 import java.util.Set;
 

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

@@ -1,6 +1,6 @@
 package com.uas.platform.b2c.trade.order.model;
 
-import java.io.Serializable;
+import java.io.*;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 

+ 45 - 2
src/main/java/com/uas/platform/b2c/trade/order/model/Purchase.java

@@ -10,8 +10,19 @@ import org.hibernate.annotations.Cache;
 import org.hibernate.annotations.CacheConcurrencyStrategy;
 import org.springframework.util.StringUtils;
 
-import javax.persistence.*;
-import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import java.io.*;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.Set;
@@ -1676,6 +1687,16 @@ public class Purchase extends Document implements Serializable {
 		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
 	}
 
+	/**
+	 * Sets status.
+	 *
+	 * @param status the status
+	 * @param uu     the uu
+	 */
+	public void addStatusHistory(Integer status, Long uu) {
+		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
+	}
+
 	/**
 	 * Sets change qty.
 	 *
@@ -2134,6 +2155,28 @@ public class Purchase extends Document implements Serializable {
 		this.installment = installment;
 	}
 
+	public void setStatusNotsettled(Long uu) {
+		this.status = Status.NOTSETTLED.value();
+		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
+		Set<PurchaseDetail> purchaseDetails = this.getPurchaseDetails();
+		for (PurchaseDetail purchaseDetail : purchaseDetails) {
+			if (purchaseDetail.getStatus().intValue() == Status.TOBEPAID.value()) {
+				purchaseDetail.setStatus(Status.NOTSETTLED.value(), uu);
+			}
+		}
+	}
+
+	public void setStatusCompleted(Long uu) {
+		this.status = Status.COMPLETED.value();
+		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
+		Set<PurchaseDetail> purchaseDetails = this.getPurchaseDetails();
+		for (PurchaseDetail purchaseDetail : purchaseDetails) {
+			if (purchaseDetail.getStatus().intValue() == Status.TOBEPAID.value()) {
+				purchaseDetail.setStatus(Status.COMPLETED.value(), uu);
+			}
+		}
+	}
+
 	/**
 	 * 采购单的退货状态
 	 */

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

@@ -816,6 +816,10 @@ public class PurchaseDetail extends Document {
 		this.statushistory = addStatusHistory(this.statushistory, userUU, status);
 	}
 
+	public void addStatusHistory (Integer status, Long userUU) {
+		this.statushistory = addStatusHistory(this.statushistory, userUU, status);
+	}
+
 	/**
 	 * Gets currency name.
 	 *

+ 30 - 2
src/main/java/com/uas/platform/b2c/trade/order/service/OrderService.java

@@ -17,8 +17,6 @@ import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import org.springframework.data.domain.Page;
 import org.springframework.ui.ModelMap;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
 
 import java.util.Date;
 import java.util.List;
@@ -676,6 +674,17 @@ public interface OrderService {
 	 * @return  ResultMap
 	 */
 	ResultMap findInvoiceByIdAndInvoiceId(Long id, String invoiceid);
+
+
+	/**
+	 * 统计个人交易额
+	 *
+	 * @param useruu    个人useruu
+	 * @param enuu      企业的enuu
+	 * @param starttime 开始时间
+	 * @param endtime   结束时间
+	 * @return
+	 */
 	ResultMap statisticsPersonTradingVolume(Long useruu, Long enuu, Long starttime, Long endtime);
 
 
@@ -698,5 +707,24 @@ public interface OrderService {
 	 */
 	Order getOrderByOrderIdOrId(Long id, String orderid);
 
+
+	/**
+	 * 用户确认付款,通知管理后台确认收款
+	 *
+	 * @param order 确认付款的订单
+	 * @return
+	 */
 	void sendConfirmPaidMessage(Order order);
+
+	/**
+	 * 获取待自动确认收货的订单
+	 * @return
+	 */
+	List<Order> getToBeAutoCompleteOrder();
+
+	/**
+	 * 修正原先历史状态记录中没有时间数据的问题。
+	 * @return
+	 */
+	List<Order> insertCompleteTimeToOrderAndPurchase();
 }

+ 34 - 0
src/main/java/com/uas/platform/b2c/trade/order/service/PurchaseProductService.java

@@ -0,0 +1,34 @@
+package com.uas.platform.b2c.trade.order.service;
+
+import com.uas.platform.b2c.prod.commodity.model.ReleaseProductByBatch;
+import com.uas.platform.b2c.trade.support.ResultMap;
+import org.apache.poi.ss.usermodel.Workbook;
+
+import java.util.List;
+
+/**
+ * 买家中心物料相关
+ *
+ * @author hejq
+ * @date 2018-09-18 10:09
+ */
+public interface PurchaseProductService {
+
+    /**
+     * 通过excel批量导入个人物料
+     *
+     * @param workbook Workbook 对象
+     * @param ignoreImport 是覆盖导入,还是忽略导入 1是忽略导入,0是覆盖导入
+     * @return ResultMap
+     * @see ResultMap
+     */
+    ResultMap releasePersonalProductByExcel(Workbook workbook, Integer ignoreImport);
+
+    /**
+     * 通过批号查询导入失败的数据
+     *
+     * @param batch 批号
+     * @return List<ReleaseProductByBatch>
+     */
+    List<ReleaseProductByBatch> findFailureReleaseProductByBatch(String batch);
+}

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

@@ -432,4 +432,13 @@ public interface PurchaseService {
 	 * @return
 	 */
 	Purchase getPurchaseByPurchaseidOrId(Long id, String purchaseid);
+
+
+	/**
+	 * 根据采购单号和状态获取销售订单
+	 * @param orid
+	 * @param stauts
+	 * @return
+	 */
+	List<Purchase> getPurchaseByOrIdAndStatus(String orid, Integer status);
 }

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

@@ -18,7 +18,10 @@ import com.uas.platform.b2c.trade.order.StringConstant.Currency;
 import com.uas.platform.b2c.trade.order.dao.OrderDao;
 import com.uas.platform.b2c.trade.order.dao.OrderDetailDao;
 import com.uas.platform.b2c.trade.order.dao.PurchaseDetailDao;
-import com.uas.platform.b2c.trade.order.model.*;
+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.trade.order.service.OrderDetailService;
 import com.uas.platform.b2c.trade.order.service.OrderService;
 import com.uas.platform.b2c.trade.order.type.ResultMapType;
@@ -40,7 +43,11 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 /**
  * 订单明细业务实现类

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

@@ -40,10 +40,12 @@ import com.uas.platform.b2c.fa.settlement.service.BillSubmitService;
 import com.uas.platform.b2c.fa.settlement.service.ExchangeRateService;
 import com.uas.platform.b2c.logistics.dao.AddressDao;
 import com.uas.platform.b2c.logistics.dao.PickUpAddressDao;
-import com.uas.platform.b2c.logistics.model.*;
+import com.uas.platform.b2c.logistics.model.Address;
+import com.uas.platform.b2c.logistics.model.Invoice;
+import com.uas.platform.b2c.logistics.model.PickUpAddress;
+import com.uas.platform.b2c.logistics.service.InvoiceService;
 import com.uas.platform.b2c.prod.commodity.constant.DoubleConstant;
 import com.uas.platform.b2c.prod.commodity.constant.StringConstant;
-import com.uas.platform.b2c.logistics.service.InvoiceService;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsHistoryDao;
 import com.uas.platform.b2c.prod.commodity.model.Goods;
@@ -67,7 +69,15 @@ import com.uas.platform.b2c.trade.order.dao.OrderDao;
 import com.uas.platform.b2c.trade.order.dao.OrderDetailDao;
 import com.uas.platform.b2c.trade.order.dao.OrderIndexDetailDao;
 import com.uas.platform.b2c.trade.order.dao.PurchaseDao;
-import com.uas.platform.b2c.trade.order.model.*;
+import com.uas.platform.b2c.trade.order.model.MessageNotifyPersonalManagement;
+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.OrderIndex;
+import com.uas.platform.b2c.trade.order.model.OrderIndexDetail;
+import com.uas.platform.b2c.trade.order.model.OrderSimpleInfo;
+import com.uas.platform.b2c.trade.order.model.Purchase;
+import com.uas.platform.b2c.trade.order.model.PurchaseDetail;
+import com.uas.platform.b2c.trade.order.model.TradeProofing;
 import com.uas.platform.b2c.trade.order.service.MessageNotifyPersonalManagementService;
 import com.uas.platform.b2c.trade.order.service.OrderDetailService;
 import com.uas.platform.b2c.trade.order.service.OrderService;
@@ -116,7 +126,18 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Collections;
+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.Objects;
+import java.util.Set;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -3619,4 +3640,56 @@ public class OrderServiceImpl implements OrderService {
             }
         }
     }
+
+
+    /**
+     * 获取待自动确认收货的订单
+     *
+     * @return
+     */
+    @Override
+    public List<Order> getToBeAutoCompleteOrder() {
+        List<Order> orders = orderDao.getToBeAutoCompleteOrder(com.uas.platform.b2c.core.constant.Status.RECEIVED.value(), new Date());
+        return orders;
+    }
+
+
+    /**
+     * 修正原先历史状态记录中没有时间数据的问题。
+     *
+     * @return
+     */
+    @Override
+    public List<Order> insertCompleteTimeToOrderAndPurchase() {
+        List<Order> orderList = findByStatus(com.uas.platform.b2c.core.constant.Status.COMPLETED.value());
+        if (CollectionUtils.isEmpty(orderList)) {
+            return orderList;
+        }
+        for (Order order : orderList) {
+            List<Purchase> purchaseList = purchaseDao.findByOrderid(order.getOrderid());
+            if (order.getInstallmentId() != null) {
+                for (Purchase purchase : purchaseList) {
+                    for (PurchaseDetail purchaseDetail : purchase.getPurchaseDetails()) {
+                        if (purchaseDetail.getStatus().intValue() == Status.NOTSETTLED.value() || purchaseDetail.getStatus().intValue() == Status.COMPLETED.value() || purchaseDetail.getStatus().intValue() == Status.TORECEIVEMONEY.value()) {
+                            purchaseDetail.addStatusHistory(Status.COMPLETED.value(), sysConf.getAdminUU());
+                        }
+                    }
+                    purchase.addStatusHistory(Status.COMPLETED.value(), sysConf.getAdminUU());
+                }
+            } else {
+                for (Purchase purchase : purchaseList) {
+                    for (PurchaseDetail purchaseDetail : purchase.getPurchaseDetails()) {
+                        if (purchaseDetail.getStatus().intValue() == Status.NOTSETTLED.value() || purchaseDetail.getStatus().intValue() == Status.COMPLETED.value() || purchaseDetail.getStatus().intValue() == Status.TORECEIVEMONEY.value()) {
+                            purchaseDetail.addStatusHistory(Status.NOTSETTLED.value(), sysConf.getAdminUU());
+                        }
+                    }
+                    purchase.addStatusHistory(Status.NOTSETTLED.value(), sysConf.getAdminUU());
+                }
+            }
+             purchaseDao.save(purchaseList);
+            order.addStatusHistory(Status.COMPLETED.value(), sysConf.getAdminUU());
+        }
+        orderDao.save(orderList);
+        return orderList;
+    }
 }

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

@@ -0,0 +1,391 @@
+package com.uas.platform.b2c.trade.order.service.impl;
+
+import com.uas.platform.b2c.core.constant.ReleaseStatus;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.core.utils.StringUtilB2C;
+import com.uas.platform.b2c.prod.commodity.constant.ErrorInfoConstant;
+import com.uas.platform.b2c.prod.commodity.constant.UploadConstant;
+import com.uas.platform.b2c.prod.commodity.dao.ProductPrivateDao;
+import com.uas.platform.b2c.prod.commodity.dao.ReleaseProductByBatchDao;
+import com.uas.platform.b2c.prod.commodity.model.ProductPrivate;
+import com.uas.platform.b2c.prod.commodity.model.ReleaseProductByBatch;
+import com.uas.platform.b2c.prod.commodity.service.ProductService;
+import com.uas.platform.b2c.prod.commodity.service.ReleaseProductByBatchService;
+import com.uas.platform.b2c.prod.commodity.util.SheetUtil;
+import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
+import com.uas.platform.b2c.trade.order.service.PurchaseProductService;
+import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.core.exception.IllegalOperatorException;
+import com.uas.platform.core.util.HttpUtil;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 买家中心物料相关
+ *
+ * @author hejq
+ * @date 2018-09-18 10:09
+ */
+@Service
+public class PurchaseProductServiceImpl implements PurchaseProductService {
+
+    @Autowired
+    private ReleaseProductByBatchService releaseProductByBatchService;
+
+    @Autowired
+    private CreateNumberService createNumberService;
+
+    @Autowired
+    private ReleaseProductByBatchDao releaseProductByBatchDao;
+
+    @Autowired
+    private ProductService productService;
+
+    @Autowired
+    private ProductPrivateDao productPrivateDao;
+
+    /**
+     * 物料服务访问路径
+     */
+    @Value("#{sys.productServiceIp}")
+    private String productServiceIp;
+
+    /**
+     * 程序执行日志
+     */
+    private static final org.apache.log4j.Logger LOGGER = org.apache.log4j.Logger.getLogger(PurchaseProductServiceImpl.class);
+
+    /**
+     * 不需要传入的状态码
+     */
+    private final static List<Integer> failCode = Arrays.asList(ReleaseStatus.lack_info.value(),
+            ReleaseStatus.personal_had_exists.value(), ReleaseStatus.had_exists.value());
+
+    /**
+     * 通过excel批量导入个人物料
+     *
+     * @param workbook     Workbook 对象
+     * @param ignoreImport 是覆盖导入,还是忽略导入 1是忽略导入,0是覆盖导入
+     * @return ResultMap
+     * @see ResultMap
+     */
+    @Override
+    public ResultMap releasePersonalProductByExcel(Workbook workbook, Integer ignoreImport) {
+        // 先判断表格式
+        Sheet sheet = workbook.getSheetAt(0);
+        if (sheet.getRow(0) == null) {
+            return ResultMap.error(new IllegalOperatorException("表格模板不正确!请重新下载最新模板"));
+        }
+        int headNum = sheet.getRow(0).getPhysicalNumberOfCells();
+        if (headNum != UploadConstant.TOTAL_COLUMN_PERSON && headNum != UploadConstant.MAX_TOTAL_COLUMN_PERSON) {
+            return ResultMap.error(new IllegalOperatorException("表格模板不正确!请重新下载最新模板"));
+        }
+        int rowNum = SheetUtil.getSheetLastNum(sheet, UploadConstant.MAX_TOTAL_COLUMN);
+        // 表头占用行数
+        int minExcelNumber = 2;
+        if (rowNum < minExcelNumber) {
+            return ResultMap.error(new IllegalOperatorException("请填写上传信息"));
+        }
+        // 除去表头格式,最多上传2000条数据
+        int maxExcelNumber = 2002;
+        // 先判断表格内容
+        if (rowNum > maxExcelNumber) {
+            return ResultMap.error(new IllegalOperatorException("您上传的信息超过2000条,请拆分成2000以下再上传"));
+        }
+        List<ReleaseProductByBatch> releaseProductByBatchArrayList = new ArrayList<>(rowNum);
+        Row headerRow = sheet.getRow(0);
+        if (null != headerRow) {
+            int colNum = sheet.getRow(0).getPhysicalNumberOfCells();
+            // 验证模板是否为商城模板
+            validateTemplate(headerRow, colNum);
+            // 为空的个数
+            int blankNum;
+            // 本次上传总数
+            int total = 0;
+            // 批号
+            String batch = createNumberService.getTimeNumber("product$goods", 8, rowNum);
+            for (int r = minExcelNumber; r <= rowNum; r++) {
+                Row row = sheet.getRow(r);
+                // 英文品牌名称
+                if (row != null) {
+                    // 防止用户直接用模板进行上传
+                    if (!releaseProductByBatchService.validateExcelData(row, r)) {
+                        continue;
+                    }
+                    ReleaseProductByBatch releaseProductByBatch = new ReleaseProductByBatch();
+                    // 初始化默认信息
+                    setProductDefaultInfo(releaseProductByBatch, batch);
+                    // 将excel内容对应到ReleaseProductByBatch的字段当中
+                    blankNum = convertValueToProduct(row, releaseProductByBatch, r);
+                    if (blankNum != 4) {
+                        // 验证表格中数据是否重复,重复的取第一条数据
+                        validateRepeatInExcel(releaseProductByBatchArrayList, releaseProductByBatch);
+                        releaseProductByBatchArrayList.add(releaseProductByBatch);
+                        total++;
+                    }
+                }
+            }
+            // 保存验证不通过临时表信息
+            releaseProductByBatchDao.save(releaseProductByBatchArrayList);
+            Long enUU = SystemSession.getUser().getEnterprise().getUu();
+            // 验证数据信息是否重复
+            releaseProductByBatchDao.callReleaseExistValidProcedure(batch, enUU);
+            // 验证数是否存在个人物料库
+            Long userUU = SystemSession.getUser().getUserUU();
+            releaseProductByBatchDao.callReleasePersonExistValidProcedure(batch, enUU, userUU);
+            ModelMap modelMap = new ModelMap();
+            // 处理上传数据
+            assignmentProductInfo(enUU, modelMap, batch);
+            // 验证成功后进行绑定处理
+            Integer assignNumber = 0;
+            // 去重后的数据
+            List<ReleaseProductByBatch> uniqueBatchList = releaseProductByBatchDao.findByRelbatchidAndReleaseCodeNot(userUU, batch, failCode);
+            if (!CollectionUtils.isEmpty(uniqueBatchList)) {
+                assignNumber = assignBatch(uniqueBatchList);
+            }
+            modelMap.put("assignSuccess", assignNumber);
+            modelMap.put("assignFailure", total - assignNumber);
+            modelMap.put("total", total);
+            modelMap.put("batch", batch);
+            return ResultMap.success(modelMap);
+        }
+        return ResultMap.success();
+    }
+
+    /**
+     * 通过批号查询导入失败的数据
+     *
+     * @param batch 批号
+     * @return List<ReleaseProductByBatch>
+     */
+    @Override
+    public List<ReleaseProductByBatch> findFailureReleaseProductByBatch(String batch) {
+        return releaseProductByBatchDao.findByPublisherUuAndRelbatchidAndFailCode(SystemSession.getUser().getUserUU(), batch, failCode);
+    }
+
+    /**
+     * 初始化赋值
+     *
+     * @param aProduct 批量上传商品建立临时表存储相关信息
+     * @param batch 批号
+     */
+    private void setProductDefaultInfo(ReleaseProductByBatch aProduct, String batch) {
+        // 设置初始状态
+        aProduct.setReleaseCode(ReleaseStatus.success.value());
+        aProduct.setReleaseStatus(ReleaseStatus.success.getPhrase());
+        aProduct.setRelbatchid(batch);
+        aProduct.setUnit("PCS");
+        // 设置发布人信息
+        aProduct.setPublisherName(SystemSession.getUser().getUserName());
+        aProduct.setPublisherTel(SystemSession.getUser().getUserTel());
+        aProduct.setPublisherUu(SystemSession.getUser().getUserUU());
+    }
+
+    /**
+     * 初始化product信息,将excel内容转换为product字段值
+     *
+     * @param row 行对象
+     * @param aProduct 验证单行数据
+     * @param rowNum 行数
+     */
+    private int convertValueToProduct(Row row, ReleaseProductByBatch aProduct, int rowNum) {
+        // 统计为空的个数
+        int result = 0;
+        aProduct.setNum(rowNum - 2);
+        // 品牌
+        Object brandValue = releaseProductByBatchService.readWorkBookCell(row.getCell(UploadConstant.BRAND_ENGLISH), Cell.CELL_TYPE_STRING,
+                rowNum, UploadConstant.BRAND_ENGLISH);
+        if (StringUtils.isEmpty(brandValue)) {
+            result += 1;
+        }
+        aProduct.setBrandEnByExcel(brandValue);
+
+        // 类目
+        Object kindValue = releaseProductByBatchService.readWorkBookCell(row.getCell(UploadConstant.KIND), Cell.CELL_TYPE_STRING,
+                rowNum, UploadConstant.KIND);
+        if (StringUtils.isEmpty(kindValue)) {
+            result += 1;
+        }
+        aProduct.setKindByExcel(kindValue);
+
+        // 型号
+        Object codeValue = releaseProductByBatchService.readWorkBookCell(row.getCell(UploadConstant.PRODUCT_CODE), Cell.CELL_TYPE_STRING,
+                rowNum, UploadConstant.PRODUCT_CODE);
+        if (StringUtils.isEmpty(codeValue)) {
+            result += 1;
+        }
+        aProduct.setCodeByExcel(codeValue);
+
+        // 规格
+        Object specValue = releaseProductByBatchService.readWorkBookCell(row.getCell(UploadConstant.SPEC), Cell.CELL_TYPE_STRING,
+                rowNum, UploadConstant.SPEC);
+        aProduct.setSpecByExcel(specValue);
+        return result;
+    }
+
+    /**
+     * 个人物料上传模板校验
+     *
+     * @param headerRow 表头
+     * @param colNum 列数
+     */
+    private void validateTemplate(Row headerRow, int colNum) {
+        if (colNum == UploadConstant.MAX_TOTAL_COLUMN) {
+            Cell errorCell = headerRow.getCell(UploadConstant.MAX_TOTAL_COLUMN - 1);
+            Object errorCellObj = releaseProductByBatchService.readWorkBookCell(errorCell, Cell.CELL_TYPE_STRING, 0, 0);
+            String errorHead = StringUtilB2C.replaceLineBreak(String.valueOf(errorCellObj));
+            String errorMsg = "错误提示";
+            if (StringUtils.isEmpty(errorHead) || !(errorMsg.equals(errorHead))) {
+                throw new IllegalOperatorException("表格模板不正确!请重新下载最新模板");
+            }
+        }
+        // 品牌
+        Object brandCellObj = releaseProductByBatchService.readWorkBookCell(headerRow.getCell(UploadConstant.BRAND_ENGLISH), Cell.CELL_TYPE_STRING,
+                0, UploadConstant.BRAND_ENGLISH);
+        if (!UploadConstant.PRODUCT_BRAND_NAME.equals(StringUtilB2C.getStr(brandCellObj))) {
+            throw new IllegalOperatorException("您上传的信息列信息不正确,请与模板的列做比较");
+        }
+        // 物料名称
+        Object titleCellObj = releaseProductByBatchService.readWorkBookCell(headerRow.getCell(UploadConstant.KIND), Cell.CELL_TYPE_STRING,
+                0, UploadConstant.KIND);
+        if (!UploadConstant.PRODUCT_KIND_NAME.equals(StringUtilB2C.getStr(titleCellObj))) {
+            throw new IllegalOperatorException("您上传的信息列信息不正确,请与模板的列做比较");
+        }
+        // 型号
+        Object codeCellObj = releaseProductByBatchService.readWorkBookCell(headerRow.getCell(UploadConstant.PRODUCT_CODE), Cell.CELL_TYPE_STRING,
+                0, UploadConstant.PRODUCT_CODE);
+        if (!UploadConstant.PRODUCT_CMPCODE_NAME.equals(StringUtilB2C.getStr(codeCellObj))) {
+            throw new IllegalOperatorException("您上传的信息列信息不正确,请与模板的列做比较");
+        }
+        // 规格
+        Object specCellObj = releaseProductByBatchService.readWorkBookCell(headerRow.getCell(UploadConstant.SPEC), Cell.CELL_TYPE_STRING,
+                0, UploadConstant.SPEC);
+        if (!UploadConstant.PRODUCT_SPEC_NAME.equals(StringUtilB2C.getStr(specCellObj))) {
+            throw new IllegalOperatorException("您上传的信息列信息不正确,请与模板的列做比较");
+        }
+    }
+
+    /**
+     * 将去重的数据批量绑定到个人物料库
+     *
+     * @param uniqueBatchList 去重后的物料信息
+     * @return 保存成功的数量
+     */
+    private Integer assignBatch(List<ReleaseProductByBatch> uniqueBatchList) {
+        Set<Long> idSet = getProductIdSet(uniqueBatchList);
+        if (CollectionUtils.isNotEmpty(idSet)) {
+            HashMap<String, Object> params = new HashMap<>(5);
+            ModelMap data = new ModelMap();
+            data.put("ids",  idSet.toString());
+            data.put("enUU", SystemSession.getUser().getEnterprise().getUu());
+            data.put("userUU", SystemSession.getUser().getUserUU());
+            params.put("data", data);
+            HttpUtil.Response res = null;
+            try {
+                res = HttpUtil.sendPostRequest(productServiceIp + "/productuser/coverToUserByIds", params);
+                return Integer.valueOf(res.getResponseText());
+            } catch (Exception e) {
+                String resultCode = null != res ? String.valueOf(res.getStatusCode()) : "access error";
+                LOGGER.error("coverToUserProd http response status error: " + resultCode);
+            }
+        }
+        return 0;
+    }
+
+    /**
+     * 获取物料id字段
+     *
+     * @param uniqueBatchList 去重后的物料信息
+     * @return 物料id集合
+     */
+    private Set<Long> getProductIdSet(List<ReleaseProductByBatch> uniqueBatchList) {
+        List<String> productCodeList = new ArrayList<>();
+        Set<Long> idSet = new HashSet<>();
+        List<ReleaseProductByBatch> batchList = new ArrayList<>();
+        uniqueBatchList.forEach(batch -> {
+            if (null != batch.getProductid()) {
+                idSet.add(batch.getProductid());
+            } else {
+                if (StringUtilB2C.isEmpty(batch.getProductNum())) {
+                    String code = "PNUM" + StringUtilB2C.getRandomNumber(6);
+                    batch.setProductNum(code);
+                }
+                productCodeList.add(batch.getProductNum());
+                batchList.add(batch);
+            }
+        });
+        // 新增到物料库
+        productService.saveByJdbcTemplate(batchList);
+        List<com.uas.platform.b2c.prod.commodity.model.Product> productList = productService.findProductIdAndProdnumsByProdNums(productCodeList);
+        List<ProductPrivate> privateList = new ArrayList<>();
+        productList.forEach(product -> {
+            ProductPrivate productPrivate = new ProductPrivate(product.getId());
+            productPrivate.setAttach(product.getAttachment());
+            privateList.add(productPrivate);
+            idSet.add(product.getId());
+        });
+
+        // 保存到私有库
+        if (CollectionUtils.isNotEmpty(privateList)) {
+            productPrivateDao.save(privateList);
+            LOGGER.info("批量上传个人物料库,同步新增到商城私有库: " + privateList.size());
+        }
+        return idSet;
+    }
+
+    /**
+     * 处理验证后的数据
+     *
+     * @param modelMap ModelMap
+     * @param enUU 当前企业UU
+     * @param batch 批号
+     */
+    private void assignmentProductInfo(Long enUU, ModelMap modelMap, String batch) {
+        String strCount = releaseProductByBatchService.productReleaseValid(enUU, batch);
+        if (!StringUtilB2C.isEmpty(strCount)) {
+            // 获取批量上传的相关数据统计
+            releaseProductByBatchService.checkReleaseCount(modelMap, strCount, batch);
+        }
+    }
+
+    /**
+     * 验证Excel中数据是否重复
+     *
+     * @param 	batchList 批量上传的数据
+     * @param 	aBatch 单个数据
+     * @return 判断是否重复的数据
+     */
+    private void validateRepeatInExcel(List<ReleaseProductByBatch> batchList, ReleaseProductByBatch aBatch) {
+        if (CollectionUtils.isNotEmpty(batchList) && StringUtils.isEmpty(aBatch.getErrmsg())) {
+            for (ReleaseProductByBatch each : batchList) {
+                // 返回符合标准的唯一的物料信息
+                if (aBatch.compareSameProductTagInfo(each)) {
+                    if (!aBatch.getErrmsg().contains(ErrorInfoConstant.REPEAT_IN_EXCEL.getInfo())) {
+                        aBatch.addErrmsg(ErrorInfoConstant.REPEAT_IN_EXCEL.getInfo());
+                    }
+                    aBatch.setReleaseStatus(ReleaseStatus.had_exists.getPhrase());
+                    aBatch.setReleaseCode(ReleaseStatus.had_exists.value());
+                    if (aBatch.getErrmsg().substring(0, 1).equals(",")) {
+                        aBatch.setErrmsg(aBatch.getErrmsg().substring(1));
+                    }
+                }
+            }
+        }
+    }
+
+}

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio