Browse Source

Merge branch 'dev-mysql' into feature-wechat-liusw

liusw 7 years ago
parent
commit
0c052de0d2
25 changed files with 264 additions and 127 deletions
  1. 14 0
      src/main/java/com/uas/platform/b2c/common/account/model/Enterprise.java
  2. 2 2
      src/main/java/com/uas/platform/b2c/fa/payment/service/impl/InstallmentServiceImpl.java
  3. 24 19
      src/main/java/com/uas/platform/b2c/prod/commodity/constant/ModifyConstant.java
  4. 30 33
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ReleaseProductByBatchServiceImpl.java
  5. 44 0
      src/main/java/com/uas/platform/b2c/prod/commodity/util/SheetUtil.java
  6. 15 1
      src/main/java/com/uas/platform/b2c/prod/product/common/CommonTask.java
  7. 1 2
      src/main/java/com/uas/platform/b2c/prod/product/common/api/CommonCountController.java
  8. 31 0
      src/main/java/com/uas/platform/b2c/prod/product/common/model/CommonCount.java
  9. 0 3
      src/main/java/com/uas/platform/b2c/prod/product/common/service/impl/CommonCountServiceImpl.java
  10. 20 37
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderServiceImpl.java
  11. BIN
      src/main/resources/jxls-tpl/trade/goods.xls
  12. BIN
      src/main/resources/jxls-tpl/trade/products-error.xls
  13. BIN
      src/main/resources/jxls-tpl/trade/products.xls
  14. BIN
      src/main/resources/jxls-tpl/trade/releaseByBatch-rmb.xls
  15. BIN
      src/main/resources/jxls-tpl/trade/releaseByBatchError-rmb.xls
  16. BIN
      src/main/resources/jxls-tpl/trade/releaseByBatchError-usd.xls
  17. BIN
      src/main/resources/jxls-tpl/trade/releasebyBatch-usd.xls
  18. 18 3
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_transfer_ctrl.js
  19. 12 0
      src/main/webapp/resources/js/vendor/controllers/forstore/purchase_detail.js
  20. 5 1
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_upload_ctrl.js
  21. 1 1
      src/main/webapp/resources/view/admin/trade/trade_order.html
  22. 2 2
      src/main/webapp/resources/view/usercenter/forstore/buyer_order.html
  23. 20 22
      src/main/webapp/resources/view/usercenter/forstore/buyer_transfer.html
  24. 1 1
      src/main/webapp/resources/view/vendor/forstore/purchase_detail.html
  25. 24 0
      src/test/java/com/uas/platform/b2c/common/task/CommonTask.java

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

@@ -189,6 +189,20 @@ public class Enterprise implements Serializable {
 	@Transient
 	private Integer receiptStatus;
 
+	/**
+	 * 企业简介
+	 */
+	@Column(name = "en_description", length = 1000)
+	private String description;
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
 	public String getAccessSecret() {
 		return accessSecret;
 	}

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

@@ -341,9 +341,9 @@ public class InstallmentServiceImpl implements InstallmentService{
     ResultMap validateInstallmentStore() {
         InstallmentStore installmentStore = installmentStoreDao.findByEnuuAndEnable(SystemSession.getUser().getEnterprise().getUu(), (short) 1);
         if (installmentStore == null) {
-            return new ResultMap(CodeType.NO_AUTHORITY.code(), "当前企业没有设置分期功能权限,如有需要请联系客服");
+            return ResultMap.success(null);
         }
-        return ResultMap.success(null);
+        return new ResultMap(CodeType.NO_AUTHORITY.code(), "当前企业没有设置分期功能权限,如有需要请联系客服");
     }
 
     /**

+ 24 - 19
src/main/java/com/uas/platform/b2c/prod/commodity/constant/ModifyConstant.java

@@ -23,12 +23,12 @@ public class ModifyConstant {
     /**
      * The constant TOTAL_ROW.
      */
-    public static final int TOTAL_COLUMN = 21;
+    public static final int TOTAL_COLUMN = 22;
 
     /**
      * The constant MAX_TOTAL_COLUMN.
      */
-    public static final int MAX_TOTAL_COLUMN = 22;
+    public static final int MAX_TOTAL_COLUMN = 23;
 
     /**
      * 产品编码
@@ -50,88 +50,93 @@ public class ModifyConstant {
      */
     public static final int PRODUCT_BRAND = 3;
 
+    /**
+     * The constant PRODUCT_BRAND.
+     */
+    public static final int PRODUCT_SPEC = 4;
+
     /**
      * The constant PRODUCE_DATE.
      */
-    public static final int PRODUCE_DATE = 4;
+    public static final int PRODUCE_DATE = 5;
 
     /**
      * The constant PACKAGE_METHOD.
      */
-    public static final int PACKAGE_METHOD = 5;
+    public static final int PACKAGE_METHOD = 6;
 
     /**
      * The constant MIN_DELIVERY.
      */
-    public static final int MIN_DELIVERY = 6;
+    public static final int MIN_DELIVERY = 7;
 
     /**
      * The constant MAX_DELIVERY.
      */
-    public static final int MAX_DELIVERY = 7;
+    public static final int MAX_DELIVERY = 8;
 
     /**
      * The constant BREAK_UP.
      */
-    public static final int BREAK_UP = 8;
+    public static final int BREAK_UP = 9;
 
     /**
      * The constant PACKAGE_NUMBER.
      */
-    public static final int PACKAGE_NUMBER = 9;
+    public static final int PACKAGE_NUMBER = 10;
 
     /**
      * 最小起订量
      */
-    public static final int BUY_MIN_QTY = 10;
+    public static final int BUY_MIN_QTY = 11;
 
     /**
      * 分段价格开始
      */
-    public static final int PRICE_FIRST = 11;
+    public static final int PRICE_FIRST = 12;
 
     /**
      * 第二个分段
      */
-    public static final int QTY_SECOND_START = 12;
+    public static final int QTY_SECOND_START = 13;
 
     /**
      * 第二个分段
      */
-    public static final int PRICE_SECOND = 13;
+    public static final int PRICE_SECOND = 14;
 
     /**
      * 第三个分段
      */
-    public static final int QTY_THIRD_START = 14;
+    public static final int QTY_THIRD_START = 15;
 
     /**
      * 第三个分段
      */
-    public static final int PRICE_THIRD = 15;
+    public static final int PRICE_THIRD = 16;
 
     /**
      * The constant SALE_METHOD.
      */
-    public static final int SALE_METHOD = 16;
+    public static final int SALE_METHOD = 17;
 
     /**
      * The constant RESERVE_NUMBER.
      */
-    public static final int RESERVE_NUMBER = 17;
+    public static final int RESERVE_NUMBER = 18;
 
     /**
      * The constant CUSTOM_LABEL.
      */
-    public static final int CUSTOM_LABEL = 18;
+    public static final int CUSTOM_LABEL = 19;
 
     /**
      * The constant SALE_STATUS.
      */
-    public static final int SALE_STATUS = 19;
+    public static final int SALE_STATUS = 20;
 
     /**
      * The constant MATCH_STATUS.
      */
-    public static final int MATCH_STATUS = 20;
+    public static final int MATCH_STATUS = 21;
 }

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

@@ -12,25 +12,13 @@ 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.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.UploadConstant;
-import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
-import com.uas.platform.b2c.prod.commodity.dao.ProductDao;
-import com.uas.platform.b2c.prod.commodity.dao.ProductPersonDao;
-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.Goods;
-import com.uas.platform.b2c.prod.commodity.model.GoodsQtyPrice;
-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.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.GoodsService;
 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.common.service.CreateNumberService;
 import com.uas.platform.b2c.prod.store.model.StoreIn;
 import com.uas.platform.b2c.prod.store.model.StoreStatus;
@@ -45,11 +33,7 @@ import com.uas.platform.core.persistence.criteria.SimpleExpression;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.poi.hssf.usermodel.HSSFCell;
 import org.apache.poi.hssf.usermodel.HSSFDateUtil;
-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.apache.poi.ss.usermodel.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.dao.DataAccessException;
@@ -72,16 +56,7 @@ import java.sql.SQLException;
 import java.sql.Statement;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
-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.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -170,7 +145,7 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 				throw new IllegalOperatorException("表格模板不正确!请重新下载最新模板");
 			}
 		}
-		int rowNum = sheet.getLastRowNum();
+		int rowNum = SheetUtil.getSheetLastNum(sheet, UploadConstant.MAX_TOTAL_COLUMN);
 		if (rowNum > 2000) {
 			throw new IllegalOperatorException
 					("您上传的信息超过2000条,请拆分成2000以下再上传");
@@ -181,6 +156,8 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 		Row headerRow = sheet.getRow(0);
 		int total = 0;
 		int blankNum = 0;
+		long time1 = new Date().getTime();
+		System.err.println();
 		if (headerRow != null) {
 			// 验证模板是否为商城模板
 			validateTemplate(headerRow, colNum, currency, isAPerson);
@@ -228,11 +205,15 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 				}
 			}
 		}
+		long time2 = new Date().getTime();
+		System.err.println((time2 - time1) + "**********************************1");
 		Long userUU = SystemSession.getUser().getUserUU();
 		Long enUU = SystemSession.getUser().getEnterprise().getUu();
 		List<ReleaseProductByBatch> addList = new ArrayList<>(releaseProductByBatchs.size());
 		addList.addAll(releaseProductByBatchs);
 		resetRepeatData(addList, isImport, isAPerson);
+		long time3 = new Date().getTime();
+		System.err.println((time3 - time2) + "**********************************2");
 		if (isAPerson) {
 			for (ReleaseProductByBatch releaseProductByBatch : addList) {
 				List<Product> productList = productDao.findByEnUUAndPcmpcodeAndPbrandenAndB2cEnabled(enUU,releaseProductByBatch.getB2cCode(),
@@ -248,12 +229,23 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 				}
 			}
 		}
+		long time4 = new Date().getTime();
+		System.err.println((time4 - time3) + "**********************************3");
 		commonDao.save(addList, ReleaseProductByBatch.class);
-
+		long time5 = new Date().getTime();
+		System.err.println((time5 - time4) + "**********************************4");
 		releaseProductByBatchDao.callValidProcedure(enUU, batch);
+		long time6 = new Date().getTime();
+		System.err.println((time6 - time5) + "**********************************5");
 		Integer filter = releaseProductByBatchDao.getCountOfImportFail(userUU, batch, failCode);
+		long time7 = new Date().getTime();
+		System.err.println((time7 - time6) + "**********************************6");
 		Integer failure = releaseProductByBatchDao.getCountPublisherUuAndBatchAndReleaseCode(userUU, batch, ReleaseStatus.failure.value());
+		long time8 = new Date().getTime();
+		System.err.println((time8 - time7) + "**********************************7");
 		Integer success = releaseProductByBatchDao.getCountPublisherUuAndBatchAndReleaseCode(userUU, batch, ReleaseStatus.success.value());
+		long time9 = new Date().getTime();
+		System.err.println((time9 - time8) + "**********************************8");
 		modelMap.put("total", total);
 		modelMap.put("success", success);
 		modelMap.put("failure", failure);
@@ -455,6 +447,7 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 		} else {
 			goods.setSelfSale("1");
 		}
+		goods.setSpec(aBatch.getSpec());
 		goods.setStatus(aBatch.getStatus());
 	}
 
@@ -480,6 +473,10 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 				rowNum, ModifyConstant.PRODUCT_CODE);
 		aProduct.setCode(StringUtilB2C.getStr(codeValue));
 
+		Object specValue = readWorkBookCell(row.getCell(ModifyConstant.PRODUCT_SPEC), Cell.CELL_TYPE_STRING,
+				rowNum, ModifyConstant.PRODUCT_SPEC);
+		aProduct.setSpec(StringUtilB2C.getStr(specValue));
+
 		Cell productCell = row.getCell(ModifyConstant.PRODUCE_DATE);
 		if (productCell != null && productCell.getCellType() == 0) {
 			if (HSSFDateUtil.isCellDateFormatted(productCell)) {

+ 44 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/util/SheetUtil.java

@@ -0,0 +1,44 @@
+package com.uas.platform.b2c.prod.commodity.util;
+
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+
+/**
+ * 表格的工具类
+ *
+ * @author yuj 2018-05-30 20:36
+ */
+public class SheetUtil {
+
+    /**
+     *
+     * @param sheet 表格信息
+     * @param i 前多少列不能为空
+     * @return 存在多少有效的行数
+     */
+    public static int getSheetLastNum(Sheet sheet, int i) {
+        if (sheet == null) {
+            return 0;
+        } else {
+            int lastRowNum = sheet.getLastRowNum();
+            Boolean flag = true;
+            while (flag) {
+                Row row = sheet.getRow(lastRowNum);
+                if (row != null) {
+                    for (int j = 0; j <= i; j++) {
+                        Cell cell = row.getCell(j);
+                        if ((cell != null) && (cell.getCellType() != Cell.CELL_TYPE_BLANK)) {
+                            flag = false;
+                            break;
+                        }
+                    }
+                }
+                if (flag) {
+                    --lastRowNum;
+                }
+            }
+            return lastRowNum;
+        }
+    }
+}

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

@@ -2,9 +2,11 @@ package com.uas.platform.b2c.prod.product.common;
 
 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 org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
 
 import java.util.List;
 
@@ -29,7 +31,19 @@ public class CommonTask {
     public void updateCount() {
         List<CommonCount> commonCounts = commonCountDao.findByStatus((short) 1);
         for (CommonCount commonCount : commonCounts) {
-            commonCount.setCount(jdbcTemplate.queryForObject(commonCount.getSql(), Double.class));
+            // 通过HTTP接口获取数据
+            if (CommonCount.SourceType.HTTP.equals(commonCount.getSourceType())) {
+                try {
+                    String responseText = HttpUtil.sendGetRequest(commonCount.getSql(), null).getResponseText();
+                    if (!StringUtils.isEmpty(responseText)) {
+                        commonCount.setCount(Double.parseDouble(responseText));
+                    }
+                } catch (Exception e) {
+                }
+            } else {
+                // 默认,通过执行SQL语句获取数据结果
+                commonCount.setCount(jdbcTemplate.queryForObject(commonCount.getSql(), Double.class));
+            }
         }
         commonCountDao.save(commonCounts);
     }

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

@@ -3,7 +3,6 @@ package com.uas.platform.b2c.prod.product.common.api;
 import com.uas.platform.b2c.prod.product.common.model.CommonCount;
 import com.uas.platform.b2c.prod.product.common.service.CommonCountService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.repository.query.Param;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -30,7 +29,7 @@ public class CommonCountController {
      * @return
      */
     @RequestMapping(method = RequestMethod.GET, params = "_status=actived")
-    public List<CommonCount> findActived(@Param("userFor") String usedFor) {
+    public List<CommonCount> findActived(String usedFor) {
         usedFor = StringUtils.isEmpty(usedFor) ? "b2c_index" : usedFor;
         return commonCountService.findByStatus((short) 1, usedFor);
     }

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

@@ -1,5 +1,7 @@
 package com.uas.platform.b2c.prod.product.common.model;
 
+import com.alibaba.fastjson.annotation.JSONField;
+
 import javax.persistence.*;
 import java.io.Serializable;
 
@@ -39,6 +41,7 @@ public class CommonCount implements Serializable{
     /**
      * 执行sql语句
      */
+    @JSONField(serialize = false)
     @Column(name = "cc_sql", length = 4000)
     private String sql;
 
@@ -54,9 +57,17 @@ public class CommonCount implements Serializable{
     @Column(name = "cc_usedfor")
     private String usedFor;
 
+    /**
+     * 数据来源
+     */
+    @JSONField(serialize = false)
+    @Column(name = "cc_sourcetype")
+    private String sourceType;
+
     /**
      * 状态,是否激活(1:是;0:否)
      */
+    @JSONField(serialize = false)
     @Column(name = "cc_status")
     private Short status = 0;
 
@@ -115,4 +126,24 @@ public class CommonCount implements Serializable{
     public void setStatus(Short status) {
         this.status = status;
     }
+
+    public String getSourceType() {
+        return sourceType;
+    }
+
+    public void setSourceType(String sourceType) {
+        this.sourceType = sourceType;
+    }
+
+    public class SourceType {
+        /**
+         * SQL 通过SQL语句来执行获取结果
+         */
+        public static final String SQL = "SQL";
+        /**
+         * HTTP 通过HTTP接口来获取数据结果
+         */
+        public static final String HTTP = "HTTP";
+
+    }
 }

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

@@ -20,9 +20,6 @@ public class CommonCountServiceImpl implements CommonCountService{
     @Override
     public List<CommonCount> findByStatus(Short status, String usedFor) {
         List<CommonCount> commonCounts = commonCountDao.findByStatusAndUsedForOrderByDetno(status, usedFor);
-        for (CommonCount commonCount : commonCounts) {
-            commonCount.setSql(null);
-        }
         return commonCounts;
     }
 

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

@@ -1,10 +1,5 @@
 package com.uas.platform.b2c.trade.order.service.impl;
 
-import static com.uas.platform.b2c.trade.aftersale.model.AfterSaleStatus.BUYER_TO_MALL;
-import static com.uas.platform.b2c.trade.aftersale.model.AfterSaleStatus.MALL_TO_SUP;
-import static com.uas.platform.b2c.trade.aftersale.model.AfterSaleStatus.SUP_TO_MALL;
-import static com.uas.platform.b2c.trade.util.Preconditions.checkNotNull;
-
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.api.b2c_erp.buyer.model.B2cOrder;
@@ -39,12 +34,7 @@ import com.uas.platform.b2c.logistics.dao.AddressDao;
 import com.uas.platform.b2c.logistics.dao.InvoiceFOrderDao;
 import com.uas.platform.b2c.logistics.dao.InvoiceFPurchaseDao;
 import com.uas.platform.b2c.logistics.dao.PickUpAddressDao;
-import com.uas.platform.b2c.logistics.model.Address;
-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 com.uas.platform.b2c.logistics.model.PickUpAddress;
+import com.uas.platform.b2c.logistics.model.*;
 import com.uas.platform.b2c.logistics.service.InvoiceFPurchaseService;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsHistoryDao;
@@ -69,14 +59,7 @@ 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.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.model.*;
 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.service.PurchaseService;
@@ -106,22 +89,6 @@ import com.uas.platform.core.util.serializer.FlexJsonUtils;
 import com.uas.search.model.BaseOrder;
 import com.uas.search.model.PageParams;
 import com.uas.search.model.SPage;
-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 javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
 import org.apache.commons.collections.map.HashedMap;
 import org.apache.commons.lang.time.DateUtils;
 import org.springframework.beans.BeanUtils;
@@ -135,6 +102,15 @@ import org.springframework.ui.ModelMap;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.*;
+
+import static com.uas.platform.b2c.trade.aftersale.model.AfterSaleStatus.*;
+import static com.uas.platform.b2c.trade.util.Preconditions.checkNotNull;
+
 /**
  * 订单业务实现类
  *
@@ -1406,8 +1382,15 @@ public class OrderServiceImpl implements OrderService {
             throw new IllegalOperatorException("此订单不存在,请重新确认订单信息");
 
         // 分期付款目前只支持直接付款给卖家
-        if (order.getInstallmentId() != null)
-            throw new IllegalOperatorException("此订单为直接付款给卖家,平台不可确认收款,请重新确认订单信息");
+        if (order.getInstallmentId() != null) {
+            Installment installment = installmentDao.findOne(order.getInstallmentId());
+            if (installment != null) {
+                if(installment.getStatus() != Status.TOBEPAID.value()) {
+                    throw new IllegalOperatorException("此订单为直接付款给卖家,平台不可确认收款,请重新确认订单信息");
+                }
+            }
+        }
+
 
         if (order.getStatus().intValue() != Status.PAID.value()
                 && order.getStatus().intValue() != Status.TOBEPAID.value()) {

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


BIN
src/main/resources/jxls-tpl/trade/products-error.xls


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


BIN
src/main/resources/jxls-tpl/trade/releaseByBatch-rmb.xls


BIN
src/main/resources/jxls-tpl/trade/releaseByBatchError-rmb.xls


BIN
src/main/resources/jxls-tpl/trade/releaseByBatchError-usd.xls


BIN
src/main/resources/jxls-tpl/trade/releasebyBatch-usd.xls


+ 18 - 3
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_transfer_ctrl.js

@@ -412,6 +412,7 @@ define([ 'app/app' ], function(app) {
 
 			modalInstance.result.then(function(account) {
 				$scope.buyAccount = account;
+				$scope.buyAccount.filterAccount = $filter('hideBankFilter')(account.number);
 			}, function() {
 
 			});
@@ -613,12 +614,23 @@ define([ 'app/app' ], function(app) {
 		}
 
 		$scope.onDiliverPriceChange = function (index) {
+			if ($scope.yesPayinstallmentEnter) {
+				return ;
+			}
 			if (!($scope.diliverPrice[index] > 0)) {
 				$scope.diliverPrice[index] = '';
-				toaster.pop('info', '提示', '分期金额必须大于0');
+				toaster.pop('info', '提示', '请输入付款金额对应的付款截图');
 			}
 		}
 
+		$scope.yesPayinstallmentEnter = function () {
+			$scope.yesPayinstallmentEnter = true;
+		}
+
+		$scope.yesPayinstallmentLeave = function() {
+			$scope.yesPayinstallmentEnter = false;
+		}
+
 
 		$scope.confirm = function() {
 			var imageArray = [];
@@ -634,8 +646,11 @@ define([ 'app/app' ], function(app) {
 						}
 						imageArray.push($scope.imagesList[i].imageUrl);
 					} else if ($scope.type == "PAIDTOVENDOR" && $scope.imagesList[i].imageUrl == '') {
-						toaster.pop('info','提示','请输入付款金额对应的付款截图');
-						return;
+						if ($scope.diliverPrice[i] != '') {
+							toaster.pop('info','提示','请输入付款金额对应的付款截图');
+							return;
+						}
+
 					}
 				}
 			}

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

@@ -144,6 +144,9 @@ define(['app/app'], function(app) {
 		}
 		// 监控价格
 		$scope.changeInstallmentPrice = function (item, price, index) {
+            if ($scope.saveInstallmentEnter) {
+                return ;
+            }
 			if (price == '') {
 				toaster.pop('warning', '提示', '支付金额不能为空');
 			} else if (isNaN(price)) {
@@ -220,6 +223,14 @@ define(['app/app'], function(app) {
 				$scope.totalPrice += Number(item.price);
 			})
 		};
+
+		$scope.saveInstallmentLeave = function() {
+            $scope.saveInstallmentEnter = false;
+        }
+
+        $scope.saveInstallmentEnter = function() {
+            $scope.saveInstallmentEnter = true;
+        }
 		// 保存分期付款
 		$scope.saveInstallment = function (installmentDetails) {
 			// if(!$scope.changeBlurDeadline(installmentDetails)){
@@ -229,6 +240,7 @@ define(['app/app'], function(app) {
 			for (var i = 0; i < installmentDetails.length; i++) {
 				if (!installmentDetails[i].price) {
 					toaster.pop('warning', '提示', '支付金额不能为空');
+                    return ;
 				}
 				if (!installmentDetails[i].deadline) {
 					toaster.pop('warning', '提示', '付款时间不能为空');

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

@@ -274,7 +274,11 @@ define([ 'app/app' ], function(app) {
 				// if(!message) {
 				// 	message = '没有提交任何信息'
 				// }
-				toaster.pop('info', '提示', '上传完成');
+                if ($scope.result.filter && $scope.result.filter > 0) {
+                    toaster.pop('warning', '警告', '存在导入失败产品,可下载导入失败表格查看详情');
+                } else {
+                    toaster.pop('success', '提示', '上传完成');
+                }
 				$scope.relTableParams.page(1);
 				$scope.relTableParams.reload();
                 if ($rootScope.$$productOn.tab === 'bathOnPerson') {

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

@@ -209,7 +209,7 @@
 							<td class="text-center">{{order.status | statusAndTypeFilter}}</td>
 							<td class="text-center">
 								<a ng-if="order.status==504 || order.status==503" ng-show="active=='tobereceived'" style="position: relative;">
-									<button type="button" ng-if="order.status==504 && !order.installmentId" class="btn btn-default btn-sm" ng-click="ensurePay(order)">确认收款</button>
+									<button type="button" ng-if="(order.status==504 && !order.installmentId) || (order.status==504 && order.installmentId && order.installment.status==503)" class="btn btn-default btn-sm" ng-click="ensurePay(order)">确认收款</button>
 									<button ng-if="order.status==504" type="button" class="btn btn-default btn-sm" ng-click="showAuditFailureModal(order)">审核不通过</button>
 									<div class="audit-failure-modal" ng-if="order.dislayModal">
 										<div class="title">审核不通过的原因</div>

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

@@ -933,14 +933,14 @@
 						</span>
 						<span class="oder_deal" ng-class="{'order-border-bottom-solid' : $index == order.orderDetails.length -1 || $index==2}">
                             <div ng-if="$index == 0">
-								<a class="operate-height" href="user#/order/pay/{{order.orderid | EncryptionFilter}}" ng-if="(order.status == 503 || order.status == 501) && order.auditPayFailReason == null && !order.installmentId" style="display: block;">
+								<a class="operate-height" href="user#/order/pay/{{order.orderid | EncryptionFilter}}" ng-if="(order.status == 503 || order.status == 501) && !order.installmentId" style="display: block;">
                                 <a ng-if="(order.status == 405 || order.status == 520) && !order.rateStatus" class="operate-height" target="_blank" href="user#/rate/firstRate/{{order.orderid | EncryptionFilter}}" style="display: block;">
                                   <em class="order-operation">评价</em>
                               	</a>
 								<a ng-if="order.rateStatus == 523" class="operate-height" target="_blank" href="user#/rate/addRate/{{order.orderid | EncryptionFilter}}" style="display: block;">
                                   <em class="order-operation">追加评价</em>
                               	</a>
-                              <a class="operate-height" href="user#/order/pay/{{order.orderid | EncryptionFilter}}" ng-if="!order.installmentId&&(order.status == 503 || order.status == 501) && order.auditPayFailReason == null" style="display: block;">
+                              <a class="operate-height" href="user#/order/pay/{{order.orderid | EncryptionFilter}}" ng-if="!order.installmentId&&(order.status == 503 || order.status == 501)" style="display: block;">
                                   <em class="order-operation">立即付款</em>
 								</a>
 								<a ng-click="requestCancel(order, order.orderid)" ng-if="order.status == 525" class="operate-height">

+ 20 - 22
src/main/webapp/resources/view/usercenter/forstore/buyer_transfer.html

@@ -3,25 +3,24 @@
 <div class="user_right fr">
 	<div class="down-payment">
 		<div class="content">
-			<!--<div class="common-title margin-top-none">付款账户</div>-->
-			<!--<div class="payment-style">-->
-				<!--<ul>-->
-					<!--<li ng-if="buyAccount">-->
-						<!--<label class="check-act" style="margin-right: 64px;">-->
-							<!--<input type="radio" id="1" name="1" checked/>-->
-							<!--<label for="1"></label>-->
-							<!--<em class="word-in-10" ng-bind="buyAccount.bankname" title="{{buyAccount.bankname}}"></em>-->
-						<!--</label>-->
-						<!--<div ng-bind="buyAccount.filterAccount"></div>-->
-						<!--<div ng-bind="buyAccount.accountname"></div>-->
-						<!--<div ng-if="buyAccountInfos.length > 1"><button class="change-count" ng-click="changebuyAccount(buyAccount.id)">更换账户</button></div>-->
-					<!--</li>-->
-					<!--<li class="no-count" ng-if="!buyAccount">-->
-						<!--<span><i class="fa fa-exclamation-circle"></i>暂未设置付款账户,前往  <a href="javascript:void(0)" ng-click="editAccount()">设置付款账户</a></span>-->
-					<!--</li>-->
-				<!--</ul>-->
-			<!--</div>-->
-			<!--
+			<div class="common-title margin-top-none">付款账户</div>
+			<div class="payment-style">
+				<ul>
+					<li ng-if="buyAccount">
+						<label class="check-act" style="margin-right: 64px;">
+							<input type="radio" id="1" name="1" checked/>
+							<label for="1"></label>
+							<em class="word-in-10" ng-bind="buyAccount.bankname" title="{{buyAccount.bankname}}"></em>
+						</label>
+						<div ng-bind="buyAccount.filterAccount"></div>
+						<div ng-bind="buyAccount.accountname"></div>
+						<div ng-if="buyAccountInfos.length > 1"><button class="change-count" ng-click="changebuyAccount(buyAccount.id)">更换账户</button></div>
+					</li>
+					<li class="no-count" ng-if="!buyAccount">
+						<span><i class="fa fa-exclamation-circle"></i>暂未设置付款账户,前往  <a href="javascript:void(0)" ng-click="editAccount()">设置付款账户</a></span>
+					</li>
+				</ul>
+			</div>
 			<div class="common-title margin-top-8">收款账户</div>
 			<div class="payment-style">
 				<ul class="payment-80">
@@ -61,11 +60,10 @@
 						<div ng-if="type == 'PAIDTOVENDOR'" ng-bind="salePerAccount.bankname" title="{{salePerAccount.bankname}}" class="word-in-10"></div>
 						<div ng-if="type == 'PAIDTOVENDOR'" ng-bind="salePerAccount.number"></div>
 						<div ng-if="type == 'PAIDTOVENDOR'" ng-bind="salePerAccount.accountname"></div>
-						<div ng-if="!salePerAccount || salePerAccount == null"><i class="fa fa-exclamation-circle" style="color: #5078cb;margin-right: 5px;"></i>尚未选择收款账户,请联系卖家处理</div>
+						<div ng-if="!salePerAccount || salePerAccount == null"><i class="fa fa-exclamation-circle" style="color: #5078cb;margin-right: 5px;"></i>卖家尚未设置收款账户,请联系卖家处理</div>
 					</li>
 				</ul>
 			</div>
-			-->
 			<div class="common-title margin-top-8" ng-if="type == 'PAIDTOVENDOR'">分期付款明细</div>
 			<div class="payment-detail" ng-if="type == 'PAIDTOVENDOR'">
 				<ul>
@@ -172,7 +170,7 @@
 			</div>
 			<div class="row" style="margin-top: 0;">
 				<div class="deal-btn">
-					<a ng-click="confirm()" class="ok">确认</a>
+					<a ng-click="confirm()" class="ok" ng-mouseenter="yesPayinstallmentEnter()" ng-mouseleave="yesPayinstallmentLeave()">确认</a>
 					<a ng-click="loadPage()" class="off">取消</a>
 				</div>
 			</div>

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

@@ -832,7 +832,7 @@
 							<span class="deal-btn" ng-if="purchase.installment.status == 503">
 								<button ng-click="editInstallment()" ng-if="(purchase.status == 503 || purchase.status == 501) && purchase.installment.installmentDetails.length == $index+1 && !editBox" class="ok" style="float: right;">编辑</button>
 								<button ng-click="cancelEdit()" class="off" ng-if="purchase.installment.installmentDetails.length == $index+1 && editBox">取消</button>
-								<button ng-click="updateInstallment(purchase.installment)" class="ok" ng-if="purchase.installment.installmentDetails.length == $index+1 && editBox">保存</button>
+								<button ng-click="updateInstallment(purchase.installment)" class="ok" ng-if="purchase.installment.installmentDetails.length == $index+1 && editBox" ng-mouseleave="saveInstallmentLeave()" ng-mouseenter="saveInstallmentEnter()">保存</button>
 							</span>
 						</li>
 						<li ng-repeat="item in installmentDetails" class="line" ng-if="!installmentBox">

+ 24 - 0
src/test/java/com/uas/platform/b2c/common/task/CommonTask.java

@@ -0,0 +1,24 @@
+package com.uas.platform.b2c.common.task;
+
+import com.uas.platform.b2c.BaseJunitTest;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.transaction.TransactionConfiguration;
+
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+@TransactionConfiguration(defaultRollback = false)
+public class CommonTask extends BaseJunitTest {
+
+    @Autowired
+    private com.uas.platform.b2c.prod.product.common.CommonTask commonTask;
+
+
+    @Test
+    public void testGetByPage() throws Exception {
+        commonTask.updateCount();
+    }
+
+}