Quellcode durchsuchen

Merge branch 'dev-mysql' into feature-dammyStatas-1106

wangcz vor 8 Jahren
Ursprung
Commit
78db3dc590
88 geänderte Dateien mit 3957 neuen und 989 gelöschten Zeilen
  1. 23 5
      src/main/java/com/uas/platform/b2c/common/account/model/UsageLog.java
  2. 22 2
      src/main/java/com/uas/platform/b2c/common/account/v2/service/impl/EnterpriseServiceImpl.java
  3. 47 20
      src/main/java/com/uas/platform/b2c/common/account/v2/service/impl/UserServiceImpl.java
  4. 4 0
      src/main/java/com/uas/platform/b2c/core/constant/Status.java
  5. 1 1
      src/main/java/com/uas/platform/b2c/core/filter/KeyWordFilter.java
  6. 39 0
      src/main/java/com/uas/platform/b2c/core/support/EncryptablePropertyPlaceholderConfigurer.java
  7. 25 5
      src/main/java/com/uas/platform/b2c/core/support/log/UsageBufferedLogger.java
  8. 18 20
      src/main/java/com/uas/platform/b2c/fa/payment/controller/BankInfoController.java
  9. 46 2
      src/main/java/com/uas/platform/b2c/fa/payment/controller/BankTransferController.java
  10. 75 41
      src/main/java/com/uas/platform/b2c/fa/payment/dao/BankInfoDao.java
  11. 18 18
      src/main/java/com/uas/platform/b2c/fa/payment/model/BankInfo.java
  12. 63 0
      src/main/java/com/uas/platform/b2c/fa/payment/model/BankTransfer.java
  13. 21 4
      src/main/java/com/uas/platform/b2c/fa/payment/service/BankInfoService.java
  14. 12 1
      src/main/java/com/uas/platform/b2c/fa/payment/service/BankTransferService.java
  15. 138 67
      src/main/java/com/uas/platform/b2c/fa/payment/service/impl/BankInfoServiceImpl.java
  16. 57 7
      src/main/java/com/uas/platform/b2c/fa/payment/service/impl/BankTransferServiceImpl.java
  17. 7 1
      src/main/java/com/uas/platform/b2c/fa/settlement/service/impl/SettlementServiceImpl.java
  18. 58 5
      src/main/java/com/uas/platform/b2c/trade/order/controller/OrderController.java
  19. 24 0
      src/main/java/com/uas/platform/b2c/trade/order/model/OrderSimpleInfo.java
  20. 84 0
      src/main/java/com/uas/platform/b2c/trade/order/model/PayRecord.java
  21. 23 0
      src/main/java/com/uas/platform/b2c/trade/order/service/OrderService.java
  22. 78 1
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderServiceImpl.java
  23. 3 3
      src/main/resources/dev/jdbc.properties
  24. BIN
      src/main/resources/jxls-tpl/trade/bankTransfer.xls
  25. BIN
      src/main/resources/jxls-tpl/trade/payRecord.xls
  26. 3 3
      src/main/resources/prod/jdbc.properties
  27. 10 1
      src/main/resources/spring/context.xml
  28. 3 3
      src/main/resources/test/jdbc.properties
  29. 65 3
      src/main/webapp/WEB-INF/views/normal/default/404.html
  30. 1 0
      src/main/webapp/WEB-INF/views/normal/user_center.html
  31. 4 1
      src/main/webapp/resources/css/common.css
  32. 621 0
      src/main/webapp/resources/css/commonComponent.css
  33. BIN
      src/main/webapp/resources/img/icon/close.png
  34. BIN
      src/main/webapp/resources/img/user/images/404.png
  35. 3 1
      src/main/webapp/resources/js/admin/controllers/checkMoney/SettlementCtrl.js
  36. 10 10
      src/main/webapp/resources/js/common/query/bankInfo.js
  37. 4 1
      src/main/webapp/resources/js/common/query/bankTransfer.js
  38. 1 1
      src/main/webapp/resources/js/common/query/order.js
  39. 1 1
      src/main/webapp/resources/js/prod/controllers/KindAdviceCtrl.js
  40. 1 1
      src/main/webapp/resources/js/usercenter/controllers/ComponentStoreCtrl.js
  41. 1 0
      src/main/webapp/resources/js/usercenter/controllers/forstore/account_manager_ctrl.js
  42. 1 0
      src/main/webapp/resources/js/usercenter/controllers/forstore/add_rate_ctrl.js
  43. 1 1
      src/main/webapp/resources/js/usercenter/controllers/forstore/browsing_history.js
  44. 1 1
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_cart_ctrl.js
  45. 1 1
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_home_ctrl.js
  46. 1 0
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_invoice_ctrl.js
  47. 1 1
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_invoice_record_ctrl.js
  48. 1 1
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_no_invoice_ctrl.js
  49. 1 0
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_order_ctrl.js
  50. 15 6
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_transfer_ctrl.js
  51. 1 1
      src/main/webapp/resources/js/usercenter/controllers/forstore/first_rate_ctrl.js
  52. 1 0
      src/main/webapp/resources/js/usercenter/controllers/forstore/order_detail_ctrl.js
  53. 1 0
      src/main/webapp/resources/js/usercenter/controllers/forstore/order_pay_ctrl.js
  54. 503 103
      src/main/webapp/resources/js/usercenter/controllers/forstore/pay_center_ctrl.js
  55. 1 1
      src/main/webapp/resources/js/usercenter/controllers/forstore/query_logistics_ctrl.js
  56. 1 0
      src/main/webapp/resources/js/usercenter/controllers/forstore/show_rate_ctrl.js
  57. 1 1
      src/main/webapp/resources/js/usercenter/controllers/forstore/store_focus_ctrl.js
  58. 555 146
      src/main/webapp/resources/js/vendor/controllers/forstore/pay_center_ctrl.js
  59. 1 1
      src/main/webapp/resources/js/vendor/controllers/forstore/purchase_detail.js
  60. 1 1
      src/main/webapp/resources/js/vendor/controllers/forstore/query_logistics_ctrl.js
  61. 1 1
      src/main/webapp/resources/js/vendor/controllers/forstore/show_rate_ctrl.js
  62. 1 0
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_account_management_ctrl.js
  63. 2 1
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_brand_apply_list_ctrl.js
  64. 1 1
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_component_applylist_ctrl.js
  65. 1 1
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_component_batchapply_ctrl.js
  66. 1 1
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_component_batchapplylist_ctrl.js
  67. 1 1
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_deliveryRule_ctrl.js
  68. 1 1
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_delivery_ctrl.js
  69. 1 1
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_distributor_ctrl.js
  70. 1 0
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_index_ctrl.js
  71. 1 0
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_invoice_ctrl.js
  72. 1 0
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_logistics_ctrl.js
  73. 9 4
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_materialCtrl.js
  74. 1 1
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_onSaleCtrl.js
  75. 2 2
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_order_ctrl.js
  76. 1 1
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_store_maintain_ctrl.js
  77. 1 1
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_takeSelf_ctrl.js
  78. 1 1
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_undercarriageCtrl.js
  79. 1 0
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_upload_ctrl.js
  80. 258 77
      src/main/webapp/resources/view/admin/bankInfo/auditBankInfo.html
  81. 3 3
      src/main/webapp/resources/view/admin/logUsage.html
  82. 11 0
      src/main/webapp/resources/view/admin/modal/creditCard_modal.html
  83. 115 62
      src/main/webapp/resources/view/common/bankInfoModal.html
  84. 1 1
      src/main/webapp/resources/view/usercenter/forstore/account_manager.html
  85. 1 0
      src/main/webapp/resources/view/usercenter/forstore/buyer_transfer.html
  86. 276 90
      src/main/webapp/resources/view/usercenter/forstore/pay_center.html
  87. 520 244
      src/main/webapp/resources/view/vendor/forstore/pay_center.html
  88. 40 0
      src/test/java/com/uas/platform/b2c/DesTest.java

+ 23 - 5
src/main/java/com/uas/platform/b2c/common/account/model/UsageLog.java

@@ -195,14 +195,28 @@ public class UsageLog extends BufferedLogable implements Serializable {
 	}
 
 	public String getUserTel() {
+		if(user != null && user.getUserTel()!=null){
+			return user.getUserTel().substring(0,user.getUserTel().length()-(user.getUserTel().substring(3)).length())+"****"+user.getUserTel().substring(7);
+		}
 		return user.getUserTel();
 	}
 
 	public String getUserEmail() {
+		if(user != null && user.getUserEmail()!=null){
+			String email = user.getUserEmail();
+			int index = org.apache.commons.lang.StringUtils.indexOf(user.getUserEmail(), "@");
+			if (index <= 1)
+				return user.getUserEmail();
+			else
+				return org.apache.commons.lang.StringUtils.rightPad(org.apache.commons.lang.StringUtils.left(email, 1), index, "*").concat(org.apache.commons.lang.StringUtils.mid(email, index, org.apache.commons.lang.StringUtils.length(email)));
+		}
 		return user.getUserEmail();
 	}
 
 	public String getUserName() {
+		if(user.getUserName()!=null){
+			return user.getUserName().substring(0,1)+"**";
+		}
 		return user.getUserName();
 	}
 
@@ -211,27 +225,31 @@ public class UsageLog extends BufferedLogable implements Serializable {
 	}
 
 	public UsageLog(String title, String message, String detail, String code, Long key) {
-		this.enUU = SystemSession.getUser().getEnterprise() != null ? SystemSession.getUser().getEnterprise().getUu() : null;
 		this.title = title;
 		this.message = message;
 		this.detail = detail;
 		this.code = code;
 		this.key = key;
 		this.time = new Date().getTime();
-		this.userUU = SystemSession.getUser().getUserUU();
-		this.ip = SystemSession.getUser().getIp();
+		if(SystemSession.getUser() != null) {
+			this.userUU = SystemSession.getUser().getUserUU();
+			this.enUU = SystemSession.getUser().getEnterprise() != null ? SystemSession.getUser().getEnterprise().getUu() : null;
+			this.ip = SystemSession.getUser().getIp();
+		}
 	}
 
 	public UsageLog(String title, String message, String detail, String code, Long key, Long enuu, Long useruu) {
 		this.enUU = enuu;
+		this.userUU = useruu;
 		this.title = title;
 		this.message = message;
 		this.detail = detail;
 		this.code = code;
 		this.key = key;
 		this.time = new Date().getTime();
-		this.userUU = useruu;
-		this.ip = SystemSession.getUser().getIp();
+		if(SystemSession.getUser() != null) {
+			this.ip = SystemSession.getUser().getIp();
+		}
 	}
 
 	public UsageLog(String title, String message, Long userUU, String ip, String code, Long key) {

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

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

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

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

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

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

+ 1 - 1
src/main/java/com/uas/platform/b2c/core/filter/KeyWordFilter.java

@@ -52,7 +52,7 @@ public class KeyWordFilter implements Filter {
         // POST请求 或 PUT请求,并且不是附件上传请求,并且不是hessian请求
         if(("POST".equals(method) || "PUT".equals(method)) &&
                 (StringUtils.isEmpty(contentType) || !contentType.contains("multipart")) &&
-                !uri.startsWith(HESSIAN_URI_PREFIX)){
+                !uri.contains(HESSIAN_URI_PREFIX)){
             //注入Service
             ServletContext sc = req.getSession().getServletContext();
             XmlWebApplicationContext cxt = (XmlWebApplicationContext) WebApplicationContextUtils.getWebApplicationContext(sc);

+ 39 - 0
src/main/java/com/uas/platform/b2c/core/support/EncryptablePropertyPlaceholderConfigurer.java

@@ -0,0 +1,39 @@
+package com.uas.platform.b2c.core.support;
+
+import com.uas.platform.core.util.Des;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.BeanInitializationException;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
+
+import java.util.Properties;
+
+public class EncryptablePropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
+    private static final String key = "10101010";
+
+    protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props)
+            throws BeansException {
+        try {
+            Des des = new Des();
+            String username = props.getProperty("jdbc.username");
+            if (username != null) {
+                props.setProperty("jdbc.username", des.decrypt(username, key));
+            }
+
+            String password = props.getProperty("jdbc.password");
+            if (password != null) {
+                props.setProperty("jdbc.password", des.decrypt(password, key));
+            }
+
+            String url = props.getProperty("jdbc.url");
+            if (url != null) {
+                props.setProperty("jdbc.url", des.decrypt(url, key));
+            }
+
+            super.processProperties(beanFactory, props);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new BeanInitializationException(e.getMessage());
+        }
+    }
+}

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

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

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

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

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

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

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

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

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

@@ -50,6 +50,12 @@ public class BankInfo implements Serializable{
 	 */
 	@Column(name = "binfo_name")
 	private String bankname;
+
+	/**
+	 * 开户支行名称
+	 */
+	@Column(name = "binfo_branch")
+	private String branchname;
 	
 	/**
 	 * 开户名
@@ -62,19 +68,13 @@ public class BankInfo implements Serializable{
 	 */
 	@Column(name = "binfo_number")
 	private String number;
-	
-	/**
-	 * 是个人账户还是企业账户
-	 * 1 个人账户,2 企业账户
-	 */
-	@Column(name = "binfo_type")
-	private Short type;
 
 	/**
 	 * 账户信息的状态
-	 * 101, "已提交"
+	 * 101, "已提交" --待审核
 	 * 103, "未通过"
-	 * 104, "已通过"
+	 * 104, "已通过" --使用中
+	 * 105, "已失效"
 	 * 这个状态暂时只针对企业的账户,因为企业账户需要审核,个人账户不需要审核
 	 */
 	@Column(name = "binfo_status")
@@ -135,14 +135,6 @@ public class BankInfo implements Serializable{
 		this.useruu = useruu;
 	}
 
-	public Short getType() {
-		return type;
-	}
-
-	public void setType(Short type) {
-		this.type = type;
-	}
-
 	public Long getEnuu() {
 		return enuu;
 	}
@@ -175,6 +167,14 @@ public class BankInfo implements Serializable{
 		this.accountname = accountname;
 	}
 
+	public String getBranchname() {
+		return branchname;
+	}
+
+	public void setBranchname(String branchname) {
+		this.branchname = branchname;
+	}
+
 	public String getNumber() {
 		return number;
 	}
@@ -248,7 +248,7 @@ public class BankInfo implements Serializable{
 	public String toString() {
 		return "BankInfo [id=" + id + ", useruu=" + useruu + ", enuu=" + enuu
 				+ ", num=" + num + ", bankname=" + bankname + ", accountname="
-				+ accountname + ", number=" + number + ", type=" + type
+				+ accountname + ", number=" + number
 				+ ", currency=" + currency + "]";
 	}
 }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@@ -1,6 +1,5 @@
 package com.uas.platform.b2c.trade.order.service.impl;
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.api.b2c_erp.buyer.model.B2cOrder;
@@ -3219,6 +3218,84 @@ public class OrderServiceImpl implements OrderService {
         return ResultMap.success(new PageImpl<OrderSimpleInfo>(list, info.getPageable(), orders.getTotalElements()));
     }
 
+    @Override
+    public Page<OrderSimpleInfo> getBuyerPayRecord(com.uas.platform.core.model.PageParams params, String keyword, Long fromDate, Long toDate,
+                                                   String currencyName, Integer method) {
+        final PageInfo info = new PageInfo(params);
+        filterPageInfo(info, keyword, fromDate, toDate, currencyName, method);
+
+        Page<Order> orderPage = orderDao.findAll(new Specification<Order>() {
+            @Override
+            public Predicate toPredicate(Root<Order> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                query.where(info.getPredicates(root, query, cb));
+                return null;
+            }
+        }, info);
+        List<OrderSimpleInfo> list = new ArrayList<>();
+        if(orderPage != null) {
+            for (Order order : orderPage.getContent()) {
+                list.add(new OrderSimpleInfo(order));
+            }
+        }
+        return new PageImpl<>(list, info.getPageable(), orderPage.getTotalElements());
+    }
+
+    @Override
+    public List<OrderSimpleInfo> getExportData(String keyword, Long fromDate, Long toDate, String currencyName, Integer method) {
+        final PageInfo info = new PageInfo();
+        filterPageInfo(info, keyword, fromDate, toDate, currencyName, method);
+        List<Order> orderList = orderDao.findAll(new Specification<Order>() {
+            @Override
+            public Predicate toPredicate(Root<Order> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
+                criteriaQuery.where(info.getPredicates(root, criteriaQuery, criteriaBuilder));
+                return null;
+            }
+        });
+        List<OrderSimpleInfo> list = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(orderList)){
+            for (Order order : orderList){
+                OrderSimpleInfo or = new OrderSimpleInfo(order);
+                list.add(or);
+            }
+        }
+
+        return list;
+    }
+
+    /**
+     * 设置分页过滤条件
+     */
+    private void filterPageInfo(PageInfo info, String keyword, Long fromDate, Long toDate,
+                               String currencyName, Integer method){
+
+        info.filter("buyeruu", SystemSession.getUser().getUserUU());
+        if (SystemSession.getUser().getEnterprise() != null) {
+            info.filter("buyerenuu", SystemSession.getUser().getEnterprise().getUu());
+        } else {
+            info.filter("dissociative", Type.PERSONAL.value());
+        }
+        info.expression(PredicateUtils.isNotNull("paytime"));
+        if (StringUtils.hasText(keyword)){
+            SimpleExpression[] simpArrs = new SimpleExpression[2];
+            simpArrs[0] = new SimpleExpression("orderid", keyword, Operator.LIKE, true);
+            simpArrs[1] = new SimpleExpression("sellername", keyword, Operator.LIKE, true);
+            LogicalExpression logical = new LogicalExpression(simpArrs, Operator.OR);
+            info.expression(logical);
+        }
+        if (fromDate != null) {
+            info.expression(PredicateUtils.gte("paytime", new Date(fromDate), false));
+        }
+        if (toDate != null) {
+            info.expression(PredicateUtils.lte("paytime", new Date(toDate), false));
+        }
+        if (currencyName != null){
+            info.expression(PredicateUtils.eq("currency", currencyName, false));
+        }
+        if (method != null){
+            info.expression(PredicateUtils.eq("paytype", method, false));
+        }
+    }
+
     /**
      * 根据订单号修改订单的使用状态
      * @param orderid

+ 3 - 3
src/main/resources/dev/jdbc.properties

@@ -1,8 +1,8 @@
 jdbc.driverClassName=com.mysql.jdbc.Driver
 #jdbc.url=jdbc:oracle:thin:@192.168.253.6:1521:orcl
-jdbc.url=jdbc:mysql://192.168.253.12:3306/mall_test_dev?characterEncoding=UTF-8&allowMultiQueries=true&rewriteBatchedStatements=true
-jdbc.username=root
-jdbc.password=select111***
+jdbc.url=7e5ef205e2ff4ca4ac98c9f833880ec6e2fe1a4579ebe6946c98747cbe3897b66b5c4cb4985aa8f22aa1cbab4bc6bfe12e09403e6255e2fda2f113bc366bbfc5d9a2cf99c34ce47ba6bd752a9bf5f04c3faf83464996ab6930a84c7d3b9f62d759eb691bc8cd1fe3225f6e7efa5ab3a583896b06178e65c56c3c4e448a0ae4fe
+jdbc.username=474e1aeadeeecac5
+jdbc.password=48981af937f010627b96e886a0d38aad
 jdbc.initialSize=1
 jdbc.maxActive=100
 jdbc.maxIdle=50

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


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


+ 3 - 3
src/main/resources/prod/jdbc.properties

@@ -3,9 +3,9 @@
 #jdbc.username=platform$b2b
 #jdbc.password=select*fromuu
 jdbc.driverClassName=com.mysql.jdbc.Driver
-jdbc.url=jdbc:mysql://10.10.0.208:8066/mall_prod?characterEncoding=UTF-8&allowMultiQueries=true&rewriteBatchedStatements=true
-jdbc.username=sa
-jdbc.password=Select123!#%*(
+jdbc.url=7e5ef205e2ff4ca46e29823f9c378880524d69d6c11d8c1c3688f4f0b3712ba1385b2cecff54843db21897fe0c75f0a36c7921cab8fadf398fa33412ca529b7f04233bf4ae6fd3870626fa79ef7f87cb7a8905195ea37bd042b530659d0e82dda7359ee0139e0d6fb23654ba47f5f4b8c682a3c72b9d81e7
+jdbc.username=73f3cd5578b9e08b
+jdbc.password=ee922d9f0e792f87e6dff054a282692d
 jdbc.initialSize=1
 jdbc.maxActive=100
 jdbc.maxIdle=50

+ 10 - 1
src/main/resources/spring/context.xml

@@ -11,7 +11,15 @@
 	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
 	http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd">
 
-	<context:property-placeholder location="classpath*:${profile}/*.properties" />
+	<bean id="propertyConfigurer"
+		  class="com.uas.platform.b2c.core.support.EncryptablePropertyPlaceholderConfigurer">
+		<property name="locations">
+			<list>
+				<value>classpath*:${profile}/*.properties</value>
+			</list>
+		</property>
+	</bean>
+	<!--<context:property-placeholder location="classpath*:${profile}/*.properties" />-->
 	<!-- 系统运行参数注入 -->
 	<util:properties id="sys"
 		location="classpath:${profile}/sys.properties" />
@@ -23,6 +31,7 @@
 	<!-- 容器启动完成之后执行 -->
 	<bean class="com.uas.platform.b2c.core.support.ContextRefreshedProcessor" />
 
+
 	<context:component-scan base-package="com.uas.platform" />
 	<context:annotation-config />
 

+ 3 - 3
src/main/resources/test/jdbc.properties

@@ -1,8 +1,8 @@
 jdbc.driverClassName=com.mysql.jdbc.Driver
 #jdbc.url=jdbc:oracle:thin:@192.168.253.6:1521:orcl
-jdbc.url=jdbc:mysql://192.168.253.12:3306/mall_test_dev?characterEncoding=UTF-8&allowMultiQueries=true&rewriteBatchedStatements=true
-jdbc.username=root
-jdbc.password=select111***
+jdbc.url=7e5ef205e2ff4ca4ac98c9f833880ec6e2fe1a4579ebe6946c98747cbe3897b66b5c4cb4985aa8f22aa1cbab4bc6bfe12e09403e6255e2fda2f113bc366bbfc5d9a2cf99c34ce47ba6bd752a9bf5f04c3faf83464996ab6930a84c7d3b9f62d759eb691bc8cd1fe3225f6e7efa5ab3a583896b06178e65c56c3c4e448a0ae4fe
+jdbc.username=474e1aeadeeecac5
+jdbc.password=48981af937f010627b96e886a0d38aad
 jdbc.initialSize=1
 jdbc.maxActive=100
 jdbc.maxIdle=50

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

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

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

@@ -21,6 +21,7 @@
 <link rel="stylesheet" href="static/css/user/user.css" />
 <link rel="stylesheet" href="static/lib/calendar/calendar.css">
 <link rel="stylesheet" href="static/lib/angular/ng-table.css">
+    <link rel="stylesheet" href="static/css/commonComponent.css" />
 </head>
 <body>
 

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

@@ -413,7 +413,10 @@ input.ng-invalid.ng-dirty,textarea.ng-invalid.ng-dirty {
 
 .modal {
     position: absolute;
-    bottom: auto;
+    top:50%;
+	left:50%;
+	margin-left:-50%;
+	margin-top:-300px;
 }
 
 .modal-backdrop.in {

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

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

BIN
src/main/webapp/resources/img/icon/close.png


BIN
src/main/webapp/resources/img/user/images/404.png


+ 3 - 1
src/main/webapp/resources/js/admin/controllers/checkMoney/SettlementCtrl.js

@@ -39,7 +39,9 @@ define(['app/app'], function(app) {
 					delete $scope.logoUrl;
 					delete $scope.imageUrl;
 					delete $scope.b2cAccount.filterAccount;
-					delete $scope.venderAccount.filterAccount;
+					if ($scope.venderAccount.filterAccount){
+						delete $scope.venderAccount.filterAccount;
+					}
 					$scope.batchCheckStatus = false;
 					$scope.oneCheckStatus = true;
 				}

+ 10 - 10
src/main/webapp/resources/js/common/query/bankInfo.js

@@ -4,10 +4,8 @@ define(['ngResource'], function(ngResource) {
 			getBuyPersonalBank : {
 				url : 'trade/bankInfo/buy/personal',
 				method : 'GET',
-				isArray : true,
 				params : {type : 'buyer'}
 			},
-			
 			getBuyEnterpriseBank : {
 				url : 'trade/bankInfo/buy/enterprise',
 				method : 'GET',
@@ -17,11 +15,9 @@ define(['ngResource'], function(ngResource) {
 					status : 104
 				}
 			},
-			
 			getSaleEeterpriseBank : {
 				url : 'trade/bankInfo/sale/enterprise',
 				method: 'GET',
-				isArray : true,
 				params : {type : 'sup'}
 			},
 			getSaleEeterpriseBankAudit : {
@@ -66,7 +62,10 @@ define(['ngResource'], function(ngResource) {
 					status : 104
 				}
 			},
-			
+			getCountByNumber : {
+				url : 'trade/bankInfo/number/count',
+				method: 'GET'
+			},
 			deleteBank : {
 				url : 'trade/bankInfo/delete/:id',
 				method : 'DELETE'
@@ -97,11 +96,12 @@ define(['ngResource'], function(ngResource) {
 				params : {type : 'buyer'}
 			},
 
-			saveBuyEnterpriseBank : {
-				url : 'trade/bankInfo/save/enterprise',
-				method : 'POST',
-				params : {type : 'buyer'}
-			},
+			// saveBuyEnterpriseBank : {
+			// 	url : 'trade/bankInfo/save/enterprise',
+			// 	method : 'POST',
+			// 	params : {type : 'buyer'}
+			// },
+
 			//保存商城的企业账户
 			saveAdminEnteAccount: {
 				url : 'trade/bankInfo/b2c/enterprise/save',

+ 4 - 1
src/main/webapp/resources/js/common/query/bankTransfer.js

@@ -47,7 +47,10 @@ define(['ngResource'], function(ngResource) {
 			},
 			getVendorBankTransferByMall : {
 				url : 'trade/transfer/vendor/bankTransfer/page',
-				method : 'GET'
+				method : 'GET',
+				params : {
+					type : 'sup'
+				}
 			}
 		});
 	}]);

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

@@ -368,7 +368,7 @@ define([ 'ngResource' ], function() {
                 method : 'PUT'
             },
             getBuyPayRecord : {
-                url : 'trade/order/payRecord',
+                url : 'trade/order/buyer/payRecord',
                 method : 'GET'
             },
             // 买家同意取消订单申请

+ 1 - 1
src/main/webapp/resources/js/prod/controllers/KindAdviceCtrl.js

@@ -2,7 +2,7 @@ define([ 'app/app' ], function(app) {
 	'use strict';
 	app.register.controller('KindAdviceCtrl', ['$scope', 'KindAdvice', 'toaster', function($scope, KindAdvice, toaster) {
 		$scope.advice = {};
-		
+		document.title =  '类目建议-优软商城';
 		$scope.submit = function() {
 			if($scope.advice.schema && $scope.advice.schema.length >= 15) {
 			} else {

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

@@ -2,7 +2,7 @@ define(['app/app'], function(app) {
 	'use strict';
 	app.register.controller('ComponentStoreCtrl', ['$rootScope', '$scope', 'ngTableParams', 'toaster', 'collectionService', 'BaseService', 'SessionService', function($rootScope, $scope, ngTableParams, toaster, collectionService, BaseService, SessionService) {
 		BaseService.scrollBackToTop();
-		
+		document.title = '产品收藏-优软商城';
 		$scope.pageInfo = {};
 		$scope.pageInfo.page = 1;	// 默认初始页码为1
 		$scope.pageInfo.count = 25; // 每页数量为25

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

@@ -6,6 +6,7 @@ define(['app/app'], function(app) {
 	app.register.controller('accountManagerCtrl', ['$scope', '$rootScope', 'ngTableParams', 'BaseService', 'ShippingAddress', '$modal', 'Enterprise', 'User', 'toaster', '$http', function($scope, $rootScope, ngTableParams, BaseService, ShippingAddress, $modal, Enterprise, User, toaster, $http) {
 		$rootScope.active = 'account_manager';
 		$scope.tab = 'base';
+		document.title = '账户管理-优软商城';
 		$scope.userInfo = $rootScope.userInfo;
 		$scope.userInfoBackup = angular.copy($scope.userInfo);
 		$scope.canAddTotal = 20;

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

@@ -1,6 +1,7 @@
 define(['app/app'], function(app) {
     'use strict';
     app.register.controller('addRateCtrl', ['$scope', '$rootScope', '$stateParams','$filter','Order', 'toaster', 'Rate','ngTableParams', function ($scope, $rootScope, $stateParams , $filter , Order , toaster , Rate ,ngTableParams) {
+        document.title = '追加评价-优软商城';
         $scope.isAnony = 1;
         $scope.goodsRate =[];
         $scope.vendorRate = {};

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

@@ -2,7 +2,7 @@ define(['app/app'], function(app) {
     'use strict';
     app.register.controller('browsingHistoryCtrl', ['$scope', '$rootScope', 'toaster', 'GoodsBrowsingHistory', 'Goods', '$filter', function($scope, $rootScope, toaster, GoodsBrowsingHistory, Goods, $filter){
         $rootScope.active = 'store_focus_ctrl';
-
+        document.title = '浏览历史-优软商城';
         $scope.param = {};
         $scope.param.page = 1;
         $scope.param.count = 25;

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

@@ -5,7 +5,7 @@ define(["app/app", 'jquery-summernote'], function(app) {
 	"use strict";
 	app.register.controller("buyerCartCtrl", ["$scope", "$rootScope", 'toaster', '$modal', 'ngTableParams', 'BaseService', 'Cart', '$filter' , 'ComponentActive', '$location', 'Order', '$state', 'SessionService', 'EncryptionService', 'Recommendation', 'NumberService', 'Goods', 'collectionService', 'AuthenticationService', '$window', '$timeout', function($scope, $rootScope, toaster, $modal, ngTableParams, BaseService, Cart, $filter ,ComponentActive, $location, Order, $state, SessionService, EncryptionService, Recommendation, NumberService, Goods, collectionService, AuthenticationService, $window, $timeout) {
 		$rootScope.active = "buyer_cart";
-
+		document.title = '购物车-优软商城';
 		/* TODO
 		 * 需要把批次的库存带出来,并给颜色,提示用户删除或修改那一条记录
 		 * */

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

@@ -5,6 +5,7 @@
 define(['app/app', 'calendar'], function(app) {
     app.register.controller('homeCtrl', ['$scope', '$rootScope', 'Recommendation', 'ShippingAddress', 'Bill', '$q', 'toaster', '$modal', 'Goods', 'StoreInfo', function ($scope, $rootScope, Recommendation, ShippingAddress, Bill, $q, toaster, $modal, Goods, StoreInfo) {
         $rootScope.active = 'home';
+        document.title='买家中心-优软商城';
         var getRecommendComps = function (userUU, usedFor, pageable) {
             Recommendation.getRecommendComps({page: pageable.page, size: pageable.size}, function (data) {
                 $scope.recommendComps = data.content;
@@ -13,7 +14,6 @@ define(['app/app', 'calendar'], function(app) {
             })
         };
         getRecommendComps(null, null, {page: 0, size: 12});
-
         /**
          * 获取推荐新店信息
          */

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

@@ -7,6 +7,7 @@ define(['app/app'], function(app) {
     app.register.controller('invoiceCtrl', ['$scope', '$rootScope', 'toaster', '$modal', '$q', 'Bill', '$upload', '$http', '$location', '$stateParams', '$state', function($scope, $rootScope, toaster, $modal, $q, Bill, $upload, $http, $location, $stateParams, $state) {
         $rootScope.active = 'buyer_invoice';
         $scope.tab = 'buyer_invoice';
+        document.title = '开票信息-优软商城';
         $scope.invoiceType = 1205;
         $scope.isSpecial = true; //专票,等于true为不存在
         $scope.isNormal = true; //普票,等于true为不存在

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

@@ -5,7 +5,7 @@ define([ 'app/app' ], function(app) {
         // 开票申请
         $scope.keyword = '';
         $scope.invoiceType = '';
-
+        document.title = '开票记录-优软商城';
         var initDataRule = function () {
             $scope.param = {
                 page: 1,

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

@@ -2,7 +2,7 @@ define([ 'app/app' ], function(app) {
     'use strict';
     app.register.controller('NoInvoiceCtrl', ['$scope','$rootScope','$modal', 'Order', 'toaster','ngTableParams','BaseService','Bill', function ($scope, $rootScope, $modal, Order, toaster, ngTableParams, BaseService, Bill) {
         $scope.tab = 'buyer_no_invoice';
-
+        document.title = '未开票订单-优软商城';
         // 开票申请
         $scope.applyInvoice = function () {
             var applyItem = [];

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

@@ -6,6 +6,7 @@ define(['app/app'], function (app) {
 	'use strict';
 	app.register.controller('orderCtrl', ['$scope', '$rootScope', 'Order', 'toaster', '$filter', 'OrderSimpleInfo', 'Recommendation', '$modal', 'tradeMessageNoticeService', 'tradeBasicProperties', 'NumberService', 'ChatBusinessLayer','Rate', function($scope, $rootScope, Order, toaster, $filter, OrderSimpleInfo, Recommendation, $modal, tradeMessageNoticeService, tradeBasicProperties, NumberService, ChatBusinessLayer,Rate) {
 
+		document.title = '已买到的产品-优软商城';
 		//初始化数据
 		$rootScope.active = 'buyer_order';
 		$scope.param = {};

+ 15 - 6
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_transfer_ctrl.js

@@ -3,6 +3,7 @@ define([ 'app/app' ], function(app) {
 	app.register.controller('buyerTransferCtrl', ['$scope', '$rootScope', '$anchorScroll', '$location','SessionService', 'bankInfoService','$modal', 'toaster', 'bankTransferService', '$filter', 'ngTableParams', 'BaseService', 'OrderSimpleInfo', '$state', '$stateParams', 'Order', 'SmoothScroll', 'EncryptionService','NumberService' ,'$timeout', function($scope, $rootScope, $anchorScroll, $location,SessionService, bankInfoService, $modal, toaster, bankTransferService, $filter, ngTableParams, BaseService, OrderSimpleInfo, $state, $stateParams, Order, SmoothScroll, EncryptionService, NumberService, $timeout) {
 		BaseService.scrollBackToTop();
 
+		document.title = '线下付款-优软商城';
 		$scope.diliverPrice = [''];
 		$scope.type = "PAIDTOPLATFORM";
 		// $scope.type = "PAIDTOVENDOR";
@@ -73,7 +74,7 @@ define([ 'app/app' ], function(app) {
 		// 分期付款功能开发
 		$scope.loadPersonal = function () {
 			bankInfoService.getBuyPersonalBank('', function(data) {
-				$scope.buyAccountInfos = resolveData(data);
+				$scope.buyAccountInfos = resolveData(data.content);
 				angular.forEach($scope.buyAccountInfos, function(buyAccountInfo) {
 					buyAccountInfo.filterAccount = hideBankFilter(buyAccountInfo.number);
 				});
@@ -402,6 +403,7 @@ define([ 'app/app' ], function(app) {
 			// 平台账户
 			bankInfoService.getAdminEnterAccount('', function(data) {
 				$scope.saleAccountInfos = resolveData(data);
+				console.log($scope.saleAccountInfos);
 				angular.forEach($scope.saleAccountInfos, function(saleAccountInfo) {
 					saleAccountInfo.filterAccount = hideBankFilter(saleAccountInfo.number);
 				});
@@ -612,6 +614,9 @@ define([ 'app/app' ], function(app) {
 							return;
 						}
 						imageArray.push($scope.imagesList[i].imageUrl);
+					} else if ($scope.type == "PAIDTOVENDOR" && $scope.imagesList[i].imageUrl == '') {
+						toaster.pop('info','提示','请输入付款金额对应的付款截图');
+						return;
 					}
 				}
 			}
@@ -626,8 +631,15 @@ define([ 'app/app' ], function(app) {
 				toaster.pop('info', '提示', '请选择买家账户');
 				return ;
 			}
+			if ($scope.type == 'PAIDTOVENDOR'){
+				$scope.saleAccount = $scope.salePerAccount;
+			}
 			if(angular.isUndefined($scope.saleAccount)||angular.equals("{}", angular.toJson($scope.saleAccount)) || $scope.saleAccount == null) {
-				toaster.pop('info', '提示', '请选择卖家账户');
+				if ($scope.type == 'PAIDTOVENDOR') {
+					toaster.pop('info', '提示', '尚未选择收款账户,请联系卖家处理');
+				} else {
+					toaster.pop('info', '提示', '请选择卖家账户');
+				}
 				return ;
 			}
 			if(!str || str == ''){
@@ -669,10 +681,7 @@ define([ 'app/app' ], function(app) {
 				})
 				transfer.installmentDetailId = installmentDetailId;
 			};
-			if ($scope.type == 'PAIDTOVENDOR'){
-				$scope.saleAccount = $scope.salePerAccount;
-			}
-			// console.log($scope.saleAccount);
+
 			var buyAccount = angular.copy($scope.buyAccount);
 			var saleAccount = angular.copy($scope.saleAccount);
 			delete saleAccount.filterAccount;

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

@@ -1,7 +1,7 @@
 define(['app/app'], function(app) {
     'use strict';
     app.register.controller('firstRateCtrl', ['$scope', '$rootScope', '$stateParams','$filter','Order', 'toaster', 'Rate', function ($scope, $rootScope, $stateParams , $filter , Order , toaster , Rate) {
-
+        document.title = '初次评价-优软商城';
         $scope.isAnony = 1;
         $scope.goodsRate =[];
         $scope.vendorRate = {};

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

@@ -3,6 +3,7 @@ define(['app/app'], function(app) {
 	"use strict";
 	app.register.controller('orderDetailCtrl', ['$scope', 'Order', 'Logistics', 'ComponentActive', 'toaster', '$stateParams', 'KdnLogistics', '$state', 'StoreInfo', 'NumberService', function($scope, Order, Logistics, ComponentActive, toaster, $stateParams, KdnLogistics, $state, StoreInfo, NumberService) {
 
+		document.title = '订单详情-优软商城';
 		// 保存订单编号信息
 		$scope.orderId = $stateParams.orderid;
 

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

@@ -5,6 +5,7 @@
 define(['app/app'], function(app) {
 	app.register.controller('orderPayCtrl', ['$scope', '$rootScope', '$stateParams', '$modal', '$state', 'Bill', 'toaster', 'Order', '$filter', 'ShippingAddress', 'Ysepay', '$q', 'NumberService', 'Cart', '$timeout', 'DistributionRule', 'TakeSelf', 'StoreInfo', function($scope, $rootScope, $stateParams, $modal, $state, Bill, toaster, Order, $filter, ShippingAddress, Ysepay, $q, NumberService, Cart, $timeout, DistributionRule, TakeSelf, StoreInfo) {
 
+		document.title = '结算页-优软商城';
 		$rootScope.active = 'buyer_cart';
 
 		$scope.payment = {};

+ 503 - 103
src/main/webapp/resources/js/usercenter/controllers/forstore/pay_center_ctrl.js

@@ -3,40 +3,22 @@
  */
 define(['app/app'], function(app) {
 	'use strict';
-	app.register.controller('payCenterCtrl', ['$scope', '$rootScope', 'ngTableParams', 'Ysepay', 'BaseService', 'bankInfoService', '$filter', '$modal', 'toaster', 'OrderSimpleInfo', 'SessionService', function($scope, $rootScope, ngTableParams, Ysepay, BaseService, bankInfoService, $filter, $modal, toaster, OrderSimpleInfo, SessionService) {
+	app.register.controller('payCenterCtrl', ['$scope', '$rootScope', 'ngTableParams', 'BaseService', 'bankInfoService', '$filter', 'SessionService', '$modal', 'toaster', 'OrderSimpleInfo', 'Loading', function($scope, $rootScope, ngTableParams, BaseService, bankInfoService, $filter, SessionService, $modal, toaster, OrderSimpleInfo, Loading) {
 		$rootScope.active = 'pay_center';
 
+		document.title = '支付中心-优软商城';
 		var hideBankFilter = $filter("hideBankFilter");
 
+		//历史记录的状态
+		var hiStatus= SessionService.get("buyCenter");
 
-		//银行账户信息,历史记录的的的状态
-		var hiStatus= SessionService.get('paycenter');
+		$scope.status = hiStatus == null ? 'pay-history' : hiStatus;
 
-		$scope.status = hiStatus == null ? 'pay-info' : hiStatus;
-
-		//企业和个人的账户状态
-		var accStatus= SessionService.get('accountstatus');
-		if ($rootScope.userInfo.enterprises) {
-			$scope.accountStatus = accStatus == null ? 'personal' : accStatus;
-		} else {
-			$scope.accountStatus = 'personal';
-		}
-
-
-		//切换银行账户信息,历史记录的的的状态
+		//切换银行账户信息,历史记录的状态
 		$scope.toggleStatus = function(status) {
 			if($scope.status != status) {
 				$scope.status = status;
-				SessionService.set('paycenter', status);
-				loadData();
-			}
-		};
-
-		//切换企业和个人的账户状态
-		$scope.toggleAccountStatus = function (status) {
-			if($scope.accountStatus != status) {
-				$scope.accountStatus = status;
-				SessionService.set('accountstatus', status);
+				SessionService.set('buyCenter', status);
 				loadData();
 			}
 		};
@@ -50,16 +32,22 @@ define(['app/app'], function(app) {
 		 */
 		$scope.tradeRecordPage = {};
 
+		$scope.$$record = {};
+
 		$scope.AllOrderInfo = {};
 
 		$scope.param = {};
 
+		$scope.currency = 'ALL';
+
+		$scope.paytype = 'ALL';
+
 		/**
 		 * 使用ngTable 获取支付记录信息
 		 */
 		$scope.tradeRecordTableParams = new ngTableParams({
 			page : 1,
-			count : 10,
+			count : 30,
 			sorting : {
 				paytime : 'DESC'
 			}
@@ -67,43 +55,198 @@ define(['app/app'], function(app) {
 			total : 0,
 			getData : function ($defer, params) {
 				const param = BaseService.parseParams(params.url());
-				//目前直接从订单中获取信息
+				if ($scope.keyword && $scope.keyword.length > 0){
+					param.keyword = $scope.keyword;
+				}
+				if ($scope.currency && $scope.currency != 'ALL'){
+					param.currencyName = $scope.currency;
+				}
+				if ($scope.paytype && $scope.paytype != 'ALL'){
+					param.method = $scope.paytype;
+				}
+				if ($scope.startDate){
+					param.fromDate = $scope.startDate.getTime();
+				}
+				if ($scope.endDate){
+					param.toDate = $scope.endDate.getTime();
+				}
+				//目前直接从订单中获取信息 --支付记录
 				OrderSimpleInfo.getBuyPayRecord(param, function (page) {
-					$scope.tradeRecordPage = page.data;
-					$scope.AllOrderInfo.totalPages = $scope.tradeRecordPage.totalPages;
-					$scope.param.page = $scope.tradeRecordPage.number;
-					$scope.acculatePages($scope.tradeRecordPage.number, $scope.tradeRecordPage.totalPages);
+					$scope.tradeRecordPage = page.content;
+					$scope.AllOrderInfo.totalPages = page.totalPages;
+					$scope.param.page = page.number;
+
+
+					$scope.$$record.totalElements = page.totalElements;
+					if(Number(page.totalElements) > 0) {
+						$scope.$$record.start = Number(page.size) * (Number(page.number) - 1) + 1;
+					}else {
+						$scope.$$record.start = 0;
+					}
+					$scope.$$record.end = Number(page.size) * (Number(page.number) - 1) + Number(page.numberOfElements);
+					$scope.acculatePages(page.number, $scope.AllOrderInfo.totalPages);
 				}, function (response) {
+
 				});
-				// Ysepay.findTradeRecordChartOfUser(param, {}, function (page) {
-				// 	$scope.tradeRecordPage = page;
-				// 	if (!page.content) {
-				// 		$scope.tradeRecordPage.content = [];
-				// 	}
-					// angular.forEach($scope.tradeRecordPage.content, function (tradeRecord) {
-					// 	if (tradeRecord.state == '已付款') {
-					// 		tradeRecord.amount = tradeRecord.totalAmount;
-					// 		tradeRecord.recordStatus = '支付成功';
-					// 	} else if (tradeRecord.state == '已退款') {
-					// 		tradeRecord.amount = tradeRecord.refundAmount;
-					// 		tradeRecord.recordStatus = '退款成功';
-					// 	}
-					// 	console.log(tradeRecord);
-					// });
-					// console.log(page);
-				// }, function (resp) {
-				// 	console.log(resp);
-				// });
 			}
 		});
 
+		$scope.$$bankInfo = {};
+		$scope.bankInfoTableParams = new ngTableParams({
+			page : 1,
+			count : 10,
+			sorting : {
+				num : 'ASC'
+			}
+		},{
+			total : 0,
+			getData : function ($defer, params) {
+				var param = BaseService.parseParams(params.url());
+				bankInfoService.getBuyPersonalBank(param, {}, function(page) {
+					$scope.accounts = page.content;
+
+					$scope.$$bankInfo.totalElements = page.totalElements;
+					if(Number(page.totalElements) > 0) {
+						$scope.$$bankInfo.start = Number(page.size) * (Number(page.number) - 1) + 1;
+					}else {
+						$scope.$$bankInfo.start = 0;
+					}
+					$scope.$$bankInfo.end = Number(page.size) * (Number(page.number) - 1) + Number(page.numberOfElements);
+
+					params.total(page.totalElements);
+					$defer.resolve(page.content);
+				}, function() {
+					toaster.pop('error', '获取账户信息失败');
+				});
+			}
+		});
+
+		$scope.condition = [];
+		var start = {
+			open : false
+		};
+		var end = {
+			open : false
+		};
+		$scope.condition.push(start);
+		$scope.condition.push(end);
+
+		// 打开日期选择框
+		$scope.openDatePicker = function($event, item, openParam, status) {
+			// if (status != null) {
+			// 	if (status == 1) {
+			// 		if ($scope.startDate != null) {
+			// 			return;
+			// 		}
+			// 	}
+			// 	if (status == 2) {
+			// 		if ($scope.endDate != null) {
+			// 			return;
+			// 		}
+			// 	}
+			// }
+			$event.preventDefault();
+			$event.stopPropagation();
+			openParam == 0 ? $scope.condition[1].open = false : $scope.condition[0].open = false;
+			item[openParam].open = !item[openParam].open;
+		};
+
+		$scope.onDateCondition = function (bool) {
+			// var text = '';
+			// var datePattern = /^(\d{4})-(\d{2})-(\d{2})$/;
+			if (bool == 1){
+				// text = document.getElementById("start").value;
+				// if (text != '' && !datePattern.test(text)){
+				// 	toaster.pop("info", "请输入正确开始时间格式");
+				// 	return;
+				// }
+				// if (text != '' && !validateDate(text)){
+				// 	toaster.pop("info", "请输入正确开始时间格式");
+				// 	return;
+				// }
+				// if (!$scope.startDate && text != ''){
+				// 	$scope.startDate = convertTextToDate(text);
+				// }
+				if ($scope.startDate && !$scope.endDate){
+					var nowTime = new Date();
+					$scope.endDate = new Date(nowTime.getFullYear(), nowTime.getMonth(), nowTime.getDate());
+				}
+				if ($scope.startDate && $scope.endDate){
+					if ($scope.startDate.getTime() > $scope.endDate.getTime()){
+						$scope.endDate = new Date($scope.startDate.getTime() + 86400000);
+					}
+				}
+			}else {
+				// text = document.getElementById("end").value;
+				// if (text != '' && !datePattern.test(text)){
+				// 	// $scope.endDate = text;
+				// 	toaster.pop("info", "请输入正确结束时间格式");
+				// 	return;
+				// }
+				// if (text != '' && !validateDate(text)){
+				// 	// $scope.endDate = text;
+				// 	toaster.pop("info", "请输入正确结束时间格式");
+				// 	return;
+				// }
+				// if (!$scope.endDate && text != ''){
+				// 	$scope.endDate = convertTextToDate(text);
+				// }
+				if ($scope.startDate && $scope.endDate){
+					if ($scope.startDate.getTime() > $scope.endDate.getTime()){
+						$scope.startDate = new Date($scope.endDate.getTime() - 86400000);
+					}
+				}
+			}
+		};
+
+		/**
+		 * 将文本转化为日期
+		 * @param value
+		 * @returns {Date}
+		 */
+		var convertTextToDate = function (value) {
+			var date = value;
+			var result = date.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
+
+			return new Date(result[1], result[3] - 1, result[4]);
+		};
+
+		/**
+		 * 验证日期格式是否正确
+		 * @param value
+		 * @returns {boolean}
+		 */
+		var validateDate = function (value) {
+			var date = value;
+			var result = date.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
+
+			if (result == null)
+				return false;
+			var d = new Date(result[1], result[3] - 1, result[4]);
+			return (d.getFullYear() == result[1] && (d.getMonth() + 1) == result[3] && d.getDate() == result[4]);
+		};
+
 		var loadAccountData = function() {
-			bankInfoService[$scope.getAccountData].call(null,{}, function(data) {
-				$scope.accounts = data;
-			}, function(response) {
-				toaster.pop('error', '获取账户信息失败');
-			});
-		}
+			$scope.bankInfoTableParams.page(1);
+			$scope.bankInfoTableParams.reload();
+		};
+
+		var clearHistoryParams = function () {
+			$scope.keyword = null;
+			$scope.currency = 'ALL';
+			$scope.paytype = 'ALL';
+			$scope.startDate = null;
+			$scope.endDate = null;
+		};
+
+		$scope.filterLoad = function () {
+			loadPayHistory();
+		};
+
+		var loadPayHistory = function () {
+			$scope.tradeRecordTableParams.page(1);
+			$scope.tradeRecordTableParams.reload();
+		};
 
 		$scope.setDefaultAccount = function(id) {
 			bankInfoService.setDefaultAccount({id : id}, function() {
@@ -112,20 +255,31 @@ define(['app/app'], function(app) {
 			}, function(response) {
 				toaster.pop('error', '设置默认账户失败');
 			})
-		}
+		};
+
+		$scope.showDeleteFrame = function (item) {
+			$scope.showDelete = true;
+			$scope.deleteObject = item;
+		};
 
+		$scope.cancelDelete = function () {
+			$scope.showDelete = false;
+			$scope.deleteObject = null;
+		};
 		//删除账户
-		$scope.deleteAccount = function(buyAccount) {
-			var  isSure = confirm('确认删除本银行账户?删除后无法恢复,请谨慎操作');
-			if(isSure){
-				bankInfoService.deleteBank({id: buyAccount.id}, function(data) {
-					toaster.pop('success', '删除成功');
-					loadAccountData();
-				}, function(response) {
+		$scope.deleteAccount = function() {
+			if ($scope.deleteObject){
+				bankInfoService.deleteBank({id: $scope.deleteObject.id}, function(data) {
+					if (data){
+						toaster.pop('success', '删除成功');
+						$scope.showDelete = false;
+						loadAccountData();
+					}
+				}, function() {
 					toaster.pop('error', '删除失败');
 				})
 			}
-		}
+		};
 
 		//编辑账户
 		$scope.editAccount = function(data) {
@@ -133,10 +287,6 @@ define(['app/app'], function(app) {
 				templateUrl : 'static/view/common/bankInfoModal.html',
 				controller : 'BankInfoCtrl',
 				resolve : {
-					kind : function() {
-						//深拷贝一份
-						return angular.copy($scope.accountStatus == 'personal' ? true: false);
-					},
 					account : function() {
 						//深拷贝一份
 						return angular.copy(data);
@@ -148,11 +298,6 @@ define(['app/app'], function(app) {
 				if(data) {
 					$scope.accounts.splice(data.num - 1, 1, account);
 				}else {//如果是新增。
-					if(account.kind == 1) {
-						$scope.accountStatus='personal';
-					}else if(account.kind == 2) {
-						$scope.accountStatus='enterprise';
-					}
 					loadAccountData();
 				}
 
@@ -165,25 +310,103 @@ define(['app/app'], function(app) {
 		var loadData = function() {
 			switch ($scope.status) {
 				case 'pay-info' :
-					switch ($scope.accountStatus) {
-						case 'personal' :
-							$scope.getAccountData = 'getBuyPersonalBank';
-							break;
-						case 'enterprise' :
-							$scope.getAccountData = 'getBuyEnterpriseBank';
-							break;
-					}
-					loadAccountData();
+					clearHistoryParams();
+					// loadAccountData();
 					break;
 				case 'pay-history':
-					$scope.tradeRecordTableParams.page(1);
-					$scope.tradeRecordTableParams.reload();
+					loadPayHistory();
 					break;
 			}
 		};
-
 		loadData();
 
+		$scope.search = function () {
+			if (!$scope.startDate && $scope.endDate){
+				toaster.pop("info", "请输入起始日期");
+				return ;
+			}
+			if ($scope.startDate && !$scope.endDate){
+				toaster.pop("info", "请输入结束日期");
+				return ;
+			}
+			loadPayHistory();
+		};
+
+		$scope.exportToExcel = function () {
+			if ($scope.$$record.totalElements == 0) {
+				toaster.pop('info', '当前支付记录为空,无法导出');
+				return ;
+			}
+			exportByAjax();
+		};
+
+		var exportByAjax = function () {
+			var url = 'trade/order/export/payRecord';
+			var strArray = [];
+			if ($scope.keyword && $scope.keyword.length > 0){
+				var wordStr = "keyword=" + $scope.keyword;
+				strArray.push(wordStr);
+			}
+			if ($scope.currency && $scope.currency != 'ALL'){
+				var currencyStr = "currencyName=" + $scope.currency;
+				strArray.push(currencyStr);
+			}
+			if ($scope.paytype && $scope.paytype != 'ALL'){
+				var typeStr = "method=" + $scope.paytype;
+				strArray.push(typeStr);
+			}
+			if ($scope.startDate){
+				var startStr = "fromDate=" + $scope.startDate.getTime();
+				strArray.push(startStr);
+			}
+			if ($scope.endDate){
+				var endStr = "toDate=" + $scope.endDate.getTime();
+				strArray.push(endStr);
+			}
+			if (strArray.length != 0){
+				var str = strArray.join("&");
+				url = url + "?" + str;
+			}
+			var form = $("<form>");   //定义一个form表单
+			form.attr('style', 'display:none');   //在form表单中添加查询参数
+			form.attr('target', '');
+			form.attr('method', 'POST');
+			form.attr('action', url);
+
+			$('body').append(form);  //将表单放置在web中
+			form.submit();
+
+			$scope.$$record.clockID = setInterval(function() {
+				getDownLoadStatus();
+			}, 500);
+		};
+
+		var getDownLoadStatus = function () {
+			Loading.show();
+			$.ajax({
+				url : 'trade/order/export/payRecord',
+				data : {isAjax : true},
+				method : 'POST',
+				dataType : 'json',
+				success : function (data) {
+					if(!data.loading){
+						$scope.$apply(function () {
+							toaster.pop('info', '数据处理完毕,正在下载文件,请稍等。');
+							Loading.hide();
+						});
+						if($scope.$$record.clockID) {
+							clearInterval($scope.$$record.clockID);
+						}
+					}
+				},
+				error : function () {
+					Loading.hide();
+					if($scope.$$record.clockID) {
+						clearInterval($scope.$$record.clockID);
+					}
+				}
+			});
+		};
 
 		/******************根据页数设置翻页的信息********start**************************/
 
@@ -363,19 +586,105 @@ define(['app/app'], function(app) {
 				$scope.middleSegment(currentPage);
 			}
 		};
-		/******************根据页数设置翻页的信息********end**************************/
+
+		$rootScope.$on('$stateChangeStart',function(event,toState,toParams,fromState,fromParams){
+			if(fromState.name == 'pay_center' || toState.name == 'pay_center'){
+				SessionService.unset("buyCenter");
+			}
+		});
 	}]);
 
 
 
-	app.register.controller('BankInfoCtrl', ['$scope', '$modalInstance', 'account', 'kind', 'bankInfoService', 'toaster', function($scope, $modalInstance, account, kind, bankInfoService, toaster){
+	app.register.controller('BankInfoCtrl', ['$scope', '$modalInstance', 'account', 'bankInfoService', 'toaster', function($scope, $modalInstance, account, bankInfoService, toaster){
+
+		/**
+		 * 目前只支持的银行
+		 * @type {string[]}
+		 */
+		$scope.bankList = [
+			'中国银行','中国建设银行','中国工商银行','中国农业银行','交通银行','招商银行','中国民生银行',
+			'兴业银行','中信银行','中国光大银行','广发银行','平安银行','中国邮政储蓄银行','华夏银行','浦发银行'
+		];
+
+		var initIndex = function () {
+			$scope.selectIndex = -1;
+			$scope.downIndex = 0;
+		};
+
+		$scope.getItemFocus = function() {
+			$scope.showBankFrame = true;
+			$scope.matchData = true;
+			$scope.resultList = $scope.bankList;
+			initIndex();
+		};
+
+		$scope.onItemBlur = function () {
+			if ($scope.time){
+				clearTimeout($scope.time);
+			}
+			$scope.time = setTimeout(function () {
+				$scope.$apply(function () {
+					$scope.showBankFrame = false;
+				});
+			}, 200);
+		};
+		$scope.onKeyUp = function () {
+			var dom = document.getElementById("ulContent");
+			console.log(event);
+			if ($scope.showBankFrame){
+				if(event.keyCode == 40) { //监听到按下键
+					$scope.selectIndex ++;
+					if ($scope.downIndex == 5){
+						dom.scrollTop += 44;
+					}
+					if ($scope.downIndex <= 4){
+						$scope.downIndex++;
+					}
+					if($scope.selectIndex >= $scope.resultList.length){
+						$scope.selectIndex = 0;
+						dom.scrollTop = 0;
+						$scope.downIndex = 1;
+					}
+					$scope.account.bankname = $scope.resultList[$scope.selectIndex];
+					// $scope.containsAttr($scope.logistics.companyName);
+				} else if(event.keyCode == 38) { //监听到按上键
+					$scope.selectIndex --;
+					if ($scope.downIndex == 1){
+						dom.scrollTop -= 44;
+					}
+					if ($scope.downIndex >= 2){
+						$scope.downIndex--;
+					}
+					if($scope.selectIndex < 0){
+						$scope.selectIndex = $scope.resultList.length - 1;
+						dom.scrollTop = 2400;
+						$scope.downIndex = 5;
+					}
+					$scope.account.bankname = $scope.resultList[$scope.selectIndex];
+					// $scope.containsAttr($scope.logistics.companyName);
+				} else if(event.keyCode == 13) { //确定键
+					$scope.showBankFrame = false;
+				}
+			}
+		};
+
+		$scope.showList = function () {
+			$scope.showBankFrame = !$scope.showBankFrame;
+			$scope.matchData = true;
+			$scope.resultList = $scope.bankList;
+		};
+
+		$scope.inputBankName = function () {
+			$scope.showBankFrame = true;
+		};
+
+		$scope.fitBankToAccount = function (item) {
+			$scope.account.bankname = item;
+			$scope.showBankFrame = false;
+		};
+
 		$scope.account = account;
-		if($scope.account) {
-			$scope.eidt = true;
-		} else {
-			delete $scope.eidt;
-		}
-		$scope.kind = kind;
 		if($scope.account) {
 			$scope.title = "修改账户";
 		}else {
@@ -383,24 +692,115 @@ define(['app/app'], function(app) {
 			$scope.account = {};
 		}
 
-		$scope.set = function(kind) {
-			$scope.kind = kind;
-		}
+		var matchArray = function () {
+			$scope.account.bankname = $scope.account.bankname ? $scope.account.bankname : '';
+			$scope.resultList = $scope.bankList.filter(function (data) {
+				if (data.indexOf($scope.account.bankname) >= 0){
+					return data;
+				}
+			});
+			if ($scope.resultList.length > 0){
+				$scope.matchData = true;
+			}else{
+				$scope.matchData = false;
+			}
+		};
+
+		/**
+		 * 验证新增账户格式
+		 * @param num
+		 */
+		$scope.checkAccount = function (num) {
+			var size;
+			if (num == 1){
+				//验证开户银行名称
+				$scope.showBankFrame = true;
+				matchArray();
+			}else if(num == 2){
+				//验证开户支行名称
+				if($scope.account.branchname){
+					size = $scope.account.branchname.replace(/[^\x00-\xff]/g,'**').length;
+					if (size > 40){
+						$scope.branchError = true;
+					}else {
+						$scope.branchError = false;
+					}
+					var telPatt = new RegExp("^[\u2E80-\u9FFF]+$");
+					if (telPatt.test($scope.account.branchname)){
+						$scope.branchPattError = false;
+					}else {
+						$scope.branchPattError = true;
+					}
+				}
+			}else if(num == 3){
+				//验证银行账号
+				if ($scope.account.number){
+					size = $scope.account.number.replace(/[^\x00-\xff]/g,'**').length;
+					if (size > 30){
+						$scope.numberError = true;
+					}else {
+						$scope.numberError = false;
+					}
+					var numPatt = new RegExp("^[0-9]+$");
+					if (numPatt.test($scope.account.number)){
+						$scope.numberPattError = false;
+					}else {
+						$scope.numberPattError = true;
+					}
+					validateRepeat($scope.account.number);
+				}
+			}else if(num == 4){
+				//验证开户名称
+				if ($scope.account.accountname){
+					size = $scope.account.accountname.replace(/[^\x00-\xff]/g,'**').length;
+					if (size > 100){
+						$scope.nameError = true;
+					}else {
+						$scope.nameError = false;
+					}
+				}
+			}
+		};
+
+		var validateRepeat = function (number) {
+			bankInfoService.getCountByNumber({type:1061, number:number}, {}, function (data) {
+				if (data.success){
+					if (data.data != 0){
+						$scope.repeatError = true;
+					}else {
+						$scope.repeatError = false;
+					}
+				}else {
+					toaster.pop("info", data.message);
+				}
+			});
+		};
 
 		$scope.confirm = function() {
-			var method = '';
-			if($scope.kind) {
-				method = 'saveBuyPersonalBank';
-			}else {
-				method = 'saveBuyEnterpriseBank';
+			var account = $scope.account;
+
+			if (!account){
+				toaster.pop('error', '请按要求填写正确的信息');
+				return ;
+			}
+			if (!account.bankname || !account.branchname || !account.number || !account.accountname){
+				toaster.pop('error', '请按要求填写正确的信息');
+				return ;
 			}
+			if (!$scope.matchData || $scope.branchError || $scope.branchPattError || $scope.numberError || $scope.numberPattError ||
+				$scope.nameError || $scope.repeatError){
+				toaster.pop('error', '请按要求填写正确的信息');
+				return ;
+			}
+
+			var method = 'saveBuyPersonalBank'; //不区分个人和企业账户
 			bankInfoService[method].call(null, null, $scope.account, function(data) {
 				toaster.pop('success', '保存成功');
 				$modalInstance.close(data)
 			},function (response) {
 				toaster.pop('warning', '保存信息失败');
 			});
-		}
+		};
 
 		$scope.cancel = function() {
 			$modalInstance.dismiss();

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

@@ -4,7 +4,7 @@ define(['app/app', 'calendar'], function(app) {
     app.register.controller('buyerQueryLogisticsCtrl', ['$scope', '$rootScope', 'BaseService', 'KdnLogistics', '$stateParams', '$filter', 'Logistics', "Order", 'toaster', function($scope, $rootScope, BaseService, KdnLogistics, $stateParams, $filter, Logistics, Order, toaster) {
 
         $rootScope.active = 'buyer_order';
-
+        document.title = '物流详情-优软商城';
         // 加密过滤器
         var enIdFilter = $filter('EncryptionFilter');
 

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

@@ -7,6 +7,7 @@ define(['app/app'], function (app) {
         $scope.setContFalse = function () {
             $scope.cont = false;
         };
+        document.title = '查看评价-优软商城';
         $scope.vendorRate = {};
         if ($stateParams.orderid && $stateParams.orderid != '') {
             $scope.orderid = $stateParams.orderid;

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

@@ -6,7 +6,7 @@ define(['app/app'], function(app) {
     'use strict';
     app.register.controller('storeFocusCtrl', ['$scope', '$rootScope', 'toaster', 'StoreFocusService', function($scope, $rootScope, toaster, StoreFocusService) {
 		$rootScope.active = 'store_focus_ctrl';
-
+        document.title = '店铺关注-优软商城';
         $scope.param = {};
         $scope.param.page = 1;
         $scope.param.count = 5;

+ 555 - 146
src/main/webapp/resources/js/vendor/controllers/forstore/pay_center_ctrl.js

@@ -1,121 +1,443 @@
-/**
- * Created by admin on 2017/6/2.
- */
 /**
  *  结算中心控制器
  */
 define(['app/app'], function(app) {
     'use strict';
-    app.register.controller('payCenterCtrl', ['$scope', '$rootScope', 'bankInfoService', 'toaster', '$upload', 'bankTransferService', 'Purchase', '$filter', function($scope, $rootScope, bankInfoService, toaster, $upload, bankTransferService, Purchase, $filter) {
+    app.register.controller('payCenterCtrl', ['$scope', '$rootScope', 'bankInfoService', 'Loading', 'toaster', '$upload', 'ngTableParams', 'BaseService', 'SessionService', 'bankTransferService', 'Purchase', '$filter', function($scope, $rootScope, bankInfoService, Loading, toaster, $upload, ngTableParams, BaseService, SessionService, bankTransferService, Purchase, $filter) {
         $rootScope.active = 'pay_center';
 
-        $scope.param = {};
-        $scope.param.page = 1;
-        $scope.param.count = 5;
-        $scope.param.type='sup';
-        $scope.param.sorting = {};
-        $scope.param.sorting.tranferCreateTime = 'DESC';
-
+        document.title = '结算中心-优软商城';
         // 加密订单的ID过滤器
         var enIdFilter = $filter('EncryptionFilter');
 
-        $scope.$payCenter = {};
-        $scope.$payCenter.tab = "accountTab";
-        //控制删除div显示
-        $scope.$payCenter.deleteDiv = false;
-        //删除id
-        $scope.$payCenter.deleteID = null;
+        //历史记录的状态
+        var hiStatus= SessionService.get('vendorCenter');
 
-        $scope.$payCenter.newAccount = false;
+        $scope.$payCenter = {};
+        $scope.param = {};
 
-        //获取数据的方法;
-        $scope.getMethod = "getSaleEeterpriseBankAudit";
+        $scope.tab = hiStatus == null ? 'paymentRecord' : hiStatus;
+        $scope.$$bankInfo = {};
 
-        $scope.bankInfo = {};
+        $scope.paytype = 'ALL';
+        $scope.$$transfer = {};
 
-        //获取订单数据
-        var getData = function () {
-            if($scope.$payCenter.tab === 'paymentRecode') {//获取支付记录
-                bankTransferService.getVendorBankTransferByMall($scope.param, function (page) {
+        $scope.tradeRecordTableParams = new ngTableParams({
+            page : 1,
+            count : 30,
+            sorting : {
+                transferTime : 'DESC'
+            }
+        },{
+            total : 0,
+            getData : function ($defer, params) {
+                var param = BaseService.parseParams(params.url());
+                if ($scope.keyword && $scope.keyword.length > 0){
+                    param.keyword = $scope.keyword;
+                }
+                if ($scope.startDate){
+                    param.fromDate = $scope.startDate.getTime();
+                }
+                if ($scope.endDate){
+                    param.toDate = $scope.endDate.getTime();
+                }
+                bankTransferService.getVendorBankTransferByMall(param, function (page) {
                     if(page.code == 1) {
-                        $scope.bankTransRecode = page.data.content;
+                        $scope.bankTransRecore = page.data.data.content;
+                        if ($scope.bankTransRecore.length > 0){
+                            $scope.currencySymbol = $scope.bankTransRecore[0].currencyName;
+                        }
+                        var pageObject = page.data.data;
+                        $scope.totalPrice = page.data.total;
                         angular.forEach($scope.bankTransRecode, function (bankT) {
                             bankT.jsonReceive = angular.fromJson(bankT.jsonReceive);
                         });
-
-                        $scope.totalPages = page.data.totalPages;
-                        $scope.param.currentPage = page.data.number;
+                        $scope.totalPages = pageObject.totalPages;
+                        $scope.param.currentPage = pageObject.number;
+                        $scope.totalElements = pageObject.totalElements;
+
+                        if(Number($scope.totalElements) > 0) {
+                            $scope.$$transfer.start = Number(pageObject.size) * (Number(pageObject.number) - 1) + 1;
+                        }else {
+                            $scope.$$transfer.start = 0;
+                        }
+                        $scope.$$transfer.end = Number(pageObject.size) * (Number(pageObject.number) - 1) + Number(pageObject.numberOfElements);
                         //计算页数
-                        $scope.acculatePages(page.data.number, page.data.totalPages);
+                        $scope.acculatePages(pageObject.number, pageObject.totalPages);
                     }else {
                         toaster.pop('info', '获取信息失败:' + page.message);
                     }
-                }, function (response) {
+                }, function () {
                     toaster.pop('error', '获取信息失败');
                 });
-            }else {//获取企业的账户信息
-                bankInfoService[$scope.getMethod](null, function (data) {
-                    $scope.bankInfos = data;
-                }, function (response) {
-                    toaster.pop('error', '获取卖家的账户信息失败');
+            }
+        });
+
+        $scope.bankInfoTableParams = new ngTableParams({
+            page : 1,
+            count : 10,
+            sorting : {
+                num : 'ASC'
+            }
+        },{
+            total : 0,
+            getData : function ($defer, params) {
+                var param = BaseService.parseParams(params.url());
+                bankInfoService.getSaleEeterpriseBank(param, {}, function(page) {
+                    $scope.accounts = page.content;
+
+                    $scope.$$bankInfo.totalElements = page.totalElements;
+                    if(Number(page.totalElements) > 0) {
+                        $scope.$$bankInfo.start = Number(page.size) * (Number(page.number) - 1) + 1;
+                    }else {
+                        $scope.$$bankInfo.start = 0;
+                    }
+                    $scope.$$bankInfo.end = Number(page.size) * (Number(page.number) - 1) + Number(page.numberOfElements);
+
+                    params.total(page.totalElements);
+                    $defer.resolve(page.content);
+                }, function() {
+                    toaster.pop('error', '获取账户信息失败');
                 });
             }
-        }
-        getData();
+        });
 
+        var loadAccountData = function() {
+            $scope.bankInfoTableParams.page(1);
+            $scope.bankInfoTableParams.reload();
+        };
+
+        var loadHistory = function () {
+            $scope.tradeRecordTableParams.page(1);
+            $scope.tradeRecordTableParams.reload();
+        };
+
+        var clearRecordParams = function () {
+            $scope.keyword = null;
+            $scope.startDate = null;
+            $scope.endDate = null;
+        };
+
+        $scope.search = function () {
+            if (!$scope.startDate && $scope.endDate){
+                toaster.pop("info", "请输入起始日期");
+                return ;
+            }
+            if ($scope.startDate && !$scope.endDate){
+                toaster.pop("info", "请输入结束日期");
+                return ;
+            }
+            loadHistory();
+        };
+
+        //获取数据的方法。
+        var loadData = function() {
+            switch ($scope.tab) {
+                case 'paymentRecord' :
+                    loadHistory();
+                    break;
+                case 'accountTab':
+                    clearRecordParams();
+                    // loadAccountData();
+                    break;
+            }
+        };
+        loadData();
 
         //切换tab方法
         $scope.setTab = function (tab) {
-            if($scope.$payCenter.tab !== tab) {
-                $scope.bankInfos = null;
-                $scope.$payCenter.tab = tab;
-                if($scope.$payCenter.tab === 'accountTab') {
-                    $scope.getMethod = "getSaleEeterpriseBankAudit";
-                }else if($scope.$payCenter.tab === 'accountHis'){
-                    $scope.getMethod = "getSaleEeterpriseBank";
+            if($scope.tab !== tab) {
+                $scope.tab = tab;
+                SessionService.set('vendorCenter', tab);
+                loadData();
+            }
+        };
+
+        $scope.condition = [];
+        var start = {
+            open : false
+        };
+        var end = {
+            open : false
+        };
+        $scope.condition.push(start);
+        $scope.condition.push(end);
+
+        // 打开日期选择框
+        $scope.openDatePicker = function($event, item, openParam, status) {
+            // if (status != null) {
+            //     if (status == 1) {
+            //         if ($scope.startDate != null) {
+            //             return;
+            //         }
+            //     }
+            //     if (status == 2) {
+            //         if ($scope.endDate != null) {
+            //             return;
+            //         }
+            //     }
+            // }
+            $event.preventDefault();
+            $event.stopPropagation();
+            openParam == 0 ? $scope.condition[1].open = false : $scope.condition[0].open = false;
+            item[openParam].open = !item[openParam].open;
+        };
+
+        $scope.onDateCondition = function (bool) {
+            // var text = '';
+            // var datePattern = /^(\d{4})-(\d{2})-(\d{2})$/;
+            if (bool == 1){
+                // text = document.getElementById("start").value;
+                // if (text != '' && !datePattern.test(text)){
+                //     // $scope.startDate = text;
+                //     toaster.pop("info", "请输入正确开始时间格式");
+                //     return;
+                // }
+                // if (text != '' && !validateDate(text)){
+                //     // $scope.startDate = text;
+                //     toaster.pop("info", "请输入正确开始时间格式");
+                //     return;
+                // }
+                // if (!$scope.startDate && text != ''){
+                //     $scope.startDate = convertTextToDate(text);
+                // }
+                if ($scope.startDate && !$scope.endDate){
+                    var nowTime = new Date();
+                    $scope.endDate = new Date(nowTime.getFullYear(), nowTime.getMonth(), nowTime.getDate());
+                }
+                if ($scope.startDate && $scope.endDate){
+                    if ($scope.startDate.getTime() > $scope.endDate.getTime()){
+                        $scope.endDate = new Date($scope.startDate.getTime() + 86400000);
+                    }
+                }
+            }else {
+                // text = document.getElementById("end").value;
+                // if (text != '' && !datePattern.test(text)){
+                //     // $scope.endDate = text;
+                //     toaster.pop("info", "请输入正确结束时间格式");
+                //     return;
+                // }
+                // if (text != '' && !validateDate(text)){
+                //     // $scope.endDate = text;
+                //     toaster.pop("info", "请输入正确结束时间格式");
+                //     return;
+                // }
+                // if (!$scope.endDate && text != ''){
+                //     $scope.endDate = convertTextToDate(text);
+                // }
+                if ($scope.startDate && $scope.endDate){
+                    if ($scope.startDate.getTime() > $scope.endDate.getTime()){
+                        $scope.startDate = new Date($scope.endDate.getTime() - 86400000);
+                    }
                 }
-                getData();
             }
         };
 
+        /**
+         * 将文本转化为日期
+         * @param value
+         * @returns {Date}
+         */
+        var convertTextToDate = function (value) {
+            var date = value;
+            var result = date.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
+
+            return new Date(result[1], result[3] - 1, result[4]);
+        };
+
+        /**
+         * 验证日期格式是否正确
+         * @param value
+         * @returns {boolean}
+         */
+        var validateDate = function (value) {
+            var date = value;
+            var result = date.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
+
+            if (result == null)
+                return false;
+            var d = new Date(result[1], result[3] - 1, result[4]);
+            return (d.getFullYear() == result[1] && (d.getMonth() + 1) == result[3] && d.getDate() == result[4]);
+        };
+
         // 文件上传成功之后
-        $scope.change = function(){
-            var text = document.getElementById("upload_text");
-            var dom = document.getElementById("InputFile");
-            var fileName = dom.files[0].name;
-            if (text.value != fileName) {
-                text.value = '';
+        $scope.uploadChange = function(){
+            var fileName = $scope.account.files[0].name;
+            if ($scope.account.attachUrl != fileName) {
+                $scope.account.attachUrl = '';
             }
             var ext,idx;
             idx = fileName.lastIndexOf(".");
             if (idx != -1){
                 ext = fileName.substr(idx+1).toUpperCase();
                 ext = ext.toLowerCase( );
-                // console.log(ext);
-                // alert("ext="+ext);
                 if (ext != 'jpg' && ext != 'png' && ext != 'gif' && ext != 'pdf'){
-                    alert("请上传可支持的格式");
-                    return;
+                    $scope.fileError = true;
+                }else {
+                    $scope.fileError = false;
                 }
             }
-            // console.log(dom.files[0]);
-            var len = dom.files[0].size;
+            var len = $scope.account.files[0].size;
             if (len > 3145728) {
-                // console.log(text.value.length);
-                alert('请勿超过3M');
+                $scope.fileLegError = true;
+            }else {
+                $scope.fileLegError = false;
+            }
+            if($scope.fileError || $scope.fileLegError){
+                $scope.account.attachUrl = '';
+                $scope.account.files = null;
                 return;
             }
-            // console.log(len);
-            text.value = fileName;
+            $scope.account.attachUrl = fileName;
             toaster.pop('success', '上传成功');
         };
 
+        $scope.account = {};
         $scope.newAccount = function () {
-           if($scope.bankInfos.length  > 0) {
-               toaster.pop('info', '目前仅支持邦定一个银行账户信息,如需修改或更换,可把原账户信息删除再重新添加.');
-           }else {
-               $scope.$payCenter.newAccount = true;
-           }
+            $scope.showAddFrame = true;
+        };
+
+        $scope.cancelAdd = function () {
+            $scope.showAddFrame = false;
+            $scope.account = {};
+            $scope.account.files = null;
+            $scope.showBankFrame = false;
+        };
+
+        /**
+         * 验证账户格式
+         * @param num
+         */
+        $scope.checkAccount = function (num) {
+            var size;
+            if (num == 1){
+                //验证开户银行名称
+                $scope.showBankFrame = true;
+                matchArray();
+            }else if(num == 2){
+                //验证开户支行名称
+                if($scope.account.branchname){
+                    size = $scope.account.branchname.replace(/[^\x00-\xff]/g,'**').length;
+                    if (size > 40){
+                        $scope.branchError = true;
+                    }else {
+                        $scope.branchError = false;
+                    }
+                    var telPatt = new RegExp("^[\u2E80-\u9FFF]+$");
+                    if (telPatt.test($scope.account.branchname)){
+                        $scope.branchPattError = false;
+                    }else {
+                        $scope.branchPattError = true;
+                    }
+                }
+            }else if(num == 3){
+                //验证银行账号
+                if ($scope.account.number){
+                    size = $scope.account.number.replace(/[^\x00-\xff]/g,'**').length;
+                    if (size > 30){
+                        $scope.numberError = true;
+                    }else {
+                        $scope.numberError = false;
+                    }
+                    var numPatt = new RegExp("^[0-9]+$");
+                    if (numPatt.test($scope.account.number)){
+                        $scope.numberPattError = false;
+                    }else {
+                        $scope.numberPattError = true;
+                    }
+                    validateRepeat($scope.account.number);
+                }
+            }else if(num == 4){
+                //验证开户名称
+                if ($scope.account.accountname){
+                    size = $scope.account.accountname.replace(/[^\x00-\xff]/g,'**').length;
+                    if (size > 100){
+                        $scope.nameError = true;
+                    }else {
+                        $scope.nameError = false;
+                    }
+                }
+            }
+        };
+
+        var validateRepeat = function (number) {
+            bankInfoService.getCountByNumber({type:1063,number:number}, {}, function (data) {
+                if (data.success){
+                    if (data.data != 0){
+                        $scope.repeatError = true;
+                    }else {
+                        $scope.repeatError = false;
+                    }
+                }else {
+                    toaster.pop("info", data.message);
+                }
+            });
+        };
+
+        $scope.reuseAccount = function (item) {
+            $scope.showReuseFrame = true;
+            $scope.reuseObject = item;
+        };
+
+        $scope.cancelReuse = function () {
+            $scope.showReuseFrame = false;
+        };
+
+        $scope.ensureReuse = function () {
+            if(!$scope.reuseObject){
+                toaster.pop("info", "请选择重新使用的账户");
+            }
+            bankInfoService.setDefaultAccount({id:$scope.reuseObject.id},{},function (data) {
+                toaster.pop("info", "重新使用成功");
+                $scope.reuseObject = {};
+                $scope.showReuseFrame = false;
+                loadAccountData();
+            },function () {
+                toaster.pop("info", "重新使用失败");
+            })
+        };
+
+        $scope.ensureAddAccount = function () {
+            var account = $scope.account;
+
+            if (!account){
+                toaster.pop('error', '请按要求填写正确的信息');
+                return ;
+            }
+            if (!account.bankname || !account.branchname || !account.number ||
+                !account.accountname || !account.attachUrl){
+                toaster.pop('error', '请按要求填写正确的信息');
+                return ;
+            }
+            if (!$scope.matchData || $scope.branchError || $scope.branchPattError || $scope.numberError || $scope.numberPattError ||
+                $scope.nameError || $scope.repeatError || $scope.fileError || $scope.fileLegError){
+                toaster.pop('error', '请按要求填写正确的信息');
+                return ;
+            }
+
+            var file = null;
+            if($scope.account.files && $scope.account.files[0]) {
+                file = $scope.account.files[0];
+            }
+            $upload.upload({
+                url: 'trade/bankInfo/save/enterprise',
+                file: file,
+                method: 'POST',
+                params : {type : 'sup'},
+                data: {
+                    bankInfo: $scope.account
+                }
+            }).success(function(data){
+                if(data){
+                    $scope.showAddFrame = false;
+                    $scope.account = {};
+                    $scope.account.files = null;
+                    toaster.pop('success', '保存成功');
+                    loadAccountData();
+                }
+            }).error(function(){
+                toaster.pop('error', "保存账户信息失败");
+            });
         };
 
         //删除账户
@@ -126,15 +448,12 @@ define(['app/app'], function(app) {
             }else {
                 toaster.pop('info', '请选择要删除的信息');
             }
-        }
-
+        };
 
-        //取消删除的操作
-        $scope.cancleDelete = function () {
+        $scope.cancelDelete = function () {
             $scope.$payCenter.deleteDiv = false;
             $scope.$payCenter.deleteID = null;
-        }
-
+        };
 
         //确认删除账户信息
         $scope.confirmDelete = function () {
@@ -146,95 +465,175 @@ define(['app/app'], function(app) {
                 toaster.pop('success', '删除账户成功');
                 $scope.$payCenter.deleteDiv = false;
                 $scope.$payCenter.deleteID = null;
-                getData();
+                loadAccountData();
             }, function() {
                 toaster.pop('error', '删除失败');
             })
-        }
-
-        //观察是否已经选中文件了
-        $scope.$watch('bankInfo.files', function (newValue, oldValue, scope) {
-            var dom = document.getElementById('upload_text');
-            if (dom) {
-                var str = dom.value;
-                // console.log(str.length);
-            }
-            if(newValue && newValue.length != 0 && str && str.length > 0) {
-                $scope.$payCenter.fileVal = true;
-            }else {
-                $scope.$payCenter.fileVal = false;
-            }
-        });
+        };
 
         /**
-         * 验证企业名称和开户银行
-         * @param name
+         * 目前只支持的银行
+         * @type {string[]}
          */
-        $scope.validateName = function (name, index) {
-            if(name) {
-                if(index == 1) {
-                    $scope.$payCenter.accountNameVal = true;
-                }else {
-                    $scope.$payCenter.bankNameVal = true;
-                }
-            }else {
-                if(index == 1) {
-                    $scope.$payCenter.accountNameVal = false;
-                }else {
-                    $scope.$payCenter.bankNameVal = false;
+        $scope.bankList = [
+            '中国银行','中国建设银行','中国工商银行','中国农业银行','交通银行','招商银行','中国民生银行',
+            '兴业银行','中信银行','中国光大银行','广发银行','平安银行','中国邮政储蓄银行','华夏银行','浦发银行'
+        ];
+
+        var matchArray = function () {
+            $scope.account.bankname = $scope.account.bankname ? $scope.account.bankname : '';
+            $scope.resultList = $scope.bankList.filter(function (data) {
+                if (data.indexOf($scope.account.bankname) >= 0){
+                    return data;
                 }
+            });
+            if ($scope.resultList.length > 0){
+                $scope.matchData = true;
+            }else{
+                $scope.matchData = false;
             }
+        };
 
-        }
+        var initIndex = function () {
+            $scope.selectIndex = -1;
+            $scope.downIndex = 0;
+        };
 
-        /**
-         * 验证银行账号信息是否正确
-         * @param number
-         * number 全部是数字,并且小于 31位 和 大于 7位数字
-         */
-        $scope.validateNumber = function (number) {
-            if(number) {
-                if(/^\d+$/.test(number)) {
-                    if(number.length < 31 && number.length > 7) {
-                        $scope.$payCenter.numberVal = true;
-                        return ;
+        $scope.getItemFocus = function() {
+            $scope.showBankFrame = true;
+            $scope.matchData = true;
+            $scope.resultList = $scope.bankList;
+            initIndex();
+        };
+
+        $scope.onItemBlur = function () {
+            if ($scope.time){
+                clearTimeout($scope.time);
+            }
+            $scope.time = setTimeout(function () {
+                $scope.$apply(function () {
+                    $scope.showBankFrame = false;
+                });
+            }, 200);
+        };
+        $scope.onKeyUp = function () {
+            var dom = document.getElementById("ulContent");
+            console.log(dom.scrollTop);
+            if ($scope.showBankFrame){
+                if(event.keyCode == 40) { //监听到按下键
+                    $scope.selectIndex ++;
+                    if ($scope.downIndex == 5){
+                        dom.scrollTop += 44;
+                    }
+                    if ($scope.downIndex <= 4){
+                        $scope.downIndex++;
+                    }
+                    if($scope.selectIndex >= $scope.resultList.length){
+                        $scope.selectIndex = 0;
+                        dom.scrollTop = 0;
+                        $scope.downIndex = 1;
+                    }
+                    $scope.account.bankname = $scope.resultList[$scope.selectIndex];
+                    // $scope.containsAttr($scope.logistics.companyName);
+                } else if(event.keyCode == 38) { //监听到按上键
+                    $scope.selectIndex --;
+                    if ($scope.downIndex == 1){
+                        dom.scrollTop -= 44;
+                    }
+                    if ($scope.downIndex >= 2){
+                        $scope.downIndex--;
                     }
+                    if($scope.selectIndex < 0){
+                        $scope.selectIndex = $scope.resultList.length - 1;
+                        dom.scrollTop = 2400;
+                        $scope.downIndex = 5;
+                    }
+                    $scope.account.bankname = $scope.resultList[$scope.selectIndex];
+                    // $scope.containsAttr($scope.logistics.companyName);
+                } else if(event.keyCode == 13) { //确定键
+                    $scope.showBankFrame = false;
                 }
             }
-            $scope.$payCenter.numberVal = false;
         };
 
-        //取消新增账户
-        $scope.cancle = function () {
-            $scope.$payCenter.newAccount = false;
-            $scope.bankInfo = {};
-            $scope.bankInfo.files = null;
-        }
+        $scope.fitBankToAccount = function (item) {
+            $scope.account.bankname = item;
+            $scope.showBankFrame = false;
+        };
 
-        //保存账户信息
-        $scope.confirm = function () {
-            var file = null;
-            if($scope.bankInfo.files&&$scope.bankInfo.files[0]) {
-                file = $scope.bankInfo.files[0];
+        $scope.showList = function () {
+            $scope.showBankFrame = !$scope.showBankFrame;
+            $scope.matchData = true;
+            $scope.resultList = $scope.bankList;
+        };
+
+        $scope.exportToExcel = function () {
+            if ($scope.totalElements == 0) {
+                toaster.pop('info', '当前收款记录为空,无法导出');
+                return ;
             }
-            $upload.upload({
-                url: 'trade/bankInfo/save/enterprise',
-                file: file,
-                method: 'POST',
-                params : {type : 'sup'},
-                data: {
-                    bankInfo: $scope.bankInfo
+            exportByAjax();
+        };
+
+        var exportByAjax = function () {
+            var url = 'trade/transfer/export/bankTransfer';
+            var strArray = [];
+            if ($scope.keyword && $scope.keyword.length > 0){
+                var wordStr = "keyword=" + $scope.keyword;
+                strArray.push(wordStr);
+            }
+            if ($scope.startDate){
+                var startStr = "fromDate=" + $scope.startDate.getTime();
+                strArray.push(startStr);
+            }
+            if ($scope.endDate){
+                var endStr = "toDate=" + $scope.endDate.getTime();
+                strArray.push(endStr);
+            }
+            if (strArray.length != 0){
+                var str = strArray.join("&");
+                url = url + "?" + str;
+            }
+            var form = $("<form>");   //定义一个form表单
+            form.attr('style', 'display:none');   //在form表单中添加查询参数
+            form.attr('target', '');
+            form.attr('method', 'POST');
+            form.attr('action', url);
+
+            $('body').append(form);  //将表单放置在web中
+            form.submit();
+
+            $scope.$$transfer.clockID = setInterval(function() {
+                getDownLoadStatus();
+            }, 500);
+        };
+
+        var getDownLoadStatus = function () {
+            Loading.show();
+            $.ajax({
+                url : 'trade/transfer/export/bankTransfer',
+                data : {isAjax : true},
+                method : 'POST',
+                dataType : 'json',
+                success : function (data) {
+                    if(!data.loading){
+                        $scope.$apply(function () {
+                            toaster.pop('info', '数据处理完毕,正在下载文件,请稍等。');
+                            Loading.hide();
+                        });
+                        if($scope.$$transfer.clockID) {
+                            clearInterval($scope.$$transfer.clockID);
+                        }
+                    }
+                },
+                error : function () {
+                    Loading.hide();
+                    if($scope.$$transfer.clockID) {
+                        clearInterval($scope.$$transfer.clockID);
+                    }
                 }
-            }).success(function(data){
-                $scope.$payCenter.newAccount = false;
-                $scope.bankInfo = {};
-                $scope.bankInfo.files = null;
-                toaster.pop('success', '保存成功');
-                getData();
-            }).error(function(data){
-                toaster.pop('error', "保存账户信息失败");
             });
-        }
+        };
 
         //获取传入买家订单获取采购单的信息
         $scope.goToPurchaseDetail = function (orderNum) {
@@ -300,7 +699,8 @@ define(['app/app'], function(app) {
                 return ;
             }
             $scope.param.page = page;
-            getData();
+            $scope.tradeRecordTableParams.page($scope.param.page);
+            $scope.tradeRecordTableParams.reload();
         };
 
         //当前页在前段的计算方式
@@ -348,6 +748,12 @@ define(['app/app'], function(app) {
                 });
         };
 
+        $rootScope.$on('$stateChangeStart',function(event,toState,toParams,fromState,fromParams){
+            if(fromState.name == 'pay_center' || toState.name == 'pay_center'){
+                SessionService.unset("vendorCenter");
+            }
+        });
+
         //当前页在中间计算方式
         $scope.middleSegment = function (currentPage) {
             angular.forEach($scope.pages, function (page) {
@@ -436,7 +842,7 @@ define(['app/app'], function(app) {
             var result = '未知状态';
             switch (status) {
                 case 101 :
-                    result = '已提交';
+                    result = '待审核';
                     break;
                 case 104:
                     result = '使用中';
@@ -444,9 +850,12 @@ define(['app/app'], function(app) {
                 case 103:
                     result = '未通过';
                     break;
-                case 112:
+                case 105:
                     result = '已失效';
                     break;
+                case 112:
+                    result = '已删除';
+                    break;
             }
             return result;
         }

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

@@ -6,7 +6,7 @@ define(['app/app'], function(app) {
 		// 保存采购单编号信息
 		$scope.purchaseId = $stateParams.purchaseId;
 		$scope.open = false;
-
+		document.title = '订单详情-优软商城';
 		// 记录状态激活信息
 		$scope.steps = {
 			step1 : false,

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

@@ -4,7 +4,7 @@ define(['app/app', 'calendar'], function(app) {
     app.register.controller('vendorQueryLogisticsCtrl', ['$scope', '$rootScope', 'BaseService', 'KdnLogistics', '$stateParams', '$filter', 'Logistics', 'Purchase', 'toaster', function($scope, $rootScope, BaseService, KdnLogistics, $stateParams, $filter, Logistics, Purchase, toaster) {
 
         $rootScope.active = 'vendor_order';
-
+        document.title = '物流详情-优软商城';
         // 加密过滤器
         var enIdFilter = $filter('EncryptionFilter');
 

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

@@ -2,7 +2,7 @@ define(['app/app'], function(app) {
     app.register.controller('showRateCtrl', ['$scope', '$rootScope', '$stateParams','$state', 'toaster','Rate','Order','BaseService','ngTableParams', function ($scope, $rootScope, $stateParams, $state, toaster, Rate, Order, BaseService, ngTableParams) {
 
         /***********卖家回复评论模块 *** start *****************************/
-
+        document.title = '查看评价-优软商城';
         $scope.cont = false;
         $scope.setContFalse = function () {
             $scope.cont = false;

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

@@ -6,6 +6,7 @@ define(['app/app'], function(app) {
     "use strict";
     app.register.controller('vendorAccountManagementCtrl', ['$scope', '$rootScope', 'Enterprise', 'User', 'toaster', '$modal','BaseService','ngTableParams','$http', function($scope, $rootScope, Enterprise, User, toaster, $modal, BaseService, ngTableParams, $http) {
         $rootScope.active = 'vendor_account_management';
+		document.title = '账户管理-优软商城';
 		$scope.tab = 'base';
         $scope.userInfo = $rootScope.userInfo;
 		$scope.updateState = false;

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

@@ -4,7 +4,8 @@
 define(['app/app'], function(app) {
     "use strict";
     app.register.controller('vendorBrandApplyListCtrl', ['$scope', '$rootScope', 'AuthenticationService', 'BaseService', 'BrandsSubmit', 'ngTableParams', function ($scope, $rootScope, AuthenticationService, BaseService, BrandsSubmit, ngTableParams) {
-
+        document.title = "品牌申请" + "-优软商城";
+        $rootScope.active = 'vendor_brand_apply';
         var loadMyBrandsSubmit = function(){
             $scope.brandTableParams = new ngTableParams({
                 page : 1,

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

@@ -2,7 +2,7 @@ define([ 'app/app' ], function(app) {
     // 器件审批
     app.register.controller('vendorComponentApplyListCtrl', ['$scope', 'ngTableParams', 'ComponentsSubmit', 'BaseService', '$stateParams', 'AuthenticationService', function($scope, ngTableParams, ComponentsSubmit, BaseService, $stateParams, AuthenticationService) {
         BaseService.scrollBackToTop();
-
+        document.title = '器件申请-优软商城';
         var loadMyComponentsSubmit = function(){
             $scope.componentTableParams = new ngTableParams({
                 page : 1,

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

@@ -4,7 +4,7 @@
 define(['app/app'], function(app) {
     "use strict";
     app.register.controller('vendorComponentBatchApplyCtrl', ['$scope', '$rootScope', 'Search', 'KindAPI', '$upload', 'toaster', 'ComponentSubmit', '$modal', function ($scope, $rootscope, Search, KindAPI, $upload, toaster, ComponentSubmit, $modal) {
-
+        document.title = '器件申请-优软商城';
         $scope.submits = [{gradeOneKiName : '', gradeTwoKiName : '', gradeThreeKiName : '', brName : '', url : '', isFirst : true, isSecond : true, isThird : true}];
 
         // 添加分类

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

@@ -2,7 +2,7 @@ define([ 'app/app' ], function(app) {
     // 器件审批
     app.register.controller('vendorComponentBatchApplyListCtrl', ['$scope', 'ngTableParams', 'BaseService', 'ComponentSubmit', function($scope, ngTableParams, BaseService, ComponentSubmit) {
         BaseService.scrollBackToTop();
-
+        document.title = '器件申请-优软商城';
         $scope.active = 'all';
 
         $scope.setActive = function(result) {

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

@@ -5,7 +5,7 @@ define([ 'app/app' ], function(app) {
         $scope.tab = 'deliverRule';
         $scope.title = '配送规则';
         $scope.$$rule = {};
-
+        document.title = '配送规则-优软商城';
         $scope.ruleTableParams = new ngTableParams({
             page : 1,
             count : 10,

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

@@ -5,7 +5,7 @@
 define(['app/app'], function(app) {
     "use strict";
     app.register.controller('vendorDeliveryCtrl', ['$scope', '$rootScope', 'InvoiceFPurchase', 'ChineseToPinYin', 'Order' , 'Purchase', '$modal', '$stateParams', 'ComponentActive','$window','$state', 'BaseService', 'ShippingAddress', 'Logistics', '$filter', 'toaster', 'KdnLogistics', '$q', '$timeout','Distributor', 'SessionService', function($scope, $rootScope, InvoiceFPurchase, ChineseToPinYin, Order , Purchase, $modal, $stateParams, ComponentActive, $window, $state, BaseService, ShippingAddress, Logistics, $filter, toaster, KdnLogistics, $q, $timeout, Distributor, SessionService) {
-
+        document.title = '点击发货-优软商城';
         $scope.logistics = {};
         $scope.jsonSdAddress = {};
         $scope.selfDeliveryPerson = {};

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

@@ -4,7 +4,7 @@ define([ 'app/app' ], function(app) {
         $scope.tab = 'distributor';
         $rootScope.active = 'vendor_logistics';
         $scope.title = '配送商';
-
+        document.title = '配送商-优软商城';
         $scope.initData = function () {
             Distributor.findAllSelected({},function (data) {
                 if (data){

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

@@ -5,6 +5,7 @@
 define(['app/app', 'calendar'], function(app) {
     'use strict';
     app.register.controller('vendorIndexCtrl', ['$scope', 'toaster', 'VendorService', '$rootScope', 'News', '$filter', function($scope, toaster, VendorService, $rootScope, News, $filter) {
+        document.title = '卖家中心-优软商城';
         $rootScope.active = 'index';
         VendorService.getVendorInfo(null, function(data){
             $scope.vendor = data;

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

@@ -3,6 +3,7 @@ define([ 'app/app' ], function(app) {
     app.register.controller('vendorInvoiceCtrl', ['$scope','$rootScope','$modal','BillSubmit','BaseService', 'toaster','ngTableParams','$state', function ($scope, $rootScope, $modal, BillSubmit, BaseService, toaster, ngTableParams, $state) {
         $rootScope.active = 'vendor_invoice';
         // 切换tab
+        document.title = '卖家发票管理-优软商城';
         $scope.active = 'apply_invoice';
         $scope.toggleTab = function (t) {
             if (t=='apply_invoice') {

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

@@ -6,6 +6,7 @@ define(['app/app', 'calendar'], function (app) {
 	app.register.controller('vendorLogisticsCtrl', ['$scope', '$rootScope', '$http', 'ngTableParams', 'BaseService', 'ShippingAddress', 'toaster', 'SmoothScroll', '$modal','$stateParams','Purchase','Logistics','KdnLogistics','$filter', function($scope, $rootScope, $http, ngTableParams, BaseService, ShippingAddress, toaster, SmoothScroll, $modal, $stateParams, Purchase, Logistics, KdnLogistics, $filter) {
 		// 加密过滤器
 		var enIdFilter = $filter('EncryptionFilter');
+		document.title = '发货地址-优软商城';
 		$rootScope.active = 'vendor_logistics';
 		$scope.tab = 'logistic';
 		$scope.canAddTotal = 20;

+ 9 - 4
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_materialCtrl.js

@@ -2,7 +2,7 @@ define([ 'app/app' ], function(app) {
 	'use strict';
 	app.register.controller('vendor_materialCtrl', ['$scope', '$rootScope', 'Material', 'toaster', 'ComponentActive', 'Enterprise', '$q', 'NumberService', function ($scope, $rootScope, Material, toaster, ComponentActive, Enterprise, $q, NumberService) {
 		$rootScope.active = 'vendor_material';
-
+		document.title = '卖家产品库-优软商城';
 		$scope.tab = 'material';
 		$scope.standard_tab = 'standard';
 		$scope.choosedIds = [];
@@ -263,7 +263,7 @@ define([ 'app/app' ], function(app) {
 			});
 		};
 
-		function downloadByJs(url, keyword) {
+		function downloadByJs(url, keyword, type) {
 			var form = $("<form>");   //定义一个form表单
 			form.attr('style', 'display:none');   //在form表单中添加查询参数
 			form.attr('target', '');
@@ -274,10 +274,15 @@ define([ 'app/app' ], function(app) {
 			input1.attr('type', 'hidden');
 			input1.attr('name', 'keyword');
 			input1.attr('value', keyword);
+
+			var input2 = $('<input>');
 			input1.attr('type', 'hidden');
+			input1.attr('name', 'type');
+			input1.attr('value', type);
 
 			$('body').append(form);  //将表单放置在web中
 			form.append(input1);   //将查询参数控件提交到表单上
+			form.append(input2);   //将类型参数控件提交到表单上
 			form.submit();
 		}
 
@@ -288,9 +293,9 @@ define([ 'app/app' ], function(app) {
 				return;
 			}
 			if ('standard' == $scope.standard_tab)
-				downloadByJs('trade/products/template/standard', $scope.param.keyword);
+				downloadByJs('trade/products/template/download/type', $scope.param.keyword, 'standard');
 			if ('unstandard' == $scope.standard_tab)
-				downloadByJs('trade/products/template/unstandard', $scope.param.keyword);
+				downloadByJs('trade/products/template/download/type', $scope.param.keyword, 'nStandard');
 		};
 
 		//初始化页数信息

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

@@ -5,7 +5,7 @@ define([ 'app/app' ], function(app) {
         $scope.keyword = '';
         $scope.tab = 'onSale';
         $scope.isInt = /^[0-9]*[1-9][0-9]*$/;
-
+        document.title = '卖家在售产品-优软商城';
         //只包含中文和英文的字符
         var pattern = /^[\u4e00-\u9fa5a-zA-Z]+$/;
         $scope.param = {

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

@@ -6,7 +6,7 @@ define(['app/app'], function (app) {
     "use strict";
     app.register.controller('vendorOrderCtrl', ['$scope', '$rootScope', 'Purchase', 'ngTableParams', 'BaseService', 'toaster', '$state', '$filter', 'Return', 'Change', '$modal', 'PuExProcess', 'Recommendation', 'DateUtil', 'Loading', 'bankInfoService', 'Logistics', 'Distributor', 'SessionService','Rate', function ($scope, $rootScope, Purchase, ngTableParams, BaseService, toaster, $state, $filter, Return, Change, $modal, PuExProcess, Recommendation, DateUtil, Loading, bankInfoService, Logistics, Distributor, SessionService, Rate) {
         $rootScope.active = 'vendor_order';
-
+        document.title = '已卖出的产品-优软商城';
         // 加密过滤器
         var enIdFilter = $filter('EncryptionFilter');
         // 默认状态为所有订单
@@ -1674,7 +1674,7 @@ define(['app/app'], function (app) {
                 return ;
             }
             Purchase.sellerCancelOrder({purchaseId : purchaseid, reason : $scope.purchase.reason}, null, function () {
-                toaster.pop('success','操作成功,等待家确认');
+                toaster.pop('success','操作成功,等待家确认');
                 $modalInstance.close();
                 // $scope.reloadRoute();
             }, function (res) {

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

@@ -2,7 +2,7 @@ define(['app/app'], function (app) {
 	"use strict";
 	app.register.controller('vendorStoreMaintainCtrl', ['$scope', '$rootScope', 'Enterprise', 'StoreInfo', '$modal', 'toaster', '$timeout', '$state', 'RecommendProductService', function($scope, $rootScope, Enterprise, StoreInfo, $modal, toaster, $timeout, $state, RecommendProductService) {
 		$rootScope.active = "vendor_store";
-
+		document.title = '我的店铺-优软商城';
 		// 编辑状态
 		$scope.editBasicInfo = false;
 		$scope.editQualifications = false;

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

@@ -4,7 +4,7 @@ define([ 'app/app' ], function(app) {
         $scope.tab = 'takeSelf';
         $rootScope.active = 'vendor_logistics';
         $scope.$$takeSelf = {};
-
+        document.title = '自提点-优软商城';
         $scope.takeSelfTableParams = new ngTableParams({
             page : 1,
             count : 10,

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

@@ -2,7 +2,7 @@ define([ 'app/app' ], function(app) {
     'use strict';
     app.register.controller('vendor_undercarriageCtrl', ['$scope', '$rootScope', '$q', 'Goods', 'Enterprise', 'toaster', 'Loading', 'StoreInfo', 'AuthenticationService', function ($scope, $rootScope, $q, Goods, Enterprise, toaster, Loading, StoreInfo, AuthenticationService) {
         $rootScope.active = 'vendor_material';
-
+        document.title = '上下架历史-优软商城';
         $scope.tab = 'undercarriage';
         $scope.keyword = '';
 

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

@@ -4,6 +4,7 @@ define([ 'app/app' ], function(app) {
 		$rootScope.$$productOn = {};
 		$rootScope.active = 'vendor_productOn';
 		$rootScope.$$productOn.leadIn = 'bathOn';
+		document.title = '产品导入-优软商城';
 	}]);
 
 	//批量上架的Ctrl

+ 258 - 77
src/main/webapp/resources/view/admin/bankInfo/auditBankInfo.html

@@ -1,9 +1,199 @@
 <style>
-    .box-header {
-        height: 35px;
-        line-height: 26px;
+    #store-list .table tr>th,
+    #store-list .table tr>td{
+        text-align: center;
+        vertical-align: middle;
+    }
+
+    #store-list table td .info-line {
+        white-space: nowrap;
+    }
+    /*切换导航*/
+    .menu .col-sm-8{
+        padding: 0;
+        width: auto;
+    }
+    .menu{
+        width: 100%;
+        height: 40px;
+        background: #229ee6;
+        margin: 0;
+        line-height: 40px;
+        overflow: hidden;
+    }
+    .menu .btn{
+        border: none;
+        background: none;
+        color: #fff;
+        padding: 8px 30px;
+        width: 100px;
+    }
+    .menu .btn:active{
+        background: none;
+    }
+    .menu .btn-group{
+        height: 40px;
+    }
+    .menu .btn-primary:before,.menu a:hover:before{
+        content: "";
+        width: 20px;
+        height: 20px;
+        display: inline-block;
+        background: #fff;
+        transform: rotate(-45deg);
+        position: absolute;
+        bottom: -18px;
+        left: 40%;
+    }
+    .menu .col-sm-3{
+        float: right;
+        margin-right: 100px;
+        width: 270px;
+        padding: 0;
+    }
+    .menu .sreach-input{
+        position: relative;
+        margin-top: 5px;
+        width: 300px;
+        height: 40px;
+    }
+    .menu .sreach-input .form-control{
+        height: 30px;
+        float: left;
+        border-radius: 0;
+        font-size: 12px;
+        padding-right:70px;
+    }
+    .menu .sreach-input button{
+        width: 60px;
+        height: 30px;
+        background: #b9e1f9;
+        float: right;
+        position: absolute;
+        right: 0;
+        top: 0;
+        border: none;
         font-size: 14px;
     }
+    .com-title h2{
+        font-size: 24px;
+        color: #219ee6;
+    }
+    /*显示记录条数*/
+    .text-rt{
+        text-align: right;
+    }
+    .record-stort{
+        line-height: 34px;
+        font-size: 12px;
+        margin-bottom: 0;
+        padding-right: 30px;
+    }
+    .record-stort em{
+        font-family: "Microsoft Yahei", "微软雅黑";
+        color: #229ee6;
+        font-style: inherit;
+        font-weight: inherit;
+        background: none;
+    }
+    /*表格样式*/
+    .application-tab table tbody tr{
+        height: 70px;
+    }
+    .application-tab table tr th,.application-tab table tr td{
+        border: #cfedfe 1px solid;
+        text-align: center;
+        vertical-align: middle;
+    }
+    .application-tab .table-bordered{
+        border-top: #cfedfe 1px solid;
+    }
+    .application-tab table tr th{
+        background: #cfedfe;
+        height: 35px;
+    }
+    .application-tab table tbody tr:hover{
+        background: #e4f3fc;
+    }
+    .application-tab table tbody tr .btn{
+        border: none;
+        width: 90px;
+        height: 25px;
+        line-height: 25px;
+        color: #fff;
+        display: inline-block;
+        margin-bottom: 5px;
+        padding: 0;
+        font-size: 12px;
+        border-radius: 2px;
+    }
+    .text-left{
+        text-align: left !important;
+    }
+    .application-tab table tbody tr .btn:hover{
+        background: #219ee6 ;
+    }
+    .application-tab table tbody tr .apply-bg{
+        background: #fb9c06;
+    }
+    .application-tab table tbody tr .detail-bg{
+        background: #3ba9e9;
+    }
+    .application-tab table tbody tr .wait{
+        color:#e02f2f ;
+    }
+    .application-tab table tbody tr .no-pass{
+        color: #219ee6;
+    }
+    .application-tab table thead th p i{
+        color: #219ee6;
+        /*margin-left: 4px;*/
+    }
+    .application-tab table thead th p:hover{
+        cursor: pointer;
+    }
+    .application-tab .status{
+        width: 80px;
+        height: 21px;
+        text-align: center;
+        font-size: 12px;
+        border: none;
+        padding: 0;
+        padding-left: 2px;
+        font-weight: bold;
+    }
+    .application-tab .hot-icon div{
+        text-align: left;
+        margin-left: 30px;
+    }
+    .application-tab .hot-icon i{
+        width: 17px;
+        height: 17px;
+        display: inline-block;
+        position: relative;
+        top: 3px;
+        margin-right: 3px;
+        background: url("static/img/icon/store-hot-icon.png");
+    }
+    .application-tab .hot-icon i.hot{
+        background-position: -1px 0;
+    }
+    .application-tab .hot-icon i.new{
+        background-position: 0 -19px;
+    }
+    .application-tab .hot-icon i.new-apply{
+        background-position: 0 -39px;
+    }
+    .blue{
+        color: #3ba9e9 !important;
+    }
+    .red{
+        color: #f00 !important;
+    }
+    .application-tab table tr td p{
+        margin-bottom: 0;
+    }
+
     .audit-fail {
         display: block !important;
         position: fixed;
@@ -50,82 +240,73 @@
         background: #5078cb;
         color: #fff;
     }
-    .table-bordered>tbody>tr>td{
-        vertical-align: middle;
-    }
 </style>
-<div class="box" id="bankInfoAudit">
-    <div class="box-header well" data-original-title>
-        <i class="icon-user"></i> 银行账户审核
+<div class="row-fluid sortable" id="bankInfoAudit">
+    <div class="com-title">
+        <h2>银行账户审核</h2>
     </div>
-    <div class="box-content">
-        <!-- ng-tableStart -->
-        <div class="fullscreen" style="padding: 10px;">
-            <div class="row">
-                <div class="col-sm-1">
-                    共<span class="badge">{{bankInfoTableParams.total()}} </span>条
-                </div>
-                <div class="col-sm-5">
-                    <div class="btn-group" role="group" aria-label="...">
-                        <button type="button" class="btn btn-default" ng-class="{'btn-primary':active=='tobeAudit'}" ng-click="setActive('tobeAudit')">未审核</button>
-                        <button type="button" class="btn btn-default" ng-class="{'btn-primary':active=='pass'}" ng-click="setActive('pass')">已通过</button>
-                        <button type="button" class="btn btn-default" ng-class="{'btn-primary':active=='fail'}" ng-click="setActive('fail')">未通过</button>
-                    </div>
-                </div>
-                <div class="col-sm-6">
-                    <div class="col-sm-9 text-right">
-                        <div class="input-group">
-                            <input type="search" class="form-control ng-pristine ng-valid ng-touched" ng-model="keyword"
-                                   ng-search="onSearch()" placeholder="根据银行、企业名称、银行账号搜索">
-                            <div class="input-group-btn">
-                                <button ng-click="onSearch()" class="btn btn-primary" type="button">搜索</button>
-                            </div>
-                        </div>
-                    </div>
-                </div>
+    <div class="menu row">
+        <div class="col-sm-8">
+            <div class="btn-group" role="group" aria-label="...">
+                <a type="button" class="btn btn-default" ng-class="{'btn-primary': active === 'tobeAudit'}" ng-click="setActive('tobeAudit')">未审核</a>
+                <a type="button" class="btn btn-default" ng-class="{'btn-primary': active === 'pass'}" ng-click="setActive('pass')">已通过</a>
+                <a type="button" class="btn btn-default" ng-class="{'btn-primary': active === 'fail'}" ng-click="setActive('fail')">未通过</a>
+            </div>
+        </div>
+        <div class="col-sm-3">
+            <div class="sreach-input">
+                <input type="search" class="form-control ng-pristine ng-valid ng-touched" placeholder="根据银行、企业名称、银行账号搜索" ng-model="keyword" ng-search="onSearch()"/>
+                <button ng-click="onSearch()" type="button">搜索</button>
             </div>
-            <table ng-table="bankInfoTableParams" class="table table-bordered table-striped" style="margin-top: 10px;">
-                <thead>
-                <tr>
-                    <th width="30">序号</th>
-                    <th width="100">企业名称</th>
-                    <th width="100">开户银行</th>
-                    <th width="100">银行账号</th>
-                    <th width="100">上传文件</th>
-                    <th width="100">创建时间</th>
-                    <th width="100">状态</th>
-                    <th  ng-if="active=='fail'" width="100">说明描述</th>
-                    <th width="80" ng-if="active=='tobeAudit'">操作</th>
-                </tr>
-                </thead>
-                <tbody>
-                    <tr ng-repeat="info in $data">
-                        <td>{{$index + 1}}</td>
-                        <td ng-bind="::info.accountname"></td>
-                        <td ng-bind="::info.bankname"></td>
-                        <td ng-bind="::info.number"></td>
-                        <td><a target="_blank" ng-href="{{info.attachUrl}}"><span ng-bind="info.attachUrl ? '查看文件' : '没有可查看文件'"></span></a></td>
-                        <td ng-bind="::info.createTime | date : 'yyyy-MM-dd'"></td>
-                        <td ng-bind="::info.status | bankStatusFilter"></td>
-                        <td ng-if="active=='fail'" ng-bind="::info.remark"></td>
-                        <td ng-if="active=='tobeAudit'" class="text-center" style="position: relative;">
-                            <a class="btn btn-sm btn-primary" ng-click="auditPass(info)">审核通过</a>
-                            <a class="btn btn-sm btn-default" ng-click="auditFail(info)">审核未通过</a>
-                            <div class="audit-fail" ng-if="$$auditBankInfo.openDiv">
-                                <div class="title">审核不通过的原因</div>
-                                <div class="content col-md-12">
-                                    <textarea spellcheck="false" ng-model="$$auditBankInfo.reason" placeholder="请输入审核不通过原因" maxlength="100" class="form-control"></textarea>
-                                </div>
-                                <button class="btn btn-sm btn-primary" ng-click="confirm()" ng-disabled="!$$auditBankInfo.reason">确定</button><button class="btn btn-sm btn-default" ng-click="cancle()">取消</button>
-                            </div>
-                        </td>
-                    </tr>
-                    <tr ng-if="$data.length == 0">
-                        <td colspan="10" class="text-center" style="line-height: 40px; font-size: 20px;"><i class="fa fa-smile-o fa-lg"></i> 当前没有对应的银行信息</td>
-                    </tr>
-                </tbody>
-            </table>
         </div>
-        <!-- ng-tableEnd -->
     </div>
-</div>
+    <div class="row">
+        <div class="text-rt col-sm-12">
+            <p class="record-stort">显示1-10条记录,&nbsp;&nbsp;共<em ng-bind="bankInfoTableParams.total()">1000</em>条</p>
+        </div>
+    </div>
+    <!--表格-->
+    <div class="application-tab">
+        <table class="table table-bordered table-hover" ng-table="bankInfoTableParams">
+            <thead>
+            <tr>
+                <th width="80">序号</th>
+                <th width="350">企业名称</th>
+                <th width="350">开户银行</th>
+                <th width="210">银行账号</th>
+                <th width="150">上传文件</th>
+                <th width="120">创建时间</th>
+                <th width="100">状态</th>
+                <th  ng-if="active=='fail'" width="220">说明描述</th>
+                <th width="220" ng-if="active=='tobeAudit'">操作</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr ng-repeat="info in $data">
+                <td>{{$index + 1}}</td>
+                <td ng-bind="::info.accountname"></td>
+                <td ng-bind="::info.bankname"></td>
+                <td ng-bind="::info.number"></td>
+                <td><a target="_blank" ng-href="{{info.attachUrl}}"><span ng-bind="info.attachUrl ? '查看文件' : '没有可查看文件'"></span></a></td>
+                <td ng-bind="::info.createTime | date : 'yyyy-MM-dd'"></td>
+                <td ng-bind="::info.status | bankStatusFilter"></td>
+                <td ng-if="active=='fail'" ng-bind="::info.remark"></td>
+                <td ng-if="active=='tobeAudit'" class="text-center" style="position: relative;">
+                    <a class="btn btn-sm btn-primary" ng-click="auditPass(info)">审核通过</a>
+                    <a class="btn btn-info btn-sm" ng-click="auditFail(info)">审核未通过</a>
+                    <div class="audit-fail" ng-if="$$auditBankInfo.openDiv">
+                        <div class="title">审核不通过的原因</div>
+                        <div class="content col-md-12">
+                            <textarea spellcheck="false" ng-model="$$auditBankInfo.reason" placeholder="请输入审核不通过原因" maxlength="50" class="form-control"></textarea>
+                        </div>
+                        <button class="btn btn-sm btn-primary" ng-click="confirm()" ng-disabled="!$$auditBankInfo.reason">确定</button><button class="btn btn-sm btn-default" ng-click="cancle()">取消</button>
+                    </div>
+                </td>
+            </tr>
+            <tr ng-if="!$data || $data.length <= 0">
+                <td colspan="8">当前没有对应的银行信息</td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+</div>

+ 3 - 3
src/main/webapp/resources/view/admin/logUsage.html

@@ -55,13 +55,13 @@
 			<tbody ng-repeat="logUsage in $data">
 				<tr class="text-center">
 					<td><span ng-bind="logUsage.userUU"></span></td>
-					<td><span ng-bind="logUsage.user.userName"></span></td>
+					<td><span ng-bind="logUsage.userName"></span></td>
 					<td><span ng-bind="logUsage.title"></span></td>
 					<td><span ng-bind="logUsage.message+logUsage.detail"></span></td>
 					<td><span ng-bind="logUsage.time | date:'yyyy-MM-dd HH:mm:ss'"></span></td>
 					<td><span ng-bind="logUsage.ip"></span></td>
-					<td><span ng-bind="logUsage.user.userTel"></span></td>
-					<td><span ng-bind="logUsage.user.userEmail"></span></td>
+					<td><span ng-bind="logUsage.userTel"></span></td>
+					<td><span ng-bind="logUsage.userEmail"></span></td>
 				</tr>
 			</tbody>
 		</table>

+ 11 - 0
src/main/webapp/resources/view/admin/modal/creditCard_modal.html

@@ -69,6 +69,17 @@
 					<span ng-show="myForm.bank.$valid" class="text-success help-inline">正确</span>
 				</div>
 			</div>
+			<div class="row">
+				<label class="col-md-2"><strong class="text-inverse">* </strong>开户支行</label>
+				<div class="col-md-7">
+					<input ng-required="true" ng-model="creditCard.branchname" type="text" class="form-control" name="branch"
+						   placeholder="输入开户银行">
+				</div>
+				<div class="col-md-3">
+					<span ng-show="myForm.bank.$touched&&myForm.branch.$invalid" class="text-inverse help-inline">输入开户银行</span>
+					<span ng-show="myForm.bank.$valid" class="text-success help-inline">正确</span>
+				</div>
+			</div>
 			<div class="row">
 				<label class="col-md-2"><strong class="text-inverse">* </strong>银行账号</label>
 				<div class="col-md-7">

+ 115 - 62
src/main/webapp/resources/view/common/bankInfoModal.html

@@ -1,79 +1,132 @@
 <style>
-.margin15 {
-	margin-left: 15px; 
-	margin-right: 15px;
-	font-size: 15px;
-	font-weight: 500;
-	width: 16%;
-}
+	.margin15 {
+		margin: 0 7px 0 0;
+		font-size: 14px;
+		font-weight: normal;
+		width: 67px;
+	}
 
-.divinline {
-	display: inline-block;
-	width: 50%;
-}
-
-.number-error {
-	line-height: 15px;
-	margin-left: 108px;
-	margin-top: -10px;
-}
-.add-bank-account .select-curency {
-	padding-top: 1em;
-}
+	.divinline {
+		display: inline-block;
+	}
+	.modal-header {
+		padding: 15px 18px;
+		border-bottom: 1px solid #ddd;
+	}
+	.divinline .form-control {
+		opacity: 1;
+		width: 241px;
+		border-radius: 0;
+		position:relative;
+	}
+	.divinline .select-down{
+		float:left;
+		width: 241px;
+		max-height:230px;
+		overflow-y: scroll;
+		border-radius: 3px;
+		border:1px solid #5078cb;
+		position:absolute;
+		background: #fff;
+		top:34px;
+		z-index:1000;
+	}
+	.divinline .select-down li{
+		line-height: 32px;
+		padding:6px;
+		padding-left:12px;
+	}
+	.divinline .select-down li:hover{
+		background: #5078cb;
+		color:#fff;
+		cursor:pointer;
+	}
+	.divinline .select-down li.active{
+		background: #5078cb;
+		color:#fff;
+		cursor:pointer;
+	}
+	.modal-content {
+		width: 482px;
+	}
+	.modal-body .form-group .warn-message {
+		color: #f41b1b;
+		font-size: 12px;
+		margin-left: 10px;
+	}
+	.modal-body .remind-message {
+		width: auto;
+		font-size: 12px;
+		position: relative;
+		left: -15px;
+		bottom: 3px;
+	}
+	.modal-footer {
+		text-align: center;
+		border: none;
+		padding-top: 0;
+	}
+	.modal-footer button {
+		margin-right: 10px;
+	}
 </style>
-<div class="modal-header">
+<div class="modal-header" style="position:relative">
 	<h3 class="modal-title" style="font-weight: 700">{{title}}</h3>
+	<span style="color:#cbcaca;width:10px;height:10px;position:absolute;top:15px;right:15px;"><i class="fa fa-close" style="font-size: 14px;" ng-click="cancel()"></i></span>
 </div>
-<form class="form-horizontal add-bank-account" style="margin-left: 34px;" name="myForm" novalidate>
+<form class="form-horizontal add-bank-account" style="margin-left: 17px;" name="myForm" novalidate>
 	<div class="modal-body">
-		
 			<div class="form-group">
-				<label class="radio-inline margin15" ng-click="set(true)" ng-show="kind">
-					<input type="radio" name="inlineRadioOptions" id="inlineRadio1" value="option1" ng-checked="kind" style="position: relative; vertical-align: sub;"> 个人账户
-				</label>
-				<label class="radio-inline margin15" ng-click="set(false)" ng-show="!kind">
-					<input type="radio" name="inlineRadioOptions" id="inlineRadio2" value="option2" ng-checked="!kind" style="position: relative; vertical-align: sub;"> 企业账户
-				</label>
-			</div>
+		    	<label class="margin15"><b class="text-inverse">*&nbsp;</b>开户银行</label>
+		    	<div class="divinline" style="position:relative;margin-right:25px;">
+					<!--<select class="form-control select-adder">-->
+						<!--<option>请选择开户银行</option>-->
+						<!--<option value="1">1</option>-->
+						<!--<option value="2">2</option>-->
+					<!--</select>-->
+		    		<input name="bankname" ng-model="account.bankname" ng-change="checkAccount(1)" autocomplete="off" type="text" class="form-control" placeholder="请选择开户银行" required style="width:216px;border-right:transparent;border-radius:3px 0 0 3px;" ng-keydown="onKeyUp()" ng-focus="getItemFocus()" ng-blur="onItemBlur()">
+					<i class="select-adder" style="display:inline-block;width:25px;height:34px;border:1px solid #ddd;position:absolute;right:-25px;top:0;border-radius:0 3px 3px 0;border-left:transparent" ng-click="showList()"></i>
+					<ul class="select-down" ng-if="showBankFrame && matchData" id="ulContent">
+						<li ng-click="fitBankToAccount(bank)" ng-repeat="bank in resultList" ng-class="{'active': $index==selectIndex}">{{bank}}</li>
+					</ul>
+		  		</div>
+				<span class="warn-message" ng-if="account.bankname && !matchData">请填写正确的开户银行</span>
+				<span class="warn-message" ng-if="myForm.bankname.$touched && myForm.bankname.$invalid">开户银行不能为空</span>
+		  	</div>
 			<div class="form-group">
-				<label class="margin15" ng-if="kind">开户人名称:</label>
-				<label class="margin15" ng-if="!kind">企业名称:</label>
+				<label class="margin15"><b class="text-inverse">*&nbsp;</b>开户支行</label>
 				<div class="divinline">
-					<input name="accountname" ng-if="kind" ng-model="account.accountname" type="text" class="form-control" placeholder="填写开户人名称" required>
-					<input name="accountname" ng-if="!kind" ng-model="account.accountname" type="text" class="form-control" placeholder="填写开户的企业名称" required>
+					<input name="branchname" type="text" class="form-control" ng-model="account.branchname" ng-change="checkAccount(2)" autocomplete="off"
+						   placeholder="例如:侨香支行" ng-required="true">
 				</div>
+				<span class="warn-message" ng-if="account.branchname && branchPattError">请填写正确的开户支行</span>
+				<span class="warn-message" ng-if="account.branchname && !branchPattError && branchError">请勿超过20个字</span>
+				<span class="warn-message" ng-if="myForm.branchname.$touched && myForm.branchname.$invalid">开户支行不能为空</span>
 			</div>
-			<div class="form-group">
-		    	<label class="margin15">开户银行:</label>
-		    	<div class="divinline">
-		    		<input name="bankname" ng-model="account.bankname" type="text" class="form-control" placeholder="例如:中国工商银行侨香支行" required>
-		  		</div>
-		  	</div>
 		  	<div class="form-group">
-		  		<label class="margin15">银行账号:</label>
+		  		<label class="margin15"><b class="text-inverse">*&nbsp;</b>银行账号</label>
 		  		<div class="divinline">
 		  			<input name="number" ng-model="account.number" type="text" class="form-control" 
-		  			placeholder="" ng-pattern="/^[0-9]*$/" ng-required="true"
-		  			ng-minlength="8" ng-maxlength="30">
+		  			placeholder="请填写银行账号" ng-required="true" ng-change="checkAccount(3)" autocomplete="off">
 		  		</div>
+				<span class="warn-message" ng-if="account.number && numberPattError">请填写正确的银行账号</span>
+				<span class="warn-message" ng-if="account.number && !numberPattError && numberError">请勿超过30个字符</span>
+				<span class="warn-message" ng-if="account.number && !numberPattError && !numberError && repeatError">该银行账号已存在</span>
+				<span class="warn-message" ng-if="myForm.number.$touched && myForm.number.$invalid">银行账号不能为空</span>
 		  	</div>
-		  	<div class="number-error">
-		  		<span ng-show="(myForm.number.$error.pattern||myForm.number.$error.required)&&(myForm.number.$dirty||myForm.number.$touched)" 
-		  			class="text-inverse">请输入正确的的银行账号
-		  		</span>
-		  	</div>
-			<!--<div class="form-group select-curency">-->
-				<!--<label class="margin15">支持币别:</label>-->
-				<!--<div class="divinline">-->
-					<!--<select class="form-control" ng-model="account.currency" style="opacity: 1;">-->
-						<!--<option value="RMB">RMB</option>-->
-						<!--<option value="USD">USD</option>-->
-					<!--</select>-->
-				<!--</div>-->
-			<!--</div>-->
-	</div>
-	<div class="modal-footer">
-		<input class="btn btn-primary" type="submit" ng-disabled="!myForm.$valid" ng-click="confirm()" value="确认" />
-		<button class="btn btn-warning" ng-click="cancel()">取消</button>
+			<div class="form-group">
+				<label class="margin15"><b class="text-inverse">*&nbsp;</b>开户名称</label>
+				<div class="divinline">
+					<input name="accountname" type="text" class="form-control" ng-model="account.accountname"
+						   placeholder="请填写开户人姓名或企业名称" ng-required="true" ng-change="checkAccount(4)" autocomplete="off">
+				</div>
+				<span class="warn-message" ng-if="account.accountname && nameError">请勿超过50个字</span>
+				<span class="warn-message" ng-if="myForm.accountname.$touched && myForm.accountname.$invalid">开户名称不能为空</span>
+			</div>
+		<label class="remind-message"><b class="text-inverse">*&nbsp;</b>为保障您的资金安全,账户信息加密显示且不可修改,只能删除后重新提交。</label>
 	</div>
-</form>
+</form>
+<div class="modal-footer">
+	<button class="com-btn-level1 com-btn-cancel" ng-click="cancel()">取消</button>
+	<input type="submit" class="com-btn-submit com-btn-level1" ng-click="confirm()" value="确定" />
+</div>

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

@@ -115,7 +115,7 @@
 		<div class="rt_menu">
 			<span>您的个人信息</span>
 			<span class="fr" >
-				<button ng-if=" !updateState"  ng-click="changeToUpdate(true)">修改</button>
+				<!--<button ng-if=" !updateState"  ng-click="changeToUpdate(true)">修改</button>-->
 				<button ng-if=" updateState"  ng-click="saveUpdate()">保存</button>
 				<button ng-if="updateState" ng-click="changeToUpdate(false)" style="color: #f00">取消</button>
 			</span>

+ 1 - 0
src/main/webapp/resources/view/usercenter/forstore/buyer_transfer.html

@@ -60,6 +60,7 @@
 						<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>
 					</li>
 				</ul>
 			</div>

+ 276 - 90
src/main/webapp/resources/view/usercenter/forstore/pay_center.html

@@ -224,122 +224,304 @@
 	.tab-dd .col-xs-4 p{
 		font-size: 14px;
 	}
+	#pay_center .tab {
+		background: #fff;
+		padding-bottom: 48px;
+	}
+	#pay_center .tab .user-account-table {
+		width:98%;
+		text-align: center;
+	}
+	#pay_center .tab .user-account-table thead {
+		background: #89aefa;
+	}
+	#pay_center .tab .user-account-table thead tr th {
+		height: 38px;
+		text-align: center;
+		font-size: 14px;
+		color: #fff;
+		font-weight: normal;
+	}
+	#pay_center .tab .user-account-table tbody tr:hover {
+		background: #f1f5ff;
+	}
+	#pay_center .tab .user-account-table tbody tr td {
+		font-size: 14px;
+		color: #666;
+		padding-left: 11px;
+		height: 51px;
+		line-height: 32px;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+		border-left: 1px solid #dae5fd;
+		border-bottom: 1px solid #dae5fd!important;
+	}
+	#pay_center .tab .user-account-table tbody tr td.operate-area {
+		border-right: 1px solid #dae5fd;
+	}
+	#pay_center .tab .user-account-table tbody tr:hover td.operate-area .mall-btn-warn{
+		display: inline-block;
+	}
+	#pay_center .mall-btn-submit {
+		height: 24px;
+		line-height: 24px;
+		background: #5078cb;
+		color: #fff;
+		padding: 0 5px;
+		display: inline-block;
+		margin-left: 10px;
+		cursor: pointer;
+	}
+	#pay_center .mall-btn-warn {
+		display:none;
+		height: 24px;
+		line-height: 24px;
+		background: #fc4f03;
+		color: #fff;
+		padding: 0 5px;
+		margin-left: 10px;
+		cursor: pointer;
+	}
+	#pay_center .tab .tab-header {
+		width: 999px;
+		margin: 0 auto;
+		padding: 31px 0 11px 0;
+	}
+	#pay_center .tab .tab-header >span {
+		font-size: 14px;
+		position: relative;
+		bottom: 5px;
+	}
+	#pay_center .tab .tab-header >div {
+		width: auto;
+		text-align: center;
+		float: right;
+		font-size: 12px;
+		margin-right: 32px;
+		cursor: pointer;
+	}
+	#pay_center .tab .tab-header >div i {
+		background: white;
+		color: #32b500;
+		margin-right: 5px;
+		font-size: 14px;
+	}
+	/*搜索时间筛选*/
+	.screen {
+		background: #f5f8fe;
+		height: 40px;
+		margin-bottom: 15px;
+		margin-top: 5px;
+		padding-top: 4px;
+		padding-right: 11px;
+	}
+	.screen .sreach input{
+		border: #5078cb 1px solid;
+		height: 32px;
+		width: 330px;
+		box-shadow: none;
+	}
+	.screen .sreach .date{
+		margin-right: 6px;
+	}
+	.screen .sreach .date input{
+		width: 117px;
+		text-align: left;
+		border: 1px solid #5078cb;
+	}
+	.screen .sreach .date input:hover{
+		cursor: pointer;
+	}
+	.screen .sreach .date em{
+		float: left;
+		line-height: 32px;
+		color: #999;
+		margin: 0 5px;
+	}
+	.screen .sreach a.seek{
+		width: 58px;
+		height: 32px;
+		background: #5078cb;
+		color: #fff;
+		line-height: 32px;
+		float: none;
+	}
+	.screen .sreach a.seek:hover{
+		background: #3f7ae3;
+	}
+	.screen .sreach .form-control{
+		border-radius: 1px;
+	}
+	.data-input{
+		float: left;
+		position: relative;
+	}
+	.data-input button.open{
+		position: absolute;
+		right: 1px;
+		top: 1px;
+		width: 20px;
+		height: 30px;
+		background: url(static/img/user/images/xiala.png) right no-repeat #fff !important;
+		background-position-x: 100% !important;
+		border: none;
+	}
+	.screen .sreach .date input.form-control{
+		padding: 6px 6px;
+	}
+	.pagination li:last-child a {
+		font-size: 14px;
+	}
+	.pagination li:last-child a {
+		font-size: 12px;
+	}
+	body div.ng-table-pager a.page-a{
+		color:#fff!important;
+	}
+	.pagination>li {
+		display: inline;
+		float: left;
+	}
 </style>
 <!--右侧主体部分-->
 <div class="user_right fr" id="pay_center">
 	<!--支付中心-->
 	<div class="pay_record oder">
-		<div class="user_r_01">
-			<dl>
-				<dt><img src="static/img/user/images/user_photo.png" /></dt>
-				<dd>
-					<span>{{userInfo.userName}}<br/>
-						<!--<em>账户余额:¥<b ng-bind="0"></b></em>-->
-					</span>
-					<a href="user#/accountManager">账户设置&nbsp;》</a>
-				</dd>
-			</dl>
-		</div>
 		<div class="oder01" style="margin-bottom: 16px;">
 			<ul>
-				<li ng-class="{'active' : status=='pay-info'}" ng-click="toggleStatus('pay-info')"><a href="javascript:void(0)">银行账户信息</a></li>
-				<li ng-class="{'active' : status=='pay-history'}" ng-click="toggleStatus('pay-history')"><a href="javascript:void(0)">支付记录</a></li>
-				<li class="new-account" ng-click="editAccount()" style="color: #5078cb;" ng-if="!userInfo.enterprises"><i class="fa fa-plus-circle"></i>&nbsp;&nbsp;新增账户</li>
-			</ul>
-		</div>
-		<div class="oder01" ng-if="status=='pay-info' && userInfo.enterprises" style="margin-bottom: 10px;">
-			<ul>
-				<li ng-class="{'active' : accountStatus=='personal'}" ng-click="toggleAccountStatus('personal')"><a href="javascript:void(0)">个人账户</a></li>
-				<li ng-class="{'active' : accountStatus=='enterprise'}" ng-click="toggleAccountStatus('enterprise')"><a href="javascript:void(0)">企业账户</a></li>
-				<li class="new-account" ng-click="editAccount()" style="color: #5078cb;"><i class="fa fa-plus-circle"></i>&nbsp;&nbsp;新增账户</li>
+				<li ng-class="{'active' : status=='pay-history'}" ng-click="toggleStatus('pay-history')"><a href="javascript:void(0)">交易记录</a></li>
+				<li ng-class="{'active' : status=='pay-info'}" ng-click="toggleStatus('pay-info')"><a href="javascript:void(0)">付款账户</a></li>
 			</ul>
 		</div>
 		<!--支付中心列表-->
 		<div class="ticket_record_list">
 			<!-- 支付信息-->
 			<div class="tab" ng-show="status == 'pay-info'" style="display: inline-block;">
-				<dl class="pay_xq">
-					<dt>
-						<span class="wd01">类型</span>
-						<span>账户</span>
-						<span>账户名</span>
-						<span>其他</span>
-						<span style="width: 14%;">操作</span>
-					</dt>
-					<p class="height16">&nbsp;</p>
-					<dd class="pay_ok" ng-if="accounts.length != 0">
-						<span class="wd01"><em>已绑定</em></span>
-					</dd>
-					<dd ng-repeat="account in accounts" ng-if="accounts.length != 0">
-						<span class="wd01"><img src="static/img/user/images/bank_card.png"/> </span>
-						<span ng-bind="account.number || '空'"></span>
-						<span ng-bind="account.accountname || '空'"></span>
-						<span ng-bind="account.bankname || '空'"></span>
-						<span style="width: 14%;" class="account-operate">
-							<a class="modify" href="javascript:void(0)" ng-click="editAccount(account)">编辑</a>
-							<a class="modify" href="javascript:void(0)" ng-click="deleteAccount(account)">删除</a>
-							<a class="default-set account" href="javascript:void(0)" ng-click="setDefaultAccount(account.id)" ng-if="account.num!=1">设为默认</a>
-							<a href="javascript:void(0)" class="account default-account" ng-if="account.num == 1" class="default-account">默认账户</a>
-						</span>
-					</dd>
-					<dd class="text-center f14" ng-if="accounts.length == 0 && accountStatus=='personal'" style="height: 200px; padding: 35px;">
-						<div class="col-xs-offset-3 col-xs-2">
-							<img src="static/img/all/empty-cart.png">
+				<div class="tab-header">
+					<span>已设置的账户信息</span>
+					<div ng-click="editAccount()" ng-if="$$bankInfo.totalElements < 20">
+						<i class="fa fa-plus-circle"></i>
+						<span>新增账户</span>
+					</div>
+				</div>
+				<table class="user-account-table table" ng-table="bankInfoTableParams" style="table-layout: fixed;margin-bottom:40px;">
+					<thead>
+						<th>开户银行</th>
+						<th >开户支行</th>
+						<th width="80">银行账号</th>
+						<th >开户名称</th>
+						<th width="130">操作</th>
+					</thead>
+					<tbody>
+						<tr ng-repeat="account in accounts">
+							<td ng-bind="account.bankname" title="{{account.bankname}}">中国银行</td>
+							<td ng-bind="account.branchname" title="{{account.branchname}}">南山支行</td>
+							<td ng-bind="account.number | hideBankFilter">1256325*******************5621</td>
+							<td ng-bind="account.accountname" title="{{account.accountname}}">优软*********有限公司</td>
+							<td class="operate-area">
+								<a ng-click="showDeleteFrame(account)">删除</a>
+								<span class="mall-btn-submit" ng-if="account.num == 1">默认账户</span>
+								<span class="mall-btn-warn" ng-click="setDefaultAccount(account.id)" ng-if="account.num != 1">设为默认</span>
+							</td>
+						</tr>
+					</tbody>
+				</table>
+				<div style="text-align: right;margin-right:25px;margin-top:-30px;">
+					<span class="count-tip">显示 {{$$bankInfo.start}}-{{$$bankInfo.end}} 条,共 <em ng-bind="$$bankInfo.totalElements" style="color: #5078cb">2506</em> 条</span>
+				</div>
+				<div class="com-del-box" ng-if="showDelete">
+					<div class="title">
+						<i ng-click="cancelDelete()"></i>
+					</div>
+					<div class="content">
+						<p><i class="fa fa-exclamation-circle"></i>是否要删除此账户信息?</p>
+						<div>
+							<a ng-click="cancelDelete()">取消</a>
+							<a ng-click="deleteAccount()">确认</a>
 						</div>
-						<div class="col-xs-4">
-							<p class="grey" style="font-size: 12px">暂无个人账户信息,请新增账户信息</p>
-						</div>
-					</dd>
-					<dd class="text-center f14" ng-if="accounts.length == 0 && accountStatus=='enterprise'" style="height: 200px; padding: 35px;">
-						<div class="col-xs-offset-3 col-xs-2">
-							<img src="static/img/all/empty-cart.png">
-						</div>
-						<div class="col-xs-4" ng-if="userInfo.enterprises">
-							<p class="grey" style="font-size: 12px">暂无企业账户信息,请新增账户信息</p>
-						</div>
-					</dd>
-					<!--<p class="height16">&nbsp;</p>-->
-					<dd class="pay_style" style="display: none">
-						<span><a href="javascript:void(0)"><b class="pay_icon"><img src="static/img/user/images/bank_card.png"/></b><p>银行卡</p></a></span>
-						<span><a href="javascript:void(0)"><b class="pay_icon"><img src="static/img/user/images/wechat.png"/></b><p>微信</p></a></span>
-						<span><a href="javascript:void(0)"><b class="pay_icon"><img src="static/img/user/images/alipay.png"/></b><p>支付宝</p></a></span>
-						<span><a href="javascript:void(0)"><b class="pay_icon"><img src="static/img/user/images/alipay.png"/></b><p>支付宝</p></a></span>
-						<span><a href="javascript:void(0)"><b class="pay_icon"><img src="static/img/user/images/other_pay.png"/></b><p>更多支付方式</p></a></span>
-					</dd>
-				</dl>
+					</div>
+				</div>
 			</div>
 			<!--支付记录-->
 			<div class="tab" ng-show="status == 'pay-history'" style="display: inline-block">
-				<!--<div class="screen">-->
-					<!--<div class="screen_time fl" hidden="hidden">-->
-						<!--<span>付款时间</span>-->
-						<!--<input type="search" placeholder="2016-05-01" class="timeStart" ng-model="timeStart">-->
-						<!-- - -->
-						<!--<input type="search" placeholder="2016-05-31" class="timeEnd" ng-model="timeEnd">-->
-					<!--</div>-->
-				<!--</div>-->
+				<!--搜索时间筛选-->
+				<div class="screen">
+					<div class="sreach fr">
+						<div class="date fl">
+							<div class="data-input">
+								<input id="start" type="text" ng-model="startDate" readonly="readonly"
+									   class="form-control select-adder" placeholder="起始时间"
+									   datepicker-popup="yyyy-MM-dd"
+									   is-open="condition[0].open"
+									   current-text="今天" clear-text="清除" close-text="关闭"
+									   datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+									   ng-click="openDatePicker($event, condition, 0,1)"
+									   ng-change="onDateCondition(1)"/>
+								<button class="open" ng-click="openDatePicker($event, condition, 0)"></button>
+							</div>
+
+							<em>–</em>
+							<div class="data-input">
+								<input id="end" type="text" ng-model="endDate" readonly="readonly"
+									   class="form-control select-adder" placeholder="结束时间"
+									   datepicker-popup="yyyy-MM-dd"
+									   is-open="condition[1].open"
+									   current-text="今天" clear-text="清除" close-text="关闭"
+									   datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+									   ng-click="openDatePicker($event, condition, 1, 2)"
+									   ng-change="onDateCondition(2)"/>
+								<button class="open" ng-click="openDatePicker($event, condition, 1)"></button>
+							</div>
+						</div>
+						<div class="sreach-input fr">
+							<input type="search" placeholder="商家名称/订单号" class="form-control" ng-model="keyword" ng-search="search()"/>
+							<a class="seek" ng-click="search()">搜索</a>
+							<a class="seek" ng-click="exportToExcel()" style="margin-left: 5px;">导出</a>
+						</div>
+					</div>
+				</div>
 				<dl>
 					<dt>
 						<span>时间</span>
 						<span>订单号</span>
+						<span>商家名称</span>
+						<span>
+							<select class="form-control select-adder" ng-model="currency" ng-change="filterLoad()">
+								<option value="ALL">币种</option>
+								<option value="RMB">RMB</option>
+								<option value="USD">USD</option>
+							</select>
+						</span>
 						<span>金额</span>
-						<span>方式</span>
-						<span>账号</span>
-						<span>状态</span>
+						<span>
+							<select class="form-control select-adder" style="width: 90px" ng-model="paytype" ng-change="filterLoad()">
+								<option value="ALL">交易方式</option>
+								<option value="1102">线上支付</option>
+								<option value="1103">线下支付</option>
+							</select>
+						</span>
+						<span>
+							<select class="form-control select-adder" style="width: 90px">
+								<option>状态</option>
+								<option value="1">支付成功</option>
+							</select>
+						</span>
 					</dt>
-					<p class="height16">&nbsp;</p>
-					<dd ng-repeat="tradeRecord in tradeRecordPage.content">
-						<span ng-bind="tradeRecord.paytime | date : 'yyyy.MM.dd'">2017.01.18</span>
+					<dd ng-repeat="tradeRecord in tradeRecordPage">
+						<span ng-bind="tradeRecord.paytime | date : 'yyyy-MM-dd HH:mm:ss'">2017.01.18</span>
 						<span><a ng-bind="tradeRecord.orderid" ng-href="user#/order/detail/{{tradeRecord.orderid | EncryptionFilter}}">20170116001</a></span>
-						<span ng-bind="tradeRecord.ensurePrice | formateNumber : 2 | currencySysmbol : tradeRecord.currencyName"></span>
+						<span ng-bind="tradeRecord.sellername">优软科技</span>
+						<span ng-bind="tradeRecord.currencyName"></span>
+						<span style="text-align:left;padding-left:5px;">
+							<!--<i class="fa fa-plus" style="color:#f51c24"></i>-->
+							<i class="fa fa-minus" style="color:#1da902"></i>
+                            <em style="color: #323232;" ng-bind="tradeRecord.ensurePrice | formateNumber : 2"></em></span>
+						</span>
 						<span>
 							<b ng-if="tradeRecord.paytype == 1102">线上支付</b>
 							<b ng-if="tradeRecord.paytype == 1103">线下支付</b>
 						</span>
-						<span>
-							<b ng-if="tradeRecord.paytype == 1102">优软商城线上账户</b>
-							<b ng-if="tradeRecord.paytype == 1103">优软商城线下账户</b>
-						</span>
 						<span><b>支付成功</b></span>
 					</dd>
 					<!--<dd>
@@ -350,7 +532,7 @@
 						<span>12345678909</span>
 						<span><em>退款成功</em></span>
 					</dd>-->
-					<dd ng-if="!tradeRecordPage.content || tradeRecordPage.content.length == 0" class="tab-dd" style="height: 125px; padding: 30px;">
+					<dd ng-if="!tradeRecordPage || tradeRecordPage.length == 0" class="tab-dd" style="height: 125px; padding: 30px;">
 						<div class="col-xs-offset-3 col-xs-2">
 							<img src="static/img/all/empty-cart.png">
 						</div>
@@ -359,7 +541,11 @@
 							<a href=".">马上去逛一逛</a>&nbsp;<i class="fa fa-arrow-right"></i>
 						</div>
 					</dd>
+
 				</dl>
+				<div style="text-align: right;margin-right:20px;margin-top:10px;">
+					<span class="count-tip">显示 {{$$record.start}}-{{$$record.end}} 条,共 <em ng-bind="$$record.totalElements" style="color: #5078cb">2506</em> 条</span>
+				</div>
                 <!--<p class="height16">&nbsp</p>-->
                 <div style="background-color: white; width: 100%; height: 75px;">
                     <div class="ng-cloak ng-table-pager" ng-if="pages.length" style="float: right;margin-right: 60px;">
@@ -370,7 +556,7 @@
                                 <a ng-switch-when="page" ng-click="setPage(page.type, page.number)" href=""><span ng-bind="page.number"></span></a>
                                 <a ng-switch-when="more" ng-click="setPage(page.type, -1)" href="">&#8230;</a>
                                 <a ng-switch-when="last" ng-click="setPage(page.type, page.number)" href=""><span ng-bind="page.number"></span></a>
-                                <a ng-switch-when="next" ng-click="setPage(page.type, -1)" href="">&raquo;</a>
+                                <a ng-switch-when="next" ng-click="setPage(page.type, -1)" href="" style="font-size: 12px;">&raquo;</a>
                             </li>
                         </ul>
                         <div class="page-go-block">

+ 520 - 244
src/main/webapp/resources/view/vendor/forstore/pay_center.html

@@ -266,7 +266,7 @@
         cursor: not-allowed;
     }
 
-     <!-- 分页的样式 start-->
+     /*<!-- 分页的样式 start -->*/
     ul.pagination.ng-table-pagination > li > a > span {
         height: 17px;
         line-height: 17px;
@@ -352,9 +352,7 @@
     .colorRed{
         color: #f00;
         font-size: 12px;
-    }
-    .col-md-2{
-        padding-right: 0;
+        margin-right:5px;
     }
 
     .pay_record .ticket_record_list .tab {
@@ -365,199 +363,423 @@
         text-overflow: ellipsis;
         white-space: nowrap;
     }
-    <!-- 分页的样式 end-->
+    /*<!-- 分页的样式end -->*/
+     /*搜索时间筛选*/
+      .screen {
+
+     }
+    .screen .sreach input{
+        border: #5078cb 1px solid;
+        height: 32px;
+        width: 330px;
+        box-shadow: none;
+    }
+    .screen .sreach .date{
+        margin-right: 6px;
+    }
+    .screen .sreach .date input{
+        width: 117px;
+        text-align: left;
+        border: 1px solid #5078cb;
+    }
+    .screen .sreach .date input:hover{
+        cursor: pointer;
+    }
+    .screen .sreach .date em{
+        float: left;
+        line-height: 32px;
+        color: #999;
+        margin: 0 5px;
+    }
+    .screen .sreach a.seek{
+        width: 58px;
+        height: 32px;
+        background: #5078cb;
+        color: #fff;
+        line-height: 32px;
+        float: none;
+    }
+    .screen .sreach a.seek:hover{
+        background: #3f7ae3;
+    }
+    .screen .sreach .form-control{
+        border-radius: 1px;
+    }
+    .data-input{
+        float: left;
+        position: relative;
+    }
+    .data-input button.open{
+        position: absolute;
+        right: 1px;
+        top: 1px;
+        width: 20px;
+        height: 30px;
+        background: url('static/img/user/images/xiala.png') right no-repeat #fff !important;
+        background-position-x: 100% !important;
+        border: none;
+    }
+    .screen .sreach .date input.form-control{
+        padding: 6px 6px;
+    }
+
+    .pay_record .ticket_record_list dl span{
+        overflow: hidden;
+        white-space: nowrap;
+        text-overflow: ellipsis;
+        /*width: 14.27%!important;*/
+
+    }
+    .pay_record .ticket_record_list dl span:nth-child(1){
+        width:17.03%;
+    }
+    .pay_record .ticket_record_list dl span:nth-child(2){
+        width:15.73%;
+    }
+    .pay_record .ticket_record_list dl span:nth-child(3){
+        width:23.84%;
+    }
+    .pay_record .ticket_record_list dl span:nth-child(4){
+        width:8%;
+    }
+    .pay_record .ticket_record_list dl span:nth-child(5){
+        width:9.65%;
+    }
+    .pay_record .ticket_record_list dl span:nth-child(6){
+        width:12.12%;
+    }
+    .pay_record .ticket_record_list dl span:nth-child(7){
+        width:13.52%;
+    }
+    .pay_record .ticket_record_list dl span .select-adder {
+        opacity: 1;
+        width: 64px;
+        border-radius: 0;
+        height: 24px;
+        padding: 0 0 0 10px;
+        text-align: center;
+        margin: 0 auto;
+        margin-top: 7px;
+    }
+    .pay_record .ticket_record_list dl dt span {
+        color: #fff;
+        font-weight: normal;
+        font-size: 14px;
+        background: #89aefa;
+        text-overflow: ellipsis;
+        white-space:nowrap;
+        overflow: hidden;
+    }
+    .pay_record .ticket_record_list dl dd:hover {
+        background: #f1f5ff;
+    }
+    .pay_record .ticket_record_list dl dd span:first-child{
+        border-left: 1px solid #dae5fd;
+    }
+    .pay_record .ticket_record_list dl dd span {
+        color: #666;
+        border-right: 1px solid #dae5fd;
+        border-bottom: 1px solid #dae5fd;
+    }
+    .ticket_record_list{
+        background: none;
+    }
+    .pay_record .ticket_record_list .total{
+        width:98%;
+        height:39px;
+        background: #e6eefe;
+        display:inline-flex;
+        justify-content: space-around;
+        align-items: center;
+        margin:0 10px;
+    }
+    .pay_record .ticket_record_list dl div.total>span{
+        width:200px;
+    }
+    .pay_record .ticket_record_list dl div.total>span:nth-child(1) em{
+        color:#f51c24;
+    }
+    .pay_record .ticket_record_list dl div.total>span:nth-child(3) em{
+        color:#1da902;
+    }
+    .pay_record .ticket_record_list dl div.total>span:last-child{
+        font-weight:bold;
+    }
+    .pay_record .ticket_record_list dl div.total>span:last-child em{
+        font-size:12px;
+    }
+    .pay_record .ticket_record_list dl div.total>b{
+        color:#abc4f7;
+    }
+
+
+    #pay_center .tab .tab-header {
+        width: 999px;
+        margin: 0 auto;
+        padding: 31px 0 11px 0;
+    }
+    #pay_center .tab .tab-header >span {
+        font-size: 14px;
+        position: relative;
+        bottom: 5px;
+    }
+    #pay_center .tab .tab-header >div {
+        width: auto;
+        text-align: center;
+        float: right;
+        font-size: 12px;
+        margin-right: 32px;
+        cursor: pointer;
+    }
+    #pay_center .tab .tab-header >div i {
+        background: white;
+        color: #32b500;
+        margin-right: 5px;
+        font-size: 14px;
+    }
+
+    #pay_center .tab {
+        background: #fff;
+        padding-bottom: 48px;
+    }
+    #pay_center .tab .user-account-table {
+        width: 98%;
+        text-align: center;
+        margin: 0 auto;
+    }
+    #pay_center .tab .user-account-table thead {
+        background: #89aefa;
+    }
+    #pay_center .tab .user-account-table thead tr th {
+        height: 38px;
+        text-align: center;
+        font-size: 14px;
+        color: #fff;
+        font-weight: normal;
+    }
+    #pay_center .tab .user-account-table tbody tr:hover {
+        background: #f1f5ff;
+    }
+    #pay_center .tab .user-account-table tbody tr td {
+        font-size: 14px;
+        color: #666;
+        height: 51px;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        border-left: 1px solid #dae5fd;
+        border-bottom: 1px solid #dae5fd!important;
+    }
+    #pay_center .tab .user-account-table tbody tr td.operate-area {
+        border-right: 1px solid #dae5fd;
+        color:#5f82cf;
+        text-align: center;
+    }
+
+    .wcz-title{
+        position:relative;
+    }
+    .wcz-title:hover b{
+        display:block;
+    }
+    .wcz-title>b{
+        display:none;
+        width:130px;
+        padding:5px;
+        font-size: 12px;
+        line-height:15px;
+        color:#666;
+        position:absolute;
+        top:3px;
+        left:20px;
+        z-index:10000;
+        background: #fff;
+        border:1px solid #89aefa;
+    }
+    .ng-table-pager .ng-table-pagination a {
+        color:#fff;
+    }
+    div.ng-table-pager a.page-a{
+        color:#fff!important;
+    }
 </style>
 <!--右侧主体部分-->
 <div class="user_right fr" id="pay_center">
     <!--支付中心-->
     <div class="pay_record oder">
-        <div class="user_r_01">
-            <dl>
-                <dt><img src="static/img/user/images/user_photo.png" /></dt>
-                <dd>
-					<span>{{userInfo.enterprise.enName}}<br/>
-                        <!--<em>账户余额:¥<b ng-bind="0"></b></em>-->
-					</span>
-                    <a href="vendor#/account/management">账户设置&nbsp;》</a>
-                </dd>
-            </dl>
-        </div>
         <div class="oder01">
             <ul>
-                <li class="active"><a href="javascript:void(0)">收款账户信息</a></li>
-            </ul>
-        </div>
-        <div class="oder01">
-            <ul>
-                <li ng-click="setTab('accountTab')" ng-class="{'active' : $payCenter.tab == 'accountTab'}"><a href="javascript:void(0)">收款账户信息</a></li>
-                <li ng-click="setTab('accountHis')" ng-class="{'active' : $payCenter.tab == 'accountHis'}"><a href="javascript:void(0)">账户申请记录</a></li>
-                <li ng-click="setTab('paymentRecode')" ng-class="{'active' : $payCenter.tab == 'paymentRecode'}"><a href="javascript:void(0)">收款记录</a></li>
-                <li ng-if="$payCenter.tab == 'accountTab'" class="new-account" ng-click="newAccount()"><a ng-disabled="bankInfos.length > 0" ><i class="fa fa-plus-circle"></i>&nbsp;新增账户</a></li>
+                <li ng-click="setTab('paymentRecord')" ng-class="{'active' : tab == 'paymentRecord'}"><a href="javascript:void(0)">交易记录</a></li>
+                <li ng-click="setTab('accountTab')" ng-class="{'active' : tab == 'accountTab'}"><a href="javascript:void(0)">收款帐户</a></li>
             </ul>
         </div>
         <!--支付中心列表-->
         <div class="ticket_record_list">
-            <!-- 收款账户信息-->
-            <div class="tab" ng-if="$payCenter.tab == 'accountTab'">
-                <dl class="pay_xq">
+            <!-- 交易记录-->
+            <div class="tab" ng-show="tab == 'paymentRecord'" style="display: inline-block">
+                <!--搜索时间筛选-->
+                <div class="screen" style="background: #f5f8fe;height: 40px;margin-bottom: 15px;margin-top: 5px;padding-top: 4px;padding-right: 11px;">
+                    <div class="sreach fr">
+                        <div class="date fl">
+                            <div class="data-input">
+                                <input id="start" type="text" ng-model="startDate" readonly="readonly"
+                                       class="form-control select-adder" placeholder="起始时间"
+                                       datepicker-popup="yyyy-MM-dd"
+                                       is-open="condition[0].open"
+                                       current-text="今天" clear-text="清除" close-text="关闭"
+                                       datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+                                       ng-click="openDatePicker($event, condition, 0,1)"
+                                       ng-change="onDateCondition(1)"/>
+                                <button class="open" ng-click="openDatePicker($event, condition, 0)"></button>
+                            </div>
+
+                            <em>–</em>
+                            <div class="data-input">
+                                <input id="end" type="text" ng-model="endDate" readonly="readonly"
+                                       class="form-control select-adder" placeholder="结束时间"
+                                       datepicker-popup="yyyy-MM-dd"
+                                       is-open="condition[1].open"
+                                       current-text="今天" clear-text="清除" close-text="关闭"
+                                       datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+                                       ng-click="openDatePicker($event, condition, 1, 2)"
+                                       ng-change="onDateCondition(2)"/>
+                                <button class="open" ng-click="openDatePicker($event, condition, 1)"></button>
+                            </div>
+                        </div>
+                        <div class="sreach-input fr">
+                            <input type="search" placeholder="商家名称/订单号" class="form-control" ng-model="keyword" ng-search="search()"/>
+                            <a class="seek" href="javascript:void(0)" ng-click="search()">搜索</a>
+                            <a class="seek" href="javascript:void(0)" style="margin-left: 5px;" ng-click="exportToExcel()">导出</a>
+                        </div>
+                    </div>
+                </div>
+
+                <dl>
                     <dt>
-                        <span class="wd01">类型</span>
-                        <span>账户</span>
-                        <span>账户名</span>
-                        <span>其他</span>
-                        <span style="width: 14%;">操作</span>
-                    </dt>
-                    <p class="height16">&nbsp;</p>
-                    <dd class="pay_ok" ng-if="bankInfos.length != 0">
-                        <span class="wd01"><em>已绑定</em></span>
-                    </dd>
-                    <dd ng-repeat="info in bankInfos">
-                        <span class="wd01"><img src="static/img/user/images/bank_card.png" class="img"/> </span>
-                        <span ng-bind="info.number | hideBankFilter"></span>
-                        <span ng-bind="info.accountname"></span>
-                        <span ng-bind="info.bankname"></span>
-                        <span style="width: 14%;" class="account-operate">
-							<a class="modify" href="javascript:void(0)" ng-click="deleteAccount(info)">删除</a>
+                        <span>时间</span>
+                        <span>订单号</span>
+                        <span>买家名称</span>
+                        <span>币种</span>
+                        <span>金额</span>
+                        <span>
+							<select class="form-control select-adder" style="width: 90px">
+								<option>交易方式</option>
+								<option value="1">线下支付</option>
+							</select>
+						</span>
+                        <span style="width:13.52%">
+							<select class="form-control select-adder" style="width: 90px">
+								<option>状态</option>
+								<option value="1">收款成功</option>
+							</select>
 						</span>
+                    </dt>
+                    <dd ng-repeat="record in bankTransRecore">
+                        <span ng-bind="record.transferTime | date : 'yyyy-MM-dd HH:mm:ss'">2017.01.18</span>
+                        <span><a style="color: #666;" ng-bind="record.orderid" ng-href="vendor#/purchase/detail/{{record.puid | EncryptionFilter}}">20170116001</a></span>
+                        <span ng-bind="record.buyerentername || record.buyername">优软科技</span>
+                        <span ng-bind="record.currencyName">RMB</span>
+                        <span style="text-align:left;padding-left:5px;">
+                            <i class="fa fa-plus" style="color:#f51c24"></i>
+                            <!--<i class="fa fa-minus" style="color:#1da902"></i>-->
+                            {{record.total}}</span>
+                        <span>线下付款</span>
+                        <span>收款成功</span>
                     </dd>
-                    <dd class="text-center f14" ng-if="bankInfos.length == 0">
+                    <div class="total" ng-if="bankTransRecore && bankTransRecore.length > 0">
+                        <span>收入总计&nbsp;  <em><i class="fa fa-yen" ng-if="currencySymbol.indexOf('RMB') > -1"></i>
+                            <i class="fa fa-usd" ng-if="currencySymbol.indexOf('USD') > -1"></i>{{totalPrice}}</em></span>
+                        <b>|</b>
+                        <span>支出总计&nbsp;  <em><i class="fa fa-yen" ng-if="currencySymbol.indexOf('RMB') > -1"></i>
+                            <i class="fa fa-usd" ng-if="currencySymbol.indexOf('USD') > -1"></i>0</em></span>
+                        <b>|</b>
+                        <span>结余&nbsp;<em><i class="fa fa-yen" ng-if="currencySymbol.indexOf('RMB') > -1"></i>
+                            <i class="fa fa-usd" ng-if="currencySymbol.indexOf('USD') > -1"></i>{{totalPrice}}(共计{{totalElements}}笔交易)</em></span>
+                    </div>
+
+                    <dd ng-if="!bankTransRecore || bankTransRecore.length == 0" class="tab-dd" style="height: 125px; padding: 30px;">
                         <div class="col-xs-offset-3 col-xs-2">
                             <img src="static/img/all/empty-cart.png">
                         </div>
                         <div class="col-xs-4">
-                            <p class="grey f16" style="font-size: 12px">暂无个人账户信息,请新增账户信息</p>
+                            <p class="grey" style="font-size: 12px">暂无收款记录</p>
+                            <a href=".">马上去逛一逛</a>&nbsp;<i class="fa fa-arrow-right"></i>
                         </div>
                     </dd>
                 </dl>
-                <div class="beizhu row" ng-if="bankInfos.length != 0">
-                    <div class="col-md-1" style="color: #f00;">*声明:</div>
-                    <div class="col-md-11">
-                        1. 此账户为卖家收款账户,请仔细核对信息内容,若由信息错误造成的损失,优软商城不承担赔偿责任。<br/>
-                        2. 如您的企业名称、开户银行及账号变更,您须在优软商城开展资金结算前进行更正,否则发生转账错误优软商城不承担赔偿责任。<br/>
-                        3. 更多的条款请阅读<a href="help/helpDetail/51" target="_blank">《优软商城代收代付协议》</a> 。
+                <p style="text-align:right;margin-right:28px;margin-top:10px;margin-bottom:20px;" ng-if="bankTransRecore && bankTransRecore.length > 0">显示{{$$transfer.start}}-{{$$transfer.end}} 条,共 {{totalElements}} 条</p>
+                <div style="background-color: white; width: 100%; height: 75px;">
+                    <div class="ng-cloak ng-table-pager" ng-if="pages.length" style="float: right;margin-right: 60px;">
+                        <ul class="pagination ng-table-pagination">
+                            <li ng-class="{'disabled': !page.active && !page.current, 'active': page.current}" ng-repeat="page in pages" ng-switch="page.type">
+                                <a ng-switch-when="prev" ng-click="setPage(page.type, -1)" href="">&laquo;</a>
+                                <a ng-switch-when="first" ng-click="setPage(page.type, page.number)" href=""><span ng-bind="page.number"></span></a>
+                                <a ng-switch-when="page" ng-click="setPage(page.type, page.number)" href=""><span ng-bind="page.number"></span></a>
+                                <a ng-switch-when="more" ng-click="setPage(page.type, -1)" href="">&#8230;</a>
+                                <a ng-switch-when="last" ng-click="setPage(page.type, page.number)" href=""><span ng-bind="page.number"></span></a>
+                                <a ng-switch-when="next" ng-click="setPage(page.type, -1)" href="">&raquo;</a>
+                            </li>
+                        </ul>
+                        <div class="page-go-block">
+                            <input class="page-number" type="text" ng-model="tradeRecordPage.number" ng-keydown="listenEnter()"/>
+                            <a class="page-a" ng-click="setPage('page', tradeRecordPage.number)" href="">GO</a>
+                        </div>
                     </div>
                 </div>
             </div>
-            <!-- 账户申请记录-->
-            <div class="tab" ng-if="$payCenter.tab == 'accountHis'">
-                <table class="count-tab table">
-                    <thead>
-                        <tr>
-                            <th width="70">序号</th>
-                            <th width="80">类型</th>
-                            <th width="150">账户</th>
-                            <th width="250">账户名</th>
-                            <th width="150">其他</th>
-                            <th width="100">申请时间</th>
-                            <th width="100">状态</th>
-                            <th width="100">原因</th>
-                        </tr>
-                    </thead>
-                    <tbody>
-                        <tr>
-                            <td colspan="8" class="hei16"></td>
-                        </tr>
-                    </tbody>
-                    <tbody ng-if="bankInfos.length != 0">
-                        <tr ng-repeat="info in bankInfos" ng-class="{'color999' : info.status == 112}">
-                            <td ng-bind="$index + 1" style="color: #323232;"></td>
-                            <td><img src="static/img/user/images/bank_card.png" class="img"/></td>
-                            <td ng-bind="::info.number | hideBankFilter"></td>
-                            <td ng-bind="::info.accountname"></td>
-                            <td ng-bind="::info.bankname"></td>
-                            <td ng-bind="::info.createTime | date : 'yyyy-MM-dd'"></td>
-                            <td ng-bind="::info.status | bankStatusFilter" ng-class="{'red': info.status == 103}"></td>
-                            <td class="f12" ng-bind="::info.remark || '-'"></td>
-                        </tr>
-                    </tbody>
-                    <!--<tbody ng-if="bankInfos.length == 0">
-                        <tr style="height: 190px;">
-                            <td colspan="8" style="  height: 239px;">
-                                <div class="text-center">
-                                    <div class="col-xs-offset-3 col-xs-2">
-                                        <img src="static/img/all/empty-cart.png">
-                                    </div>
-                                    <div class="col-xs-4 text-info">
-                                        <p class="grey f16" style="line-height: 80px; font-size: 12px;">暂无账户申请记录,请新增账户信息</p>
-                                    </div>
-                                </div>
-                            </td>
-                        </tr>
-                    </tbody>-->
-                    <tbody class="no-record-list" ng-if="bankInfos.length == 0">
-                        <tr class="height200">
-                            <td colspan="10"><img src="static/img/all/empty-cart.png"><span>暂无账户申请记录,请新增账户信息!</span></td>
-                        </tr>
-                    </tbody>
-                </table>
-            </div>
-            <!-- 收款记录-->
-            <div class="tab" ng-if="$payCenter.tab == 'paymentRecode'">
-                <table class="count-tab table">
+            <!-- 收款账户-->
+            <div class="tab" ng-show="tab == 'accountTab'" style="display: inline-block;">
+                <div class="tab-header">
+                    <span>已设置的账户信息</span>
+                    <div ng-click="newAccount()" ng-if="$$bankInfo.totalElements < 20">
+                        <i class="fa fa-plus-circle"></i>
+                        <span>新增账户</span>
+                    </div>
+                </div>
+                <table class="user-account-table table" ng-table="bankInfoTableParams" style="margin-bottom:45px;table-layout: fixed">
                     <thead>
                     <tr>
-                        <th width="70">序号</th>
-                        <th width="150">时间</th>
-                        <th width="250">订单号</th>
-                        <th width="150">金额</th>
-                        <th width="100">方式</th>
-                        <th width="160">收款账号</th>
-                        <th width="100">状态</th>
+                        <th >开户银行</th>
+                        <th >开户支行</th>
+                        <th width="80">银行账号</th>
+                        <th >开户名称</th>
+                        <th width="80">状态</th>
+                        <th width="120">操作</th>
                     </tr>
                     </thead>
                     <tbody>
-                        <tr>
-                            <td colspan="8" class="hei16"></td>
-                        </tr>
-                    </tbody>
-                    <tbody>
-                        <tr ng-repeat="bankInfo in bankTransRecode">
-                            <td>{{$index + 1}}</td>
-                            <td>
-                                <span ng-bind="::bankInfo.tranferCreateTime | date : 'yyyy-MM-dd'"></span><br/>
-                                <span class="color666" style="margin-right: 23px;" ng-bind="::bankInfo.tranferCreateTime | date : 'HH:mm:ss'"></span>
-                            </td>
-                            <td><a ng-click="goToPurchaseDetail(bankInfo.bankTransAssociate.btaTableserNum)">{{bankInfo.bankTransAssociate.btaTableserNum}}</a></td>
-                            <td ng-bind="::bankInfo.total | currencySysmbol : bankInfo.currencyName"></td>
-                            <td>银行转账</td>
-                            <td ng-bind="::bankInfo.jsonReceive.number | hideBankFilter"></td>
-                            <td>收款成功</td>
-                        </tr>
-                    </tbody>
-                    <tbody class="no-record-list" ng-if="bankTransRecode.length == 0">
-                        <tr class="height200">
-                            <td colspan="10"><img src="static/img/all/empty-cart.png"><span>暂无收款记录!</span></td>
-                        </tr>
-                    </tbody>
-                    <!--<tbody>
-                        <tr style="height: 190px;" ng-if="bankTransRecode.length == 0">
-                            <td colspan="8">
-                                <div class="text-center">
-                                    <div class="col-xs-2 col-xs-offset-3 info-img" style="margin-left: 18%;">
-                                        <img src="static/img/all/empty-cart.png">
-                                    </div>
-                                    <div class="col-xs-4">
-                                        <p class="grey f16" style="font-size: 12px">暂无收款记录</p>
-                                    </div>
-                                </div>
-                            </td>
-                        </tr>
-                    </tbody>-->
+                    <tr ng-repeat="account in accounts">
+                        <td ng-bind="account.bankname" title="{{account.bankname}}">中国银行</td>
+                        <td ng-bind="account.branchname" title="{{account.branchname}}">南山支行</td>
+                        <td ng-bind="account.number | hideBankFilter">1256325*******************5621</td>
+                        <td ng-bind="account.accountname" title="{{account.accountname}}">优软*********有限公司</td>
+                        <td style="overflow: visible;white-space: normal;text-align:left;">
+                            <span ng-bind="account.status | bankStatusFilter"></span>
+                            <span class="wcz-title" ng-if="account.status == 103 || account.status == 101">
+                                <i class="fa fa-exclamation-circle"></i>
+                                <b ng-if="account.status == 101">审核通过后,原账户将自动失效</b>
+                                <b ng-if="account.status == 103" ng-bind="account.remark"></b>
+                            </span>
+
+                        </td>
+                        <td class="operate-area">
+                            <span><a ng-click="reuseAccount(account)" ng-if="account.status == 105">重新使用 |</a></span>
+                            <span ng-click="deleteAccount(account)"><a href="#">删除</a></span>
+                        </td>
+                    </tr>
                 </table>
-                <div class="ng-cloak ng-table-pager" ng-if="pages.length" style="float: right;margin-right: 60px;">
-                    <ul class="pagination ng-table-pagination">
-                        <li ng-class="{'disabled': !page.active && !page.current, 'active': page.current}" ng-repeat="page in pages" ng-switch="page.type">
-                            <a ng-switch-when="prev" ng-click="setPage(page.type, -1)" href="">&laquo;</a>
-                            <a ng-switch-when="first" ng-click="setPage(page.type, page.number)" href=""><span ng-bind="page.number"></span></a>
-                            <a ng-switch-when="page" ng-click="setPage(page.type, page.number)" href=""><span ng-bind="page.number"></span></a>
-                            <a ng-switch-when="more" ng-click="setPage(page.type, -1)" href="">&#8230;</a>
-                            <a ng-switch-when="last" ng-click="setPage(page.type, page.number)" href=""><span ng-bind="page.number"></span></a>
-                            <a ng-switch-when="next" ng-click="setPage(page.type, -1)" href="">&raquo;</a>
-                        </li>
-                    </ul>
-                    <div class="page-go-block">
-                        <input class="page-number" type="number" ng-model="param.currentPage" ng-keydown="listenEnter()"/>
-                        <a class="page-a" ng-click="setPage('page', param.currentPage)" href="">GO</a>
+                <p style="text-align:right;margin-right:28px;margin-top:-35px;">显示{{$$bankInfo.start}}-{{$$bankInfo.end}} 条,共 {{$$bankInfo.totalElements}}条</p>
+                <div class="com-del-box" ng-if="showReuseFrame">
+                    <div class="title">
+                        <a ng-click="cancelReuse()"><i class="fa fa-close fa-lg"></i></a>
+                    </div>
+                    <div class="content">
+                        <!--<p><i class="fa fa-exclamation-circle"></i>是否要删除此账户信息?</p>-->
+                        <p style="width:80%;line-height:20px;margin: 15px;margin-left: 30px;"><i class="fa fa-exclamation-circle"></i>此操作会让使用中的收款账户失效,是否确定重新使用?</p>
+                        <div>
+                            <a ng-click="cancelReuse()">取消</a>
+                            <a ng-click="ensureReuse()">确认</a>
+                        </div>
                     </div>
                 </div>
             </div>
@@ -565,75 +787,100 @@
     </div>
 </div>
 <!--模态框-->
-<div class="view-box" ng-if="$payCenter.newAccount">
+<div class="view-box" ng-if="showAddFrame">
     <div class="box">
         <div class="add-count">
-            <h2>新增账户</h2>
-            <div class="row" style="height: 20px; margin-top: 10px;">
-                <label class="radio-inline margin15">
-                    <input type="radio" ng-checked="true" name="inlineRadioOptions" id="inlineRadio1" value="option1" style="position: relative; vertical-align: sub;"> 企业账户
-                </label>
-            </div>
-            <div class="row">
-                <div class="col-md-2"><em class="colorRed">*</em>企业名称:</div>
-                <div class="col-md-8">
-                    <input ng-model="bankInfo.accountname" maxlength="30" ng-change="validateName(bankInfo.accountname, 1)" class="form-control" type="text" placeholder="例如:优软商城科技有限公司" required>
+            <h2>新增账户信息</h2>
+            <span style="color:#cbcaca;width:10px;height:10px;position:absolute;top:15px;right:15px;"><i class="fa fa-close" ng-click="cancelAdd()"></i></span>
+            <form name="myForm">
+                <div class="row">
+                    <div class="col-md-3"><em class="colorRed">*</em>开户银行</div>
+                    <div class="col-md-5" style="position:relative;">
+                        <input name="bankname" ng-keydown="onKeyUp()" ng-model="account.bankname" ng-change="checkAccount(1)" class="form-control" autocomplete="off" type="text" placeholder="例如:中国工商银行侨香支行" style="padding:12px 6px;width:91%;border-right:transparent;border-radius:3px 0 0 3px;" ng-focus="getItemFocus()" ng-blur="onItemBlur()" autocomplete="off">
+                        <i class="select-adder" ng-click="showList()" style="display:inline-block;width:25px;height:34px;position:absolute;top:0;right:0;z-index:10;border:1px solid #ddd;border-radius:0 3px 3px 0;border-left:transparent"></i>
+                        <ul id="ulContent" class="select-down" ng-if="showBankFrame && matchData">
+                            <li ng-click="fitBankToAccount(bank)" ng-repeat="bank in resultList" ng-class="{'active': $index==selectIndex}">{{bank}}</li>
+                        </ul>
+                    </div>
+                    <div class="col-md-4">
+                        <p ng-if="account.bankname && !matchData">请填写正确的开户银行</p>
+                        <p ng-if="myForm.bankname.$touched && !account.bankname">开户银行不能为空</p>
+                    </div>
                 </div>
-            </div>
-            <div class="row">
-                <div class="col-md-2"><em class="colorRed">*</em>开户银行:</div>
-                <div class="col-md-8">
-                    <input ng-model="bankInfo.bankname" maxlength="30" ng-change="validateName(bankInfo.bankname, 2)" class="form-control" type="text" placeholder="例如:中国工商银行侨香支行" required>
+                <div class="row">
+                    <div class="col-md-3"><em class="colorRed">*</em>开户支行</div>
+                    <div class="col-md-5">
+                        <input name="branchname" ng-model="account.branchname" ng-change="checkAccount(2)" class="form-control" autocomplete="off" type="text" placeholder="例如:侨香支行">
+                    </div>
+                    <div class="col-md-4">
+                        <p ng-if="account.branchname && branchPattError">请填写正确的开户支行</p>
+                        <p ng-if="account.branchname && !branchPattError && branchError">请勿超过20个字</p>
+                        <p ng-if="myForm.branchname.$touched && !account.branchname">开户支行不能为空</p>
+                    </div>
                 </div>
-            </div>
-            <div class="row">
-                <div class="col-md-2"><em class="colorRed">*</em>银行账号:</div>
-                <div class="col-md-8">
-                    <input ng-model="bankInfo.number" maxlength="30" ng-change="validateNumber(bankInfo.number)" class="form-control" type="text" placeholder="" required>
+                <div class="row">
+                    <div class="col-md-3"><em class="colorRed">*</em>银行账号</div>
+                    <div class="col-md-5">
+                        <input name="number" ng-model="account.number" ng-change="checkAccount(3)" class="form-control" autocomplete="off" type="text" placeholder="请填写银行账号">
+                    </div>
+                    <div class="col-md-4">
+                        <p ng-if="account.number && numberPattError">请填写正确的银行账号</p>
+                        <p ng-if="account.number && !numberPattError && numberError">请勿超过30个字符</p>
+                        <p ng-if="account.number && !numberPattError && !numberError && repeatError">该银行账号已存在</p>
+                        <p ng-if="myForm.number.$touched && !account.number">银行账号不能为空</p>
+                    </div>
                 </div>
-            </div>
-            <div class="row">
-                <p style="  padding-left: 15px; color: #666;"><em class="colorRed">*</em>请点击【选择文件】选择上传已加盖公章的开户行信息,并点击【提交】完成上传! </p>
-                <div class="col-md-2"></div>
-                <div class="col-md-8">
-                    <div class="upload">
-                        <input type="text" name="txt" id="upload_text" />
+                <div class="row">
+                    <div class="col-md-3"><em class="colorRed">*</em>开户名称</div>
+                    <div class="col-md-5">
+                        <input name="accountname" ng-model="account.accountname" ng-change="checkAccount(4)" class="form-control" autocomplete="off" type="text" placeholder="请填写开户人姓名或企业名称">
+                    </div>
+                    <div class="col-md-4">
+                        <p ng-if="account.accountname && nameError">请勿超过50个字</p>
+                        <p ng-if="myForm.accountname.$touched && !account.accountname">开户名称不能为空</p>
+                    </div>
+                </div>
+                <div class="row">
+                    <div class="col-md-3"><em class="colorRed">*</em>上传开户许可证</div>
+                    <div class="col-md-5 upload">
+                        <input type="text" readonly ng-model="account.attachUrl" class="form-control" style="width:70%;margin-right:10px;"/>
                         <i>选择文件</i>
-                        <!--<input required="true" type="file" onchange="upload_text.value=this.value" class="upload01"-->
-                               <!--ng-model="bankInfo.files" image-upload name="bankInfo" id="InputFile" ng-multiple="false"/>-->
-                            <input type="file" class="upload01" ng-file-select="" ng-model="bankInfo.files" id="InputFile" required="true" onchange="angular.element(this).scope().change()" ng-multiple="false" />
-                        <!--<a href="#" class="upload-btn">确认上传</a>-->
+                        <input type="file" class="upload01" ng-change="uploadChange()" ng-file-select ng-model="account.files" required ng-multiple="false" />
+                    </div>
+                    <div class="col-md-4">
+                        <p ng-if="fileError">请上传可支持的格式</p>
+                        <p ng-if="!fileError && fileLegError">请勿超过3M</p>
                     </div>
-                    <p style="margin-top:0px; padding-left: 15px; color: #666;">仅支持JPG、PNG、GIF、PDF格式,大小不超过3M</p>
                 </div>
-            </div>
-            <div class="modal-footer">
-                <div class="pull-right">
-                    <button class="btn btn-success" type="submit"
-                            ng-disabled="!$payCenter.accountNameVal || !$payCenter.bankNameVal || !$payCenter.numberVal || !$payCenter.fileVal" ng-click="confirm()">提交</button>
-                    <button class="btn btn-warning" ng-click="cancle()">取消</button>
+            </form>
+            <div class="row">
+                <button style="width:0;height:0;background: transparent;border:0;"></button>
+                <div class="col-md-12" style="text-align: center;">
+                    <button class="btn" ng-click="cancelAdd()" style="background: #acabab;color:#fff">取消</button>
+                    <button class="btn" type="submit" ng-click="ensureAddAccount()" style="background: #5078cb;color:#fff">确定</button>
                 </div>
             </div>
             <div class="beizhu row">
                 <div class="col-md-1" style="color: #f00;line-height: 20px;">*声明:</div>
-                <div class="col-md-8">
+                <div class="col-md-10">
                     1. 此账户为卖家收款账户,请仔细核对信息内容,若由信息错误造成的损失,优软商城不承担赔偿责任。<br/>
-                    2. 如您的企业名称、开户银行及账号变更,您须在优软商城开展资金结算前进行更正,否则发生转账错误优软商城不承担赔偿责任。<br/>
-                    3. 更多的条款请阅读<a href="help/helpDetail/51" style="color: #5078cb;" target="_blank">《优软商城代收代付协议》</a> 。
+                    2. 卖家只能有唯一一个“使用中”的收款账户,新增账户审核通过后,原账户将自动失效。<br/>
+                    3. 如您的企业名称、开户银行及账号变更,您须在优软商城开展资金结算前进行更正,否则发生转账错误优软商城不承担赔偿责任。<br/>
+                    4. 更多的条款请阅读<a href="help/helpDetail/51" style="color: #5078cb;" target="_blank">《优软商城代收代付协议》</a> 。<br/>
+                    5. 附件仅支持JPG、PNG、PDF格式,大小超过3M。
                 </div>
             </div>
         </div>
     </div>
-    </div>
 </div>
 <!--删除账户操作-->
 <div class="com-del-box" ng-if="$payCenter.deleteDiv">
     <div class="title">
-        <a ng-click="cancleDelete()"><i class="fa fa-close fa-lg"></i></a>
+        <a ng-click="cancelDelete()"><i class="fa fa-close fa-lg"></i></a>
     </div>
     <div class="content">
         <p><i class="fa fa-exclamation-circle"></i>删除此账户信息</p>
-        <div><a ng-click="cancleDelete()">取消</a><a ng-click="confirmDelete()">确认</a></div>
+        <div><a ng-click="cancelDelete()">取消</a><a ng-click="confirmDelete()">确认</a></div>
     </div>
 </div>
 <style>
@@ -647,7 +894,7 @@
         background: rgba(0,0,0,.5);
     }
     .view-box .box{
-        width:600px;
+        width:645px;
         height: 550px;
         position: absolute;
         left: 0;
@@ -662,6 +909,35 @@
     .add-count{
         font-size: 14px;
         width: 100%;
+        position:relative;
+    }
+    .add-count .select-down{
+        width:100%;
+        border:1px solid #89aefa;
+        border-radius:3px;
+        background: #fff;
+        max-height:230px;
+        overflow-y: scroll;
+        position:absolute;
+        top:34px;
+        left:0;
+        z-index:100;
+    }
+    .add-count .select-down li{
+        line-height: 32px;
+        padding:6px;
+        padding-left:12px;
+
+    }
+    .add-count .select-down li:hover{
+        background: #89aefa;
+        color:#fff;
+        cursor:pointer;
+    }
+    .add-count .select-down li.active{
+        background: #89aefa;
+        color:#fff;
+        cursor:pointer;
     }
     .add-count h2{
         width: 100%;
@@ -669,57 +945,56 @@
         padding-left: 20px;
         font-size: 14px;
         font-family: normal;
+        font-weight: bold;
         border-bottom: #e5e5e5 1px solid;
     }
     .add-count .row{
-        margin: 0;
+        margin: 15px 0 20px 0;
         line-height: 34px;
-        margin-bottom: 20px;
         font-size: 14px;
-        padding-left: 45px;
+    }
+    .add-count .row p{
+        color:#f00;
+    }
+    .add-count .col-md-3{
+        text-align: right;
+    }
+    .add-count .col-md-5{
+       padding:0;
     }
     .add-count .row label{
         margin-left: 14px;
     }
    .upload {
        position: relative;
-       width: 100%;
-       min-height: 50px;
        line-height: 50px;
        font-size: 14px;
     }
-    .upload #upload_text {
-        width:335px;
-        height: 34px;
-        border: #ccc 1px solid;
-        padding-left: 20px;
-        border-radius: 5px;
-    }
+
     .upload i {
-        background: #ecf2fd;
-        width: 80px;
-        height: 32px;
+        background: #ff8522;
+        width: 25%;
+        height: 22px;
         display: inline-block;
         text-align: center;
-        color: #5078cb;
-        line-height: 34px;
+        color: #fff;
+        line-height: 22px;
         font-size: 14px;
         position: absolute;
-        left: 254px;
-        top: 10px;
-        border-left: #ccc 1px solid;
+        right:0;
+        top: 9px;
         cursor: pointer;
-        border-bottom-right-radius: 10px;
+        border-radius: 3px;
     }
     .upload01 {
-        width:335px;
         height: 34px;
         filter:alpha(opacity=0);
         -moz-opacity:0;
         opacity:0;
         position: absolute;
-        left: 0;
-        top: 8px;
+        width: 80px;
+        left: 195px;
+        top: 2px;
     }
     .upload-btn{
         width: 100px;
@@ -733,22 +1008,22 @@
         border-radius: 5px;
     }
     .add-count .beizhu{
-        background: #fff;
-        padding: 0 0 15px;
-        margin: 0;
+        margin: 15px 0;
+        background: #ebebeb;
+        border-radius: 0 0 5px 5px;
     }
     .add-count .beizhu .col-md-1{
-        width: 44px;
         padding: 0;
         font-size: 12px;
-        margin-left: 65px;
         line-height: 20px;
+        text-align: right;
     }
-    .add-count .beizhu .col-md-8{
+    .add-count .beizhu .col-md-10{
         line-height: 20px;
         font-size: 12px;
+        padding:0;
     }
-    .add-count .beizhu .col-md-8 a:hover{
+    .add-count .beizhu .col-md-10 a:hover{
         font-weight: 700;
         text-decoration: underline;
     }
@@ -758,6 +1033,7 @@
     .btn-success,.btn-success[disabled] {
         background-color: #337ab7;
         border-color: #2e6da4;
+        margin-left: 15px;
     }
     .btn-warning {
         color: #fff;

+ 40 - 0
src/test/java/com/uas/platform/b2c/DesTest.java

@@ -0,0 +1,40 @@
+package com.uas.platform.b2c;
+
+import com.uas.platform.core.util.Des;
+import org.junit.Test;
+
+public class DesTest {
+    @Test
+    public void test(){
+        try {
+            Des des = new Des();
+            byte b[] = des.encrypt("root", "10101010");
+            System.out.println(des.toHexString(b));
+
+            b = des.encrypt("jdbc:mysql://192.168.253.12:3306/mall_test_dev?characterEncoding=UTF-8&allowMultiQueries=true&rewriteBatchedStatements=true", "10101010");
+            System.out.println(des.toHexString(b));
+            //System.out.println(des.decrypt(des.toHexString(b), "10101010"));
+
+            b = des.encrypt("select111***", "10101010");
+            System.out.println(des.toHexString(b));
+
+            //正式
+            b = des.encrypt("sa", "10101010");
+            System.out.println(des.toHexString(b));
+
+            b = des.encrypt("jdbc:mysql://10.10.0.208:8066/mall_prod?characterEncoding=UTF-8&allowMultiQueries=true&rewriteBatchedStatements=true", "10101010");
+            System.out.println(des.toHexString(b));
+            //System.out.println(des.decrypt(des.toHexString(b), "10101010"));
+
+            b = des.encrypt("Select123!#%*(", "10101010");
+            System.out.println(des.toHexString(b));
+
+
+
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+
+    }
+}
+