Browse Source

Merge branch 'feature_installment_v1' of ssh://10.10.101.21/source/platform-b2c into feature_installment_v1

ouxq 8 years ago
parent
commit
b6fb6ee0d8

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

@@ -179,6 +179,10 @@ public enum Status {
 	 * {@code 503 待付款}
 	 */
 	TOBEPAID(503, "待付款"),
+	/**
+	 * {@code 524 待继续分期付款}
+	 */
+	TOBEPAIDAGAGIN(524, "待继续分期付款"),
 	/**
 	 * {@code 523 付款中}
 	 */

+ 0 - 9
src/main/java/com/uas/platform/b2c/fa/payment/controller/InstallmentController.java

@@ -61,13 +61,4 @@ public class InstallmentController {
         return null;
     }
 
-    /**
-     * 确认单一分期收款
-     * @param id 分期明细id
-     * @return
-     */
-    @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
-    public Installment ensureInstallment(@PathVariable("id") Long id) {
-        return null;
-    }
 }

+ 15 - 1
src/main/java/com/uas/platform/b2c/fa/payment/model/BankTransfer.java

@@ -37,6 +37,12 @@ public class BankTransfer {
 	@Column(name = "banktf_type")
 	private String type;
 
+	/**
+	 * 对应分期明细id
+	 */
+	@Column(name = "banktf_installdetailid")
+	private Long installmentDetailId;
+
 	/**
 	 * 状态 TOBEMADEOUTANINVOICE(512, "待开发票"), MADEOUTANINVOICE(513, "已开发票"),
 	 */
@@ -76,7 +82,7 @@ public class BankTransfer {
 	/**
 	 * 凭证图片
 	 */
-	@Column(name = "banktf_imgUrl")
+	@Column(name = "banktf_imgUrl", length = 4000)
 	private String imgUrl;
 
 	/**
@@ -166,6 +172,14 @@ public class BankTransfer {
 		this.type = type;
 	}
 
+	public Long getInstallmentDetailId() {
+		return installmentDetailId;
+	}
+
+	public void setInstallmentDetailId(Long installmentDetailId) {
+		this.installmentDetailId = installmentDetailId;
+	}
+
 	public Long getCollectenuu() {
 		return collectenuu;
 	}

+ 5 - 3
src/main/java/com/uas/platform/b2c/fa/payment/service/InstallmentService.java

@@ -1,5 +1,6 @@
 package com.uas.platform.b2c.fa.payment.service;
 
+import com.uas.platform.b2c.fa.payment.model.BankTransfer;
 import com.uas.platform.b2c.fa.payment.model.Installment;
 
 /**
@@ -27,9 +28,10 @@ public interface InstallmentService {
     Installment updateInstallment(Installment installment, Long purchaseId);
 
     /**
-     *
-     * @param installmentDetail
+     * 支付单一分期
+     * @param bankTransfer 转账信息
+     * @param orderId 订单id
      * @return
      */
-//    Installment paidInstallment(InstallmentDetail installmentDetail);
+    Installment paidInstallment(BankTransfer bankTransfer, Long orderId);
 }

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

@@ -1,16 +1,15 @@
 package com.uas.platform.b2c.fa.payment.service.impl;
 
+import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
+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.fa.payment.dao.BankInfoDao;
-import com.uas.platform.b2c.fa.payment.dao.BankTransAssociateDao;
-import com.uas.platform.b2c.fa.payment.dao.BankTransferDao;
-import com.uas.platform.b2c.fa.payment.model.BankInfo;
-import com.uas.platform.b2c.fa.payment.model.BankTransAssociate;
-import com.uas.platform.b2c.fa.payment.model.BankTransfer;
+import com.uas.platform.b2c.fa.payment.dao.*;
+import com.uas.platform.b2c.fa.payment.model.*;
 import com.uas.platform.b2c.fa.payment.service.BankInfoService;
 import com.uas.platform.b2c.fa.payment.service.BankTransferService;
+import com.uas.platform.b2c.fa.payment.service.InstallmentService;
 import com.uas.platform.b2c.logistics.dao.ReceiptDao;
 import com.uas.platform.b2c.logistics.model.Receipt;
 import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
@@ -90,10 +89,16 @@ public class BankTransferServiceImpl implements BankTransferService {
 
 	private final BankTransAssociateDao transAssociateDao;
 
+	private final EnterpriseDao enterpriseDao;
+
+	private final InstallmentService installmentService;
+
 	@Autowired
-	public BankTransferServiceImpl(BankInfoDao bankInfoDao, BankTransAssociateDao transAssociateDao) {
+	public BankTransferServiceImpl(BankInfoDao bankInfoDao, BankTransAssociateDao transAssociateDao, EnterpriseDao enterpriseDao, InstallmentService installmentService) {
 		this.bankInfoDao = bankInfoDao;
 		this.transAssociateDao = transAssociateDao;
+		this.enterpriseDao = enterpriseDao;
+		this.installmentService = installmentService;
 	}
 
 	@Override
@@ -255,34 +260,45 @@ public class BankTransferServiceImpl implements BankTransferService {
 	public BankTransfer save(BankTransfer bankTransfer, String order) {
 		// 将转账信息的ID保存到订单类型中
 		String[] orderIds = order.split("-");
+		BankTransfer saveBankTransfer = new BankTransfer();
 
-		bankTransfer.setPayUseruu(SystemSession.getUser().getUserUU());
-		bankTransfer.setPayenuu(SystemSession.getUser().getEnterprise() != null ? SystemSession.getUser().getEnterprise().getUu() : null);
-		if (bankTransfer.getPayenuu() == null) {
-			bankTransfer.setDissociative(Type.PERSONAL.value());
-		} else {
-			bankTransfer.setDissociative(Type.ENTERPRISING.value());
-		}
-		bankTransfer.setCollectUseruu(sysConf.getAdminUU()); // 收款方 设置为应鹏账号
-		bankTransfer.setCollectenuu(sysConf.getEnUU()); // 收款方设置为B2C的uu
-		bankTransfer.setBanktranssn(EncodingRulesConstant.BANKTRANSFER.replace("_TIMESTAP_NUMBER", createNumberService.getTimeNumber("trade$bank_transfer", 8)));
-		bankTransfer.setTranferCreateTime(new Date());
-		bankTransfer.setOperateType(Type.MALL.value());
-
-		BankTransfer saveBankTransfer = bankTransferDao.save(bankTransfer);
+		if (com.uas.platform.b2c.core.constant.Type.PAIDTOVENDOR.name().equals(bankTransfer.getType())) {// 付款类型为分期付款
+			if (orderIds.length > 1)
+				throw new IllegalOperatorException("多张订单合并付款只能向平台支付,如需直接支付给卖家,请前往 订单中心 进行单张支付");
 
-		for (String orderId : orderIds) {
-			Order orderN = orderService.findByOrId(orderId);
-			if (orderN == null) {
-				throw new IllegalOperatorException("您要操作的订单不存在:" + orderId);
+			Order orderN = orderService.findByOrId(orderIds[0]);
+			if (orderN == null)
+				throw new IllegalOperatorException("您要操作的订单不存在:" + orderIds[0]);
+			if (orderN.getStatus() != Status.TOBEPAID.value()) {
+				throw new IllegalOperatorException("您操作的订单不在待付款状态:" + orderIds[0]);
 			}
 
-			if (orderN.getStatus() != Status.TOBEPAID.value()) {
-				throw new IllegalOperatorException("您操作的订单不在待付款状态:" + orderId);
+			bankTransfer.setPayUseruu(SystemSession.getUser().getUserUU());
+			bankTransfer.setPayenuu(SystemSession.getUser().getEnterprise() != null ? SystemSession.getUser().getEnterprise().getUu() : null);
+			if (bankTransfer.getPayenuu() == null) {
+				bankTransfer.setDissociative(Type.PERSONAL.value());
+			} else {
+				bankTransfer.setDissociative(Type.ENTERPRISING.value());
 			}
 
+			List<BankInfo> bankInfos = bankInfoService.getEnterpriseBankInfoContainsStatus(Type.SUP.value(), Status.ALLOW.value(), orderN.getSellerenuu());
+			if (CollectionUtils.isEmpty(bankInfos))
+				throw new IllegalOperatorException("卖家收款账户不存在,请联系卖家");
+			Enterprise enterprise = enterpriseDao.findByUu(orderN.getSellerenuu());
+			if (enterprise == null)
+				throw new IllegalOperatorException("卖家企业不存在,请联系管理员");
+
+			bankTransfer.setCollectUseruu(enterprise.getEnAdminuu());
+			bankTransfer.setCollectenuu(orderN.getSellerenuu());
+
+			bankTransfer.setBanktranssn(EncodingRulesConstant.BANKTRANSFER.replace("_TIMESTAP_NUMBER", createNumberService.getTimeNumber("trade$bank_transfer", 8)));
+			bankTransfer.setTranferCreateTime(new Date());
+			bankTransfer.setOperateType(Type.SUP.value());
+
+			saveBankTransfer = bankTransferDao.save(bankTransfer);
+
 			BankTransAssociate bankTransAssociate = new BankTransAssociate();
-			bankTransAssociate.setBtaTableserNum(orderId);
+			bankTransAssociate.setBtaTableserNum(orderIds[0]);
 			bankTransAssociate.setBtaBanktranssn(saveBankTransfer.getBanktranssn());
 			btaDao.save(bankTransAssociate);
 
@@ -316,7 +332,74 @@ public class BankTransferServiceImpl implements BankTransferService {
 			}
 			purchaseDao.save(purchases);
 			orderDao.save(orderN);
+			// 单期分期付款
+			installmentService.paidInstallment(bankTransfer, orderN.getId());
+		} else {
+			bankTransfer.setPayUseruu(SystemSession.getUser().getUserUU());
+			bankTransfer.setPayenuu(SystemSession.getUser().getEnterprise() != null ? SystemSession.getUser().getEnterprise().getUu() : null);
+			if (bankTransfer.getPayenuu() == null) {
+				bankTransfer.setDissociative(Type.PERSONAL.value());
+			} else {
+				bankTransfer.setDissociative(Type.ENTERPRISING.value());
+			}
+
+			bankTransfer.setCollectUseruu(sysConf.getAdminUU()); // 收款方 设置为应鹏账号
+			bankTransfer.setCollectenuu(sysConf.getEnUU()); // 收款方设置为B2C的uu
+
+			bankTransfer.setBanktranssn(EncodingRulesConstant.BANKTRANSFER.replace("_TIMESTAP_NUMBER", createNumberService.getTimeNumber("trade$bank_transfer", 8)));
+			bankTransfer.setTranferCreateTime(new Date());
+			bankTransfer.setOperateType(Type.MALL.value());
+
+			saveBankTransfer = bankTransferDao.save(bankTransfer);
+
+			for (String orderId : orderIds) {
+				Order orderN = orderService.findByOrId(orderId);
+				if (orderN == null) {
+					throw new IllegalOperatorException("您要操作的订单不存在:" + orderId);
+				}
+
+				if (orderN.getStatus() != Status.TOBEPAID.value()) {
+					throw new IllegalOperatorException("您操作的订单不在待付款状态:" + orderId);
+				}
+
+				BankTransAssociate bankTransAssociate = new BankTransAssociate();
+				bankTransAssociate.setBtaTableserNum(orderId);
+				bankTransAssociate.setBtaBanktranssn(saveBankTransfer.getBanktranssn());
+				btaDao.save(bankTransAssociate);
+
+				orderN.setBanktfid(saveBankTransfer.getId());
+				Long userUU = SystemSession.getUser().getUserUU();
+				orderN.setStatusPaid(userUU);
+				Set<OrderDetail> orderDetails = orderN.getOrderDetails();
+				for (OrderDetail orderDetail : orderDetails) {
+					if(orderDetail.getStatus().intValue() == Status.TOBEPAID.value()) {
+						orderDetail.setStatusPaid(userUU);
+					}
+
+				}
+				orderN.setBuyaccount(bankTransfer.getJsonPament());
+				orderN.setSelleraccount(bankTransfer.getJsonReceive());
+				orderN.setPaytime(new Date());
+				orderN.setPaytype(Type.Payment_CompanyTransfer_Code.value());
+
+				//修改采购单的状态
+				List<Purchase> purchases = purchaseDao.findByOrderid(orderN.getOrderid());
+				for (Purchase purchase : purchases) {
+					if(purchase.getStatus().intValue() == Status.TOBECONFIRMED.value()) {
+						Set<PurchaseDetail> purchaseDetails = purchase.getPurchaseDetails();
+						for (PurchaseDetail purchaseDetail : purchaseDetails) {
+							if(purchaseDetail.getStatus().intValue() == Status.TOBECONFIRMED.value()) {
+								purchaseDetail.setStatusPaid(userUU);
+							}
+						}
+						purchase.setStatusPaid(userUU);
+					}
+				}
+				purchaseDao.save(purchases);
+				orderDao.save(orderN);
+			}
 		}
+
 		return saveBankTransfer;
 	}
 

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

@@ -4,11 +4,9 @@ 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.InstallmentDao;
+import com.uas.platform.b2c.fa.payment.dao.InstallmentDetailDao;
 import com.uas.platform.b2c.fa.payment.dao.InstallmentStoreDao;
-import com.uas.platform.b2c.fa.payment.model.BankInfo;
-import com.uas.platform.b2c.fa.payment.model.Installment;
-import com.uas.platform.b2c.fa.payment.model.InstallmentDetail;
-import com.uas.platform.b2c.fa.payment.model.InstallmentStore;
+import com.uas.platform.b2c.fa.payment.model.*;
 import com.uas.platform.b2c.fa.payment.service.BankInfoService;
 import com.uas.platform.b2c.fa.payment.service.InstallmentService;
 import com.uas.platform.b2c.trade.order.dao.OrderDao;
@@ -20,6 +18,7 @@ import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -41,13 +40,16 @@ public class InstallmentServiceImpl implements InstallmentService{
 
     private final BankInfoService bankInfoService;
 
+    private final InstallmentDetailDao installmentDetailDao;
+
     @Autowired
-    public InstallmentServiceImpl(InstallmentStoreDao installmentStoreDao, PurchaseDao purchaseDao, OrderDao orderDao, InstallmentDao installmentDao, BankInfoService bankInfoService) {
+    public InstallmentServiceImpl(InstallmentStoreDao installmentStoreDao, PurchaseDao purchaseDao, OrderDao orderDao, InstallmentDao installmentDao, BankInfoService bankInfoService, InstallmentDetailDao installmentDetailDao) {
         this.installmentStoreDao = installmentStoreDao;
         this.purchaseDao = purchaseDao;
         this.orderDao = orderDao;
         this.installmentDao = installmentDao;
         this.bankInfoService = bankInfoService;
+        this.installmentDetailDao = installmentDetailDao;
     }
 
     @Override
@@ -100,6 +102,9 @@ public class InstallmentServiceImpl implements InstallmentService{
         purchase.setInstallmentId(installment.getId());
         order.setInstallmentId(installment.getId());
 
+        purchaseDao.save(purchase);
+        orderDao.save(order);
+
         return installment;
     }
 
@@ -157,7 +162,31 @@ public class InstallmentServiceImpl implements InstallmentService{
         // 订单、采购单保存分期id
         purchase.setInstallmentId(installment.getId());
         order.setInstallmentId(installment.getId());
+        purchaseDao.save(purchase);
+        orderDao.save(order);
 
         return installment;
     }
+
+    @Override
+    public Installment paidInstallment(BankTransfer bankTransfer, Long orderId) {
+        // 验证分期明细合法性
+        InstallmentDetail installmentDetail = installmentDetailDao.findOne(bankTransfer.getInstallmentDetailId());
+        if (installmentDetail == null)
+            throw new IllegalOperatorException("该订单分期信息不存在,请重新确认订单");
+        if (!orderId.equals(installmentDetail.getInstallment().getOrderId()))
+            throw new IllegalOperatorException("此分期信息与该订单不符,请重新确认分期信息");
+
+        installmentDetail.setPaidDate(new Date());
+        installmentDetail.setImgs(bankTransfer.getImgUrl());
+        installmentDetail.setStatus(com.uas.platform.b2c.core.constant.Status.TOBECONFIRMED.value());
+
+        installmentDetailDao.save(installmentDetail);
+
+        // 更新分期信息状态为付款中
+        Installment installment = installmentDetail.getInstallment();
+        installment.setStatus(com.uas.platform.b2c.core.constant.Status.PAIDING.value());
+
+        return installmentDao.save(installment);
+    }
 }