Parcourir la source

Merge remote-tracking branch 'origin/feature/yc-payCenter-1031' into feature/yc-payCenter-1031

wangcz il y a 9 ans
Parent
commit
548661ad19
21 fichiers modifiés avec 1209 ajouts et 350 suppressions
  1. 4 0
      src/main/java/com/uas/platform/b2c/core/constant/Status.java
  2. 8 48
      src/main/java/com/uas/platform/b2c/fa/payment/controller/BankInfoController.java
  3. 24 41
      src/main/java/com/uas/platform/b2c/fa/payment/dao/BankInfoDao.java
  4. 18 18
      src/main/java/com/uas/platform/b2c/fa/payment/model/BankInfo.java
  5. 12 4
      src/main/java/com/uas/platform/b2c/fa/payment/service/BankInfoService.java
  6. 147 86
      src/main/java/com/uas/platform/b2c/fa/payment/service/impl/BankInfoServiceImpl.java
  7. 4 4
      src/main/java/com/uas/platform/b2c/fa/payment/service/impl/BankTransferServiceImpl.java
  8. 58 5
      src/main/java/com/uas/platform/b2c/trade/order/controller/OrderController.java
  9. 24 0
      src/main/java/com/uas/platform/b2c/trade/order/model/OrderSimpleInfo.java
  10. 84 0
      src/main/java/com/uas/platform/b2c/trade/order/model/PayRecord.java
  11. 23 0
      src/main/java/com/uas/platform/b2c/trade/order/service/OrderService.java
  12. 79 0
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderServiceImpl.java
  13. BIN
      src/main/resources/jxls-tpl/trade/payRecord.xls
  14. 6 26
      src/main/webapp/resources/js/common/query/bankInfo.js
  15. 1 1
      src/main/webapp/resources/js/common/query/order.js
  16. 2 2
      src/main/webapp/resources/js/usercenter/app.js
  17. 647 0
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_pay_ctrl.js
  18. 5 47
      src/main/webapp/resources/js/usercenter/controllers/forstore/pay_center_ctrl.js
  19. 7 4
      src/main/webapp/resources/js/vendor/controllers/forstore/pay_center_ctrl.js
  20. 20 17
      src/main/webapp/resources/view/common/bankInfoModal.html
  21. 36 47
      src/main/webapp/resources/view/usercenter/forstore/pay_center.html

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

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

@@ -47,27 +47,15 @@ public class BankInfoController {
 
 
 	/**
-	 * @author yujia  获取买家个人银行账户
+	 * @author yujia  分页获取买家个人银行账户
 	 *
 	 * @return the personal bank
 	 */
 	@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());
-	}
-
-	/**
-	 * @author yujia  获取买家企业银行账户
-	 *
-	 * @return list
-	 */
-	@RequestMapping(value="/buy/enterprise", method=RequestMethod.GET, params = {"status=104","type=buyer"})
-	@ApiOperation(value = "获取买家企业银行账户", httpMethod = "GET")
-	public List<BankInfo> getBuyerEnterprise() {
-		logger.log("银行账户信息", "获取企业银行账户信息");
-		return bankInfoService.getEnterpriseBankInfoContainsStatus(Type.BUYER.value(), Status.ALLOW.value());
+		return bankInfoService.getPersonBankInfo(params, Type.BUYER.value());
 	}
 
 	/**
@@ -86,21 +74,7 @@ public class BankInfoController {
 	}
 
 	/**
-	 * 获取供应商审核通过的信息
-	 * 2016年3月15日 下午5:16:00
-	 *
-	 * @return list
-	 * @author yujia
-	 */
-	@RequestMapping(value="/sale/enterprise", method=RequestMethod.GET, params = {"type=sup", "status=104"})
-	@ApiOperation(value = "获取供应商审核通过的信息", httpMethod = "GET")
-	public List<BankInfo> getSaleBankInfoAudit() {
-		logger.log("银行账户信息", "获取供应商银行账户信息");
-		return bankInfoService.getEnterpriseBankInfoContainsStatus(Type.SUP.value(), Status.ALLOW.value());
-	}
-
-	/**
-	 * 获取供应商账户信息
+	 * 分页获取卖家账户信息,已修改
 	 * 2016年3月15日 下午5:16:00
 	 *
 	 * @return list
@@ -108,9 +82,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());
 	}
 
 	/**
@@ -124,21 +98,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());
 	}
 
 	/**
@@ -154,7 +114,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);
 	}
 
 	/**

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

@@ -19,89 +19,71 @@ 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);
-
-	/**
-	 * 根据下面参数获取企业账户信息
-	 * @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 and b.status in :status order by num")
+	List<BankInfo> findSupBankList(@Param("enuu") Long enuu, @Param("opraterUserType") Integer opraterUserType, @Param("status") List<Integer> status);
 
 	/**
-	 * 根据下面参数获取企业账户信息
+	 * 返回买家账户信息列表  --有enuu
 	 *
 	 * @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);
 
 
 	/**
@@ -115,5 +97,6 @@ public interface BankInfoDao extends CrudRepository<BankInfo, Long>, JpaSpecific
 	 * @param status 状态
 	 * @return list
 	 */
-	List<BankInfo> findByUseruuAndEnuuAndNumAndTypeAndOpraterUserTypeAndStatus(Long useruu, Long enuu, Integer num, Short type, Integer opraterUserType, Integer status);
+	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 + "]";
 	}
 }

+ 12 - 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);
+
 	/**
 	 * 根据以下参数 获取对应的参数查找所有的账户信息
 	 *

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

@@ -3,19 +3,19 @@ package com.uas.platform.b2c.fa.payment.service.impl;
 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 +29,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 +50,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 +83,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 +99,10 @@ public class BankInfoServiceImpl implements BankInfoService {
 		return bankInfoDao.save(bankInfo);
 	}
 
+	/**
+	 * 已修改,删除账户信息,取出对应账户信息排序
+	 * @param id the id
+	 */
 	@Override
 	@Transactional
 	public void delete(Long id) {
@@ -109,15 +112,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,34 +135,78 @@ 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 List<BankInfo> getEnterpriseBankInfoContainsStatus(Integer operatorUserType, Integer status, Long... params) {
-		Long enuu = null;
-		if(params.length == 0) {
-			enuu = SystemSession.getUser().getEnterprise() != null ? SystemSession.getUser().getEnterprise().getUu() : null;
-		}else {
-			enuu = params[0];
-		}
-		if(operatorUserType == Type.BUYER.value()) {
-			if (enuu != null) {
-				return bankInfoDao.findByUseruuAndEnuuAndTypeAndOpraterUserTypeAndStatusOrderByNumAsc(SystemSession.getUser().getUserUU(), enuu, (short)2, operatorUserType, status);
-			} else {
-				return bankInfoDao.findByUseruuAndDissociativeAndTypeAndOpraterUserTypeAndStatusOrderByNumAsc(SystemSession.getUser().getUserUU(), Type.PERSONAL.value(), (short)2, operatorUserType, status);
+	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;
 			}
-		}else {
-			return bankInfoDao.findByEnuuAndTypeAndStatusAndOpraterUserTypeOrderByNumAsc(enuu, (short)2, status, operatorUserType);
-		}
+		}, pageInfo);
+	}
 
+	@Override
+	public List<BankInfo> getEnterpriseBankInfoContainsStatus(Integer operatorUserType, Integer status, Long... params) {
+//		Long enuu = null;
+//		if(params.length == 0) {
+//			enuu = SystemSession.getUser().getEnterprise() != null ? SystemSession.getUser().getEnterprise().getUu() : null;
+//		}else {
+//			enuu = params[0];
+//		}
+//		if(operatorUserType == Type.BUYER.value()) {
+//			if (enuu != null) {
+//				return bankInfoDao.findByUseruuAndEnuuAndTypeAndOpraterUserTypeAndStatusOrderByNumAsc(SystemSession.getUser().getUserUU(), enuu, (short)2, operatorUserType, status);
+//			} else {
+//				return bankInfoDao.findByUseruuAndDissociativeAndTypeAndOpraterUserTypeAndStatusOrderByNumAsc(SystemSession.getUser().getUserUU(), Type.PERSONAL.value(), (short)2, operatorUserType, status);
+//			}
+//		}else {
+//			return bankInfoDao.findByEnuuAndTypeAndStatusAndOpraterUserTypeOrderByNumAsc(enuu, (short)2, status, operatorUserType);
+//		}
+		return null;
 	}
 
 	@Override
@@ -164,7 +216,8 @@ 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.findByUseruuAndEnuuAndTypeAndOpraterUserTypeAndStatusOrderByNumAsc(useruu, enuu, (short)1, opraterUserType, Status.ALLOW.value());
+		return null;
 	}
 
 	@Override
@@ -175,26 +228,27 @@ public class BankInfoServiceImpl implements BankInfoService {
 	@Override
 	@Transactional
 	public BankInfo saveB2cAccount(BankInfo bankInfo, Integer operatorType, boolean isPersonal) {
-		int size = 0;
-		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("没有给账户设置对应的类型");
-		}
-		bankInfo.setNum(++size);
-		bankInfo.setStatus(Status.ALLOW.value());
-		return bankInfoDao.save(bankInfo);
+//		int size = 0;
+//		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("没有给账户设置对应的类型");
+//		}
+//		bankInfo.setNum(++size);
+//		bankInfo.setStatus(Status.ALLOW.value());
+//		return bankInfoDao.save(bankInfo);
+		return null;
 	}
 
 	@Override
@@ -205,22 +259,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);
 	}
 	
@@ -254,7 +307,8 @@ public class BankInfoServiceImpl implements BankInfoService {
 		}else {
 			enuu = params[0];
 		}
-		return bankInfoDao.findByEnuuAndTypeAndOpraterUserTypeOrderByNumAsc(enuu, (short)2, operatorUserType);
+//		return bankInfoDao.findByEnuuAndTypeAndOpraterUserTypeOrderByNumAsc(enuu, (short)2, operatorUserType);
+		return null;
 	}
 
 	/**
@@ -308,15 +362,22 @@ 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, "该公司的银行账户已经存在了,不能再增加了");
+			if(bankInfo.getOpraterUserType() == Type.SUP.value()) {
+				//获取已通过且为已使用状态的账户信息
+				List<BankInfo> infoList = bankInfoDao.findSupBankList(bankInfo.getEnuu(), bankInfo.getOpraterUserType(), statusList);
+				if (!CollectionUtils.isEmpty(infoList)){
+					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());
+					}
 				}
-				bankInfo.setNum(1);
 				bankInfo.setStatus(Status.ALLOW.value());
 				bankInfo = bankInfoDao.save(bankInfo);
 			}

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

@@ -432,10 +432,10 @@ 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());
-				if (!CollectionUtils.isEmpty(bankInfos)) {
-					return bankInfos.get(0);
-				}
+//				List<BankInfo> bankInfos = bankInfoDao.findByUseruuAndEnuuAndNumAndTypeAndOpraterUserTypeAndStatus(order.getBuyeruu(), order.getBuyerenuu(), 1, (short) 2, Type.BUYER.value(), Status.ALLOW.value());
+//				if (!CollectionUtils.isEmpty(bankInfos)) {
+//					return bankInfos.get(0);
+//				}
 			}
 		}
 		return null;

+ 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;
@@ -881,6 +883,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

@@ -594,6 +594,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

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

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.sun.org.apache.xpath.internal.operations.Bool;
+import com.sun.org.apache.xpath.internal.operations.Or;
 import com.uas.api.b2c_erp.buyer.model.B2cOrder;
 import com.uas.api.exception.B2CException;
 import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
@@ -3096,6 +3097,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

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


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

@@ -4,35 +4,14 @@ 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',
-				isArray : true,
-				params : {
-					type : 'buyer',
-					status : 104
-				}
-			},
-			
 			getSaleEeterpriseBank : {
 				url : 'trade/bankInfo/sale/enterprise',
 				method: 'GET',
 				isArray : true,
 				params : {type : 'sup'}
 			},
-			getSaleEeterpriseBankAudit : {
-				url : 'trade/bankInfo/sale/enterprise',
-				method: 'GET',
-				isArray : true,
-				params : {
-					type : 'sup',
-					status : 104
-				}
-			},
 			getPageStatusBankInfo : {
 				url : 'trade/bankInfo/page/bankinfo',
 				method : 'GET'
@@ -88,11 +67,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',

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

@@ -367,7 +367,7 @@ define([ 'ngResource' ], function() {
                 method : 'PUT'
             },
             getBuyPayRecord : {
-                url : 'trade/order/payRecord',
+                url : 'trade/order/buyer/payRecord',
                 method : 'GET'
             }
         });

+ 2 - 2
src/main/webapp/resources/js/usercenter/app.js

@@ -80,8 +80,8 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'commo
 		})).state('pay_center', angularAMD.route({
 			url: '/payCenter',
 			templateUrl: 'static/view/usercenter/forstore/pay_center.html',
-			controller: 'payCenterCtrl',
-			controllerUrl: 'app/controllers/forstore/pay_center_ctrl'
+			controller: 'BuyerPayCtrl',
+			controllerUrl: 'app/controllers/forstore/buyer_pay_ctrl'
 		})).state('my_seek_purchase', angularAMD.route({
 			url: '/seekPurchase',
 			templateUrl: 'static/view/usercenter/forstore/seek_purchase.html',

+ 647 - 0
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_pay_ctrl.js

@@ -0,0 +1,647 @@
+/**
+ *  支付中心控制器
+ */
+define(['app/app'], function(app) {
+	'use strict';
+	app.register.controller('BuyerPayCtrl', ['$scope', '$rootScope', 'ngTableParams', 'BaseService', 'bankInfoService', '$filter', '$modal', 'toaster', 'OrderSimpleInfo', 'Loading', function($scope, $rootScope, ngTableParams, BaseService, bankInfoService, $filter, $modal, toaster, OrderSimpleInfo, Loading) {
+		$rootScope.active = 'pay_center';
+
+		var hideBankFilter = $filter("hideBankFilter");
+
+		$scope.status = 'pay-history';
+
+		//切换银行账户信息,历史记录的的的状态
+		$scope.toggleStatus = function(status) {
+			if($scope.status != status) {
+				$scope.status = status;
+				loadData();
+			}
+		};
+
+		/**********************************************************************
+		 * 初始化
+		 **********************************************************************/
+
+		/**
+		 * 保存获取的分页数据
+		 */
+		$scope.tradeRecordPage = {};
+
+		$scope.$$record = {};
+
+		$scope.AllOrderInfo = {};
+
+		$scope.param = {};
+
+		$scope.currency = 'ALL';
+
+		$scope.paytype = 'ALL';
+
+		/**
+		 * 使用ngTable 获取支付记录信息
+		 */
+		$scope.tradeRecordTableParams = new ngTableParams({
+			page : 1,
+			count : 30,
+			sorting : {
+				paytime : 'DESC'
+			}
+		}, {
+			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.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) {
+
+				});
+			}
+		});
+
+		$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 = {
+			startDateOpen: false,
+			endDateOpen: false
+		};
+
+		// 打开日期选择框
+		$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();
+			item[openParam] = !item[openParam];
+		};
+
+		var loadAccountData = function() {
+			$scope.bankInfoTableParams.page(1);
+			$scope.bankInfoTableParams.reload();
+		};
+
+		$scope.filterLoad = function () {
+			loadPayHistory();
+		};
+
+		var loadPayHistory = function () {
+			$scope.tradeRecordTableParams.page(1);
+			$scope.tradeRecordTableParams.reload();
+		};
+
+		$scope.setDefaultAccount = function(id) {
+			bankInfoService.setDefaultAccount({id : id}, function() {
+				toaster.pop('success', '设置成功');
+				loadAccountData();
+			}, 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() {
+			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) {
+			var modalInstance = $modal.open({
+				templateUrl : 'static/view/common/bankInfoModal.html',
+				controller : 'BankInfoCtrl',
+				resolve : {
+					account : function() {
+						//深拷贝一份
+						return angular.copy(data);
+					}
+				}
+			});
+
+			modalInstance.result.then(function(account) {
+				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();
+				}
+
+			}, function() {
+
+			});
+		};
+
+		//获取数据的方法。
+		var loadData = function() {
+			switch ($scope.status) {
+				case 'pay-info' :
+					loadAccountData();
+					break;
+				case 'pay-history':
+					loadPayHistory();
+					break;
+			}
+		};
+		loadData();
+
+		$scope.search = function () {
+			loadPayHistory();
+		};
+
+		$scope.exportToExcel = function () {
+			if ($scope.$$record.totalElements == 0) {
+				toaster.pop('info', '当前支付记录为空,无法导出');
+				return ;
+			}
+			exportByAjax();
+		};
+
+		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();
+		}
+
+		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**************************/
+
+		//输入框监听Enter事件
+		$scope.listenEnter = function () {
+			if(event.keyCode == 13) {
+				$scope.setPage("page", $scope.tradeRecordPage.number);
+			}
+		};
+
+		$scope.setPage = function(type, number) {
+			if(type != 'prev' &&  type != 'page' && type != 'next' && type != 'last' && type != 'first') {
+				return ;
+			};
+			var page = -1;
+			switch (type) {
+				case "page":
+					if(number < 1) {
+						page = 1;
+					}else if(number > $scope.AllOrderInfo.totalPages) {
+						page = $scope.AllOrderInfo.totalPages;
+					}else {
+						page = number;
+					};
+					break;
+				case "prev":
+					if($scope.param.page <= 1) {
+						page = 1;
+					}else {
+						page =$scope.param.page - 1;
+					};
+					break;
+				case "next":
+					if($scope.param.page >= $scope.AllOrderInfo.totalPages) {
+						page = $scope.AllOrderInfo.totalPages
+					}else {
+						page =$scope.param.page + 1;
+					}
+					break;
+				case "first":
+					page = 1;
+					break;
+				case "last":
+					page = $scope.AllOrderInfo.totalPages;
+					break;
+			}
+			if(page == $scope.param.page || page < 1 || page > $scope.AllOrderInfo.totalPages) {
+				$scope.param.currentPage = $scope.param.page;
+				return ;
+			}
+			$scope.param.page = page;
+			$scope.tradeRecordTableParams.page($scope.param.page);
+			$scope.tradeRecordTableParams.reload();
+		};
+
+		//当前页在前段的计算方式
+		$scope.frontSegment = function (currentPage, totalElementPages) {
+			angular.forEach($scope.pages, function (page) {
+				switch (page.number) {
+					case 8:
+						page.type = 'more';
+						page.active = false;
+						break;
+					case 0:
+						if(currentPage == 1) {
+							page.active = false;
+						}
+					default : {
+						page.current = (currentPage == page.number);
+					}
+				}
+			});
+		};
+
+		//当前页在后端计算方式
+		$scope.endSegment = function (currentPage, totalElementPages) {
+			angular.forEach($scope.pages, function (page) {
+				switch (page.number) {
+					case 2:
+						page.active = false;
+						page.type = 'more';
+						break;
+					case 10:
+						if(currentPage == totalElementPages) {
+							page.active = false;
+						}
+						break;
+					case 0:
+					case 1:
+						break;
+					default:
+						if(page.number != totalElementPages) {
+							page.number = totalElementPages - 9 + page.number;
+						}
+						page.current = (currentPage == page.number);
+						break;
+				}
+			});
+		};
+
+		//当前页在中间计算方式
+		$scope.middleSegment = function (currentPage) {
+			angular.forEach($scope.pages, function (page) {
+				switch (page.number) {
+					case 2:
+					case 8:
+						page.type ='more';
+						page.active = false;
+						break;
+					case 3:
+						page.number = currentPage - 2;
+						break;
+					case 4:
+						page.number = currentPage - 1;
+						break;
+					case 5:
+						page.number = currentPage;
+						page.current = true;
+						break;
+					case 6:
+						page.number = currentPage + 1;
+						break;
+					case 7:
+						page.number = currentPage + 2;
+						break;
+				}
+			});
+		}
+
+		//初始化页数信息
+		$scope.initPages = function (totalElementPages) {
+			var pageNum = [];
+			if(totalElementPages == 1) {
+				return ;
+			}else if(totalElementPages < 10) {
+				for(var i = 0; i < totalElementPages + 2; i++) {
+					pageNum.push(i);
+				}
+			}else {
+				pageNum = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
+			}
+			angular.forEach(pageNum, function (number) {
+				var page = {active : true, type : 'page', number : number};
+				if(number == 0) {
+					page.type = 'prev';
+				}else if(number == 1) {
+					page.type = 'first';
+				}else if(number == pageNum.length - 2) {
+					page.type = 'last';
+					page.number = totalElementPages;
+				}else if(number == pageNum.length - 1){
+					page.type = 'next';
+				}
+				$scope.pages.push(page);
+			});
+		}
+
+		//计算页数的方式。
+		$scope.acculatePages = function(currentPage, totalElementPages) {
+			$scope.pages = [];
+			if(totalElementPages < 1)  {
+				return ;
+			}
+			//初始化页面数据
+			$scope.initPages(totalElementPages);
+			if(totalElementPages < 10) {
+				angular.forEach($scope.pages, function (page) {
+					if(page.number == currentPage) {
+						page.current = true;
+					}
+				});
+			}else if(currentPage < 6) {//当期页小于6
+				$scope.frontSegment(currentPage, totalElementPages);
+			}else if(currentPage > totalElementPages - 5) { //当期页在后面
+				$scope.endSegment(currentPage, totalElementPages);
+			}else { //当期页在中间
+				$scope.middleSegment(currentPage);
+			}
+		};
+
+	}]);
+
+
+
+	app.register.controller('BankInfoCtrl', ['$scope', '$modalInstance', 'account', 'bankInfoService', 'toaster', function($scope, $modalInstance, account, bankInfoService, toaster){
+
+		/**
+		 * 目前只支持的银行
+		 * @type {string[]}
+		 */
+		$scope.bankList = [
+			'中国银行','中国建设银行','中国工商银行','中国农业银行','交通银行','招商银行','中国民生银行',
+			'兴业银行','中信银行','中国光大银行','广发银行','平安银行','中国邮政储蓄银行','华夏银行','浦发银行'
+		];
+
+		// $scope.bankBlur = function () {
+		// 	console.log(!$scope.account.bankname);
+		// 	if (!$scope.account.bankname){
+		// 		$scope.showBankFrame = true;
+		// 	}
+		// };
+
+		$scope.inputBankName = function () {
+			$scope.showBankFrame = true;
+		};
+
+		$scope.fitBankToAccount = function (item) {
+			$scope.account.bankname = item;
+			$scope.showBankFrame = false;
+		};
+
+		$scope.account = account;
+		if($scope.account) {
+			$scope.title = "修改账户";
+		}else {
+			$scope.title = "新增账户";
+			$scope.account = {};
+		}
+
+		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;
+					}
+				}
+			}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;
+					}
+				}
+			}
+		};
+
+		$scope.confirm = function() {
+			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.branchError || $scope.branchPattError || $scope.numberError || $scope.numberPattError ||
+				$scope.nameError){
+				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();
+		}
+
+	}]);
+});

+ 5 - 47
src/main/webapp/resources/js/usercenter/controllers/forstore/pay_center_ctrl.js

@@ -14,14 +14,6 @@ define(['app/app'], function(app) {
 
 		$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) {
@@ -31,15 +23,6 @@ define(['app/app'], function(app) {
 			}
 		};
 
-		//切换企业和个人的账户状态
-		$scope.toggleAccountStatus = function (status) {
-			if($scope.accountStatus != status) {
-				$scope.accountStatus = status;
-				SessionService.set('accountstatus', status);
-				loadData();
-			}
-		};
-
 		/**********************************************************************
 		 * 初始化
 		 **********************************************************************/
@@ -66,7 +49,7 @@ define(['app/app'], function(app) {
 			total : 0,
 			getData : function ($defer, params) {
 				const param = BaseService.parseParams(params.url());
-				//目前直接从订单中获取信息
+				//目前直接从订单中获取信息 --支付记录
 				OrderSimpleInfo.getBuyPayRecord(param, function (page) {
 					$scope.tradeRecordPage = page.data;
 					$scope.AllOrderInfo.totalPages = $scope.tradeRecordPage.totalPages;
@@ -132,10 +115,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);
@@ -164,14 +143,7 @@ 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;
-					}
+					$scope.getAccountData = 'getBuyPersonalBank';
 					loadAccountData();
 					break;
 				case 'pay-history':
@@ -369,30 +341,16 @@ define(['app/app'], function(app) {
 
 	app.register.controller('BankInfoCtrl', ['$scope', '$modalInstance', 'account', 'kind', 'bankInfoService', 'toaster', function($scope, $modalInstance, account, kind, bankInfoService, toaster){
 		$scope.account = account;
-		if($scope.account) {
-			$scope.eidt = true;
-		} else {
-			delete $scope.eidt;
-		}
-		$scope.kind = kind;
 		if($scope.account) {
 			$scope.title = "修改账户";
 		}else {
-			$scope.title = "新增账户信息";
+			$scope.title = "新增账户";
 			$scope.account = {};
 		}
 
-		$scope.set = function(kind) {
-			$scope.kind = kind;
-		}
-
 		$scope.confirm = function() {
-			var method = '';
-			if($scope.kind) {
-				method = 'saveBuyPersonalBank';
-			}else {
-				method = 'saveBuyEnterpriseBank';
-			}
+			var method = 'saveBuyPersonalBank'; //不区分个人和企业账户
+
 			bankInfoService[method].call(null, null, $scope.account, function(data) {
 				toaster.pop('success', '保存成功');
 				$modalInstance.close(data)

+ 7 - 4
src/main/webapp/resources/js/vendor/controllers/forstore/pay_center_ctrl.js

@@ -29,7 +29,7 @@ define(['app/app'], function(app) {
         $scope.$payCenter.newAccount = false;
 
         //获取数据的方法;
-        $scope.getMethod = "getSaleEeterpriseBankAudit";
+        $scope.getMethod = "getSaleEeterpriseBank";
 
         $scope.bankInfo = {};
 
@@ -70,7 +70,7 @@ define(['app/app'], function(app) {
                 $scope.bankInfos = null;
                 $scope.$payCenter.tab = tab;
                 if($scope.$payCenter.tab === 'accountTab') {
-                    $scope.getMethod = "getSaleEeterpriseBankAudit";
+                    // $scope.getMethod = "getSaleEeterpriseBankAudit";
                 }else if($scope.$payCenter.tab === 'accountHis'){
                     $scope.getMethod = "getSaleEeterpriseBank";
                 }
@@ -436,7 +436,7 @@ define(['app/app'], function(app) {
             var result = '未知状态';
             switch (status) {
                 case 101 :
-                    result = '已提交';
+                    result = '待审核';
                     break;
                 case 104:
                     result = '使用中';
@@ -444,9 +444,12 @@ define(['app/app'], function(app) {
                 case 103:
                     result = '未通过';
                     break;
-                case 112:
+                case 105:
                     result = '已失效';
                     break;
+                case 112:
+                    result = '已删除';
+                    break;
             }
             return result;
         }

+ 20 - 17
src/main/webapp/resources/view/common/bankInfoModal.html

@@ -35,7 +35,7 @@
 		width: 241px;
 		padding-left:5px;
 		line-height: 34px;
-		border-bottom:1px solid #5078cb
+		/*border-bottom:1px solid #5078cb*/
 	}
 	.divinline .select-down li:hover{
 		background: #5078cb;
@@ -78,44 +78,47 @@
 						<!--<option value="1">1</option>-->
 						<!--<option value="2">2</option>-->
 					<!--</select>-->
-		    		<input name="bankname" ng-model="account.bankname" type="text" class="form-control select-adder" placeholder="请选择开户银行" required>
-					<ul class="select-down">
-						<li>1</li>
-						<li>1</li>
-						<li>1</li>
+		    		<input name="bankname" ng-model="account.bankname" ng-change="checkAccount(1)" type="text" class="form-control select-adder" placeholder="请选择开户银行" required>
+					<ul class="select-down" ng-if="showBankFrame && matchData">
+						<li ng-click="fitBankToAccount(bank)" ng-repeat="bank in resultList">{{bank}}</li>
 					</ul>
 		  		</div>
-				<span class="warn-message">请填写正确的开户银行</span>
+				<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"><b class="text-inverse">*&nbsp;</b>开户支行</label>
 				<div class="divinline">
-					<input name="number" type="text" class="form-control"
-						   placeholder="例如:侨香支行" ng-pattern="/^[0-9]*$/" ng-required="true" ng-maxlength="20">
+					<input name="branchname" type="text" class="form-control" ng-model="account.branchname" ng-change="checkAccount(2)"
+						   placeholder="例如:侨香支行" ng-required="true">
 				</div>
-				<span class="warn-message">请勿超过20个字</span>
+				<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"><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)">
 		  		</div>
-				<span class="warn-message">请勿超过20个字符</span>
+				<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="myForm.number.$touched && myForm.number.$invalid">银行账号不能为空</span>
 		  	</div>
 			<div class="form-group">
 				<label class="margin15"><b class="text-inverse">*&nbsp;</b>开户名称</label>
 				<div class="divinline">
-					<input name="number" type="text" class="form-control"
-						   placeholder="请填写开户人姓名或企业名称" ng-pattern="/^[0-9]*$/" ng-required="true" ng-maxlength="50">
+					<input name="accountname" type="text" class="form-control" ng-model="account.accountname"
+						   placeholder="请填写开户人姓名或企业名称" ng-required="true" ng-change="checkAccount(4)">
 				</div>
-				<span class="warn-message">请勿超过50个字</span>
+				<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>
 	<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-disabled="!myForm.$valid" ng-click="confirm()" value="确定" />
+		<input type="submit" class="com-btn-submit com-btn-level1" ng-click="confirm()" value="确定" />
 	</div>
 </form>

+ 36 - 47
src/main/webapp/resources/view/usercenter/forstore/pay_center.html

@@ -373,39 +373,28 @@
 						<th width="168">操作</th>
 					</thead>
 					<tbody>
-						<tr>
-							<td>中国银行</td>
-							<td>南山支行</td>
-							<td>1256325*******************5621</td>
-							<td>优软*********有限公司</td>
+						<tr ng-repeat="account in accounts">
+							<td ng-bind="account.bankname">中国银行</td>
+							<td ng-bind="account.branchname">南山支行</td>
+							<td ng-bind="account.number | hideBankFilter">1256325*******************5621</td>
+							<td ng-bind="account.accountname">优软*********有限公司</td>
 							<td class="operate-area">
-								<a>删除</a>
-								<span class="mall-btn-submit">默认账户</span>
-								<!--<span class="mall-btn-warn">设为默认</span>-->
-							</td>
-						</tr>
-						<tr>
-							<td>中国银行</td>
-							<td>南山支行</td>
-							<td>1256325*******************5621</td>
-							<td>优软*********有限公司</td>
-							<td class="operate-area">
-								<a>删除</a>
-								<!--<span class="mall-btn-submit">默认账户</span>-->
-								<span class="mall-btn-warn">设为默认</span>
+								<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 class="com-del-box">
+				<div class="com-del-box" ng-if="showDelete">
 					<div class="title">
-						<i></i>
+						<i ng-click="cancelDelete()"></i>
 					</div>
 					<div class="content">
 						<p><i class="fa fa-exclamation-circle"></i>是否要删除此账户信息?</p>
 						<div>
-							<a>取消</a>
-							<a>确认</a>
+							<a ng-click="cancelDelete()">取消</a>
+							<a ng-click="deleteAccount()">确认</a>
 						</div>
 					</div>
 				</div>
@@ -419,7 +408,7 @@
 							<div class="data-input">
 								<input type="text" ng-model="startDate"
 									   class="form-control select-adder" placeholder="起始时间"
-									   datepicker-popup="yyyy-MM-dd HH:mm:ss"
+									   datepicker-popup="yyyy-MM-dd"
 									   is-open="condition.startDateOpen"
 									   max-date="endDate" current-text="今天" clear-text="清除" close-text="关闭"
 									   datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
@@ -432,7 +421,7 @@
 							<div class="data-input">
 								<input type="text" ng-model="endDate"
 									   class="form-control select-adder" placeholder="结束时间"
-									   datepicker-popup="yyyy-MM-dd HH:mm:ss"
+									   datepicker-popup="yyyy-MM-dd"
 									   is-open="condition.endDateOpen"
 									   min-date="startDate" current-text="今天" clear-text="清除" close-text="关闭"
 									   datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
@@ -443,8 +432,8 @@
 						</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;">导出</a>
+							<a class="seek" ng-click="search()">搜索</a>
+							<a class="seek" ng-click="exportToExcel()" style="margin-left: 5px;">导出</a>
 						</div>
 					</div>
 				</div>
@@ -454,41 +443,37 @@
 						<span>订单号</span>
 						<span>商家名称</span>
 						<span>
-							<select class="form-control select-adder">
-								<option>币种</option>
-								<option value="1">RMB</option>
-								<option value="2">USD</option>
+							<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>
-							<select class="form-control select-adder" style="width: 90px">
-								<option>交易方式</option>
-								<option value="1">RMB</option>
-								<option value="2">USD</option>
+							<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">
+							<select class="form-control select-adder" style="width: 90px">
 								<option>状态</option>
-								<option value="1">RMB</option>
-								<option value="2">USD</option>
+								<option value="1">支付成功</option>
 							</select>
 						</span>
 					</dt>
-					<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.sellername">优软科技</span>
+						<span ng-bind="tradeRecord.currencyName"></span>
 						<span ng-bind="tradeRecord.ensurePrice | formateNumber : 2 | currencySysmbol : tradeRecord.currencyName"></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>
 						<span><b>支付成功</b></span>
 					</dd>
 					<!--<dd>
@@ -499,7 +484,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>
@@ -508,7 +493,11 @@
 							<a href=".">马上去逛一逛</a>&nbsp;<i class="fa fa-arrow-right"></i>
 						</div>
 					</dd>
+
 				</dl>
+				<div style="text-align: right;margin-right:20px;">
+					<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;">
@@ -519,7 +508,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">