Browse Source

卖家确认分期付款

wangyc 8 years ago
parent
commit
18974d3471

+ 1 - 1
src/main/java/com/uas/platform/b2c/external/erp/order/api/PurchaseController.java

@@ -229,7 +229,7 @@ public class PurchaseController {
      */
     @RequestMapping(value = "/{id}/ensurePaid", method = RequestMethod.PUT)
 	public Purchase ensurePaid(@PathVariable Long id) {
-		return purchaseService.ensurePaid(id);
+		return purchaseService.ensurePaid(id, null);
 	}
 
     /**

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

@@ -5,8 +5,12 @@ 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.*;
-import com.uas.platform.b2c.fa.payment.model.*;
+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.service.BankInfoService;
 import com.uas.platform.b2c.fa.payment.service.BankTransferService;
 import com.uas.platform.b2c.fa.payment.service.InstallmentService;
@@ -269,7 +273,7 @@ public class BankTransferServiceImpl implements BankTransferService {
 			Order orderN = orderService.findByOrId(orderIds[0]);
 			if (orderN == null)
 				throw new IllegalOperatorException("您要操作的订单不存在:" + orderIds[0]);
-			if (orderN.getStatus() != Status.TOBEPAID.value()) {
+			if (orderN.getStatus() != Status.TOBEPAID.value() && orderN.getStatus() != com.uas.platform.b2c.core.constant.Status.TOBEPAIDAGAGIN.value()) {
 				throw new IllegalOperatorException("您操作的订单不在待付款状态:" + orderIds[0]);
 			}
 

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

@@ -276,10 +276,10 @@ public class PurchaseController {
 	 * @return the purchase
 	 */
 	@RequestMapping(value = "/{id}/ensurePaid", method = RequestMethod.PUT)
-	public Purchase ensurePaid(@PathVariable Long id) {
+	public Purchase ensurePaid(@PathVariable Long id, Long installmentDetailId) {
 		assert logger != null;
 		logger.log("采购单管理", "确认付款,采购单id: " + id);
-		return purchaseService.ensurePaid(id);
+		return purchaseService.ensurePaid(id, installmentDetailId);
 	}
 
 	/**

+ 9 - 0
src/main/java/com/uas/platform/b2c/trade/order/model/Order.java

@@ -1445,6 +1445,15 @@ public class Order extends Document implements Serializable {
 		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
 	}
 
+	/**
+	 * 卖家确认分期付款(未完全付完)
+	 * @param uu
+	 */
+	public void setStatusToBePaidAgain(Long uu) {
+		this.status = com.uas.platform.b2c.core.constant.Status.TOBEPAIDAGAGIN.value();
+		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
+	}
+
 	/**
 	 * 售后中(只能单次单次的售后,暂时先这么处理)
 	 *

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

@@ -1583,6 +1583,15 @@ public class OrderDetail extends Document implements Serializable{
 		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
 	}
 
+	/**
+	 * 卖家确认分期付款(未完全付完)
+	 * @param uu
+	 */
+	public void setStatusToBePaidAgain(Long uu) {
+		this.status = com.uas.platform.b2c.core.constant.Status.TOBEPAIDAGAGIN.value();
+		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
+	}
+
 	/**
 	 * Sets status order take.
 	 *

+ 9 - 0
src/main/java/com/uas/platform/b2c/trade/order/model/Purchase.java

@@ -667,6 +667,15 @@ public class Purchase extends Document implements Serializable {
 		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
 	}
 
+	/**
+	 * 卖家确认分期付款(未完全付完)
+	 * @param uu
+	 */
+	public void setStatusToBePaidAgain(Long uu) {
+		this.status = com.uas.platform.b2c.core.constant.Status.TOBEPAIDAGAGIN.value();
+		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
+	}
+
 	/**
 	 * Sets status comfirm disagree.
 	 *

+ 10 - 12
src/main/java/com/uas/platform/b2c/trade/order/model/PurchaseDetail.java

@@ -8,18 +8,7 @@ import com.uas.platform.core.model.Status;
 import com.uas.platform.core.persistence.StatusColumn;
 import org.codehaus.jackson.annotate.JsonIgnore;
 
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.Table;
-import javax.persistence.Transient;
+import javax.persistence.*;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Objects;
@@ -1321,6 +1310,15 @@ public class PurchaseDetail extends Document {
 		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
 	}
 
+	/**
+	 * 卖家确认分期付款(未完全付完)
+	 * @param uu
+	 */
+	public void setStatusToBePaidAgain(Long uu) {
+		this.status = com.uas.platform.b2c.core.constant.Status.TOBEPAIDAGAGIN.value();
+		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
+	}
+
 	/**
 	 * 售后中(只能单次单次的售后,暂时先这么处理)
 	 *

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

@@ -245,6 +245,14 @@ public interface OrderService {
 	 */
 	Order ensurePayed(String orderid, Integer type, Long... param);
 
+	/**
+	 * Send message.
+	 *
+	 * @param purchase the purchase
+	 * @throws RuntimeException the runtime exception
+	 */
+	void sendMessage(com.uas.platform.b2c.trade.order.model.Purchase purchase);
+
 	/**
 	 * 批量确认收款
 	 *

+ 4 - 3
src/main/java/com/uas/platform/b2c/trade/order/service/PurchaseService.java

@@ -91,12 +91,13 @@ public interface PurchaseService {
 	Purchase ensuerAccept(Long puid);
 
 	/**
-	 * 确认付款,录用转账信息
+	 * 确认付款(卖家直接确认)
 	 *
-	 * @param id the id
+	 * @param id 采购单id
+	 * @param installmentDetailId 分期id
 	 * @return purchase
 	 */
-	Purchase ensurePaid(Long id);
+	Purchase ensurePaid(Long id, Long installmentDetailId);
 
 	/**
 	 * 根据id获取采购单

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

@@ -4,7 +4,7 @@ import com.alibaba.dubbo.common.json.JSON;
 import com.alibaba.dubbo.common.json.ParseException;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.uas.api.b2c_erp.buyer.model.B2cOrder;
+import com.uas.api.b2c_erp.buyer.model.*;
 import com.uas.api.exception.B2CException;
 import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
 import com.uas.platform.b2c.common.account.dao.UserDao;
@@ -57,6 +57,8 @@ import com.uas.platform.b2c.trade.order.dao.OrderDetailDao;
 import com.uas.platform.b2c.trade.order.dao.OrderIndexDetailDao;
 import com.uas.platform.b2c.trade.order.dao.PurchaseDao;
 import com.uas.platform.b2c.trade.order.model.*;
+import com.uas.platform.b2c.trade.order.model.Purchase;
+import com.uas.platform.b2c.trade.order.model.PurchaseDetail;
 import com.uas.platform.b2c.trade.order.service.OrderDetailService;
 import com.uas.platform.b2c.trade.order.service.OrderService;
 import com.uas.platform.b2c.trade.order.service.PurchaseService;
@@ -1344,12 +1346,13 @@ public class OrderServiceImpl implements OrderService {
         return newOrder;
     }
 
-	/**
-	 * Send message.
-	 *
-	 * @param purchase the purchase
-	 * @throws RuntimeException the runtime exception
-	 */
+    /**
+     * Send message.
+     *
+     * @param purchase the purchase
+     * @throws RuntimeException the runtime exception
+     */
+	@Override
 	public void sendMessage(Purchase purchase) throws RuntimeException{
         if (purchase == null) {
             return;

+ 126 - 31
src/main/java/com/uas/platform/b2c/trade/order/service/impl/PurchaseServiceImpl.java

@@ -15,7 +15,9 @@ import com.uas.platform.b2c.core.support.log.TradeBufferedLogger;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
 import com.uas.platform.b2c.core.utils.NumberUtil;
 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.model.Installment;
+import com.uas.platform.b2c.fa.payment.model.InstallmentDetail;
 import com.uas.platform.b2c.fa.settlement.dao.BillDao;
 import com.uas.platform.b2c.fa.settlement.dao.BillInfoDao;
 import com.uas.platform.b2c.fa.settlement.model.Bill;
@@ -33,16 +35,8 @@ import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
 import com.uas.platform.b2c.prod.store.dao.StoreInDao;
 import com.uas.platform.b2c.prod.store.model.StoreIn;
 import com.uas.platform.b2c.trade.aftersale.model.AfterSaleStatus;
-import com.uas.platform.b2c.trade.order.dao.OrderDao;
-import com.uas.platform.b2c.trade.order.dao.OrderDetailDao;
-import com.uas.platform.b2c.trade.order.dao.PurchaseDao;
-import com.uas.platform.b2c.trade.order.dao.PurchaseDetailDao;
-import com.uas.platform.b2c.trade.order.dao.PurchaseModifyingHistoryDao;
-import com.uas.platform.b2c.trade.order.model.Order;
-import com.uas.platform.b2c.trade.order.model.OrderDetail;
-import com.uas.platform.b2c.trade.order.model.Purchase;
-import com.uas.platform.b2c.trade.order.model.PurchaseDetail;
-import com.uas.platform.b2c.trade.order.model.PurchaseModifyingHistory;
+import com.uas.platform.b2c.trade.order.dao.*;
+import com.uas.platform.b2c.trade.order.model.*;
 import com.uas.platform.b2c.trade.order.service.OrderService;
 import com.uas.platform.b2c.trade.order.service.PurchaseDetailService;
 import com.uas.platform.b2c.trade.order.service.PurchaseService;
@@ -76,15 +70,7 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
 
 import static com.uas.platform.b2c.trade.util.Preconditions.checkArgument;
 import static com.uas.platform.b2c.trade.util.Preconditions.checkNotNull;
@@ -157,6 +143,8 @@ public class PurchaseServiceImpl implements PurchaseService {
 	private LogisticsDao logisticsDao;
 	@Autowired
 	private InstallmentDao installmentDao;
+    @Autowired
+    private InstallmentDetailDao installmentDetailDao;
 
 	@Override
 	public Purchase save(Purchase purchase) {
@@ -616,19 +604,126 @@ public class PurchaseServiceImpl implements PurchaseService {
 	}
 
 	@Override
-	public Purchase ensurePaid(Long id) {
-		// TODO 这里需要前台加入录用银行转账信息
+	public Purchase ensurePaid(Long id, Long installmentDetailId) {
 		Purchase purchase = purchaseDao.findOne(id);
-		if (!purchase.getStatus().equals(Status.TOBEPAID.value())) {
-			throw new IllegalAccessError("采购单不为待付款状态,不能确认付款");
-		}
-		Long uu = SystemSession.getUser().getUserUU();
-		// 关联卖家出货单改为已收款
-		InvoiceFPurchase iFpurchase = invoiceFPurchaseDao.findByInvoiceid(purchase.getInid());
-		iFpurchase.setStatusMoneyreceived(uu);
-		purchase.setPaid(uu);
-		invoiceFPurchaseDao.save(iFpurchase);
-		return purchaseDao.save(purchase);
+		if (purchase == null)
+			throw new IllegalOperatorException("此订单不存在,请重新确认订单信息");
+        Order order = orderDao.findByOrderid(purchase.getOrderid());
+        if (order == null)
+            throw new IllegalOperatorException("此订单不存在,请重新确认订单信息");
+
+        // 分期付款目前只支持直接付款给卖家
+        if (order.getInstallmentId() == null)
+            throw new IllegalOperatorException("此订单为向平台付款,您不可确认收款,请重新确认订单信息");
+
+        if (order.getStatus().intValue() != Status.PAID.value()
+                && order.getStatus().intValue() != Status.TOBEPAID.value()) {
+            throw new IllegalOperatorException(
+                    "订单" + order.getOrderid() + "的状态是" + Status.valueOf(order.getStatus()).getPhrase() + ",不能确认收款");
+        }
+
+        InstallmentDetail installmentDetail = installmentDetailDao.findOne(installmentDetailId);
+
+        if (installmentDetail == null)
+            throw new IllegalOperatorException("对应分期信息不存在,请重新确认分期信息");
+        Installment installment = installmentDetail.getInstallment();
+        if (!installment.getId().equals(purchase.getInstallmentId()))
+            throw new IllegalOperatorException("此订单与此分期信息不符,请重新确认订单信息");
+        if (com.uas.platform.b2c.core.constant.Status.PAID.value() != installment.getStatus().intValue())
+            throw new IllegalOperatorException("此订单分期不为待确认付款状态,请重新确认分期信息");
+        if (!installment.getCurrentNo().equals(installmentDetail.getDetno()))
+            throw new IllegalOperatorException("此次付款分期与应付分期信息不符,请重新确认分期信息");
+        if (com.uas.platform.b2c.core.constant.Status.PAID.value() != installmentDetail.getStatus().intValue())
+            throw new IllegalOperatorException("此次分期不为待确认付款状态,请重新确认分期信息");
+
+        installmentDetail.setStatus(com.uas.platform.b2c.core.constant.Status.MONEYRECEIVED.value());
+        installmentDetail.setEnsureDate(new Date());
+
+        Boolean isReceived = false;
+        if (installmentDetail.getDetno().equals(installment.getCount())) {
+            installment.setStatus(com.uas.platform.b2c.core.constant.Status.MONEYRECEIVED.value());
+            isReceived = true;
+        } else {
+            installment.setCurrentNo((short) (installment.getCurrentNo() + 1));
+        }
+
+        Long userUU = SystemSession.getUser().getUserUU();
+
+        order.setPaytype(Type.Payment_CompanyTransfer_Code.value());
+        Set<OrderDetail> orderDetails = order.getOrderDetails();
+        for (OrderDetail orderDetail : orderDetails) {
+            Goods goods = goodsDao.findByBatchCode(orderDetail.getBatchCode());
+            // 更新改订单涉及批次的上次更新时间,以延长批次有效期
+            if (goods != null) {
+                if (goods.getSourceId() == null) {
+                    goodsService.updateAvailableDays(goods, GoodsHistory.OperateType.OrderPaied, userUU);
+                }
+            }
+            // 修改明细的状态,设置为等待卖家同意
+            if ((orderDetail.getStatus().intValue() == Status.PAID.value()) || (orderDetail.getStatus().intValue() == Status.TOBEPAID.value())) {
+                if (isReceived) {
+                    orderDetail.setStatusMonecyReceviced(userUU);
+                } else {
+                    orderDetail.setStatusToBePaidAgain(userUU);
+                }
+            } else if ((orderDetail.getStatus().intValue() != Status.UNAVAILABLE_DISAGREE.value()) && (orderDetail.getStatus().intValue() != Status.TOBEREFUNDED.value())
+                    && (orderDetail.getStatus().intValue() != Status.UNAVAILABLE_PERSONAL.value())) {
+                throw new IllegalOperatorException("当前的订单存在明细行状态不正常:" + orderDetail.getDetailid() + " 状态是"
+                        + Status.valueOf(orderDetail.getStatus()).getPhrase());
+            }
+        }
+
+        // 设置为等待卖家同意
+        if (isReceived) {
+            order.setStatusMonecyReceviced(userUU);
+        } else {
+            order.setStatusToBePaidAgain(userUU);
+        }
+
+        order.setPaytime(new Date());
+        Order newOrder = orderDao.save(order);
+
+        ArrayList<Integer> statusList = new ArrayList<>();
+        Collections.addAll(statusList, Status.TOBECONFIRMED.value(), Status.PAID.value());
+
+        if (statusList.contains(purchase.getStatus())) {
+            if (isReceived) {
+                purchase.setStatusComfirmed(userUU);
+            } else {
+                purchase.setStatusToBePaidAgain(userUU);
+            }
+
+            // 设置明细的状态
+            Set<PurchaseDetail> purchaseDetails = purchase.getPurchaseDetails();
+            for (PurchaseDetail purchaseDetail : purchaseDetails) {
+                if (statusList.contains(purchaseDetail.getStatus())) {
+                    if (isReceived) {
+                        purchaseDetail.setStatusComfirmed(userUU);
+                    } else {
+                        purchaseDetail.setStatusToBePaidAgain(userUU);
+                    }
+                } else if ((purchaseDetail.getStatus().intValue() != Status.UNAVAILABLE_DISAGREE.value())
+                        && (purchaseDetail.getStatus().intValue() != Status.UNAVAILABLE_PERSONAL.value())) {
+                    throw new IllegalOperatorException("存在采购单明细状态异常:" + purchaseDetail.getDetailid() + ", 状态是:"
+                            + Status.valueOf(purchaseDetail.getStatus()).getPhrase());
+                }
+            }
+
+            purchase.setSendstatus(Status.NOT_UPLOAD.value());
+            purchaseDao.save(purchase);
+            //发送短信,异常不作处理
+            try {
+                orderService.sendMessage(purchase);
+            }catch (RuntimeException e){}
+        } else if ((purchase.getStatus().intValue() != Status.UNAVAILABLE_DISAGREE.value())
+                && (purchase.getStatus().intValue() != Status.UNAVAILABLE_PERSONAL.value())) { // 采购单不在用户取消状态
+            throw new IllegalOperatorException("采购单" + purchase.getPurchaseid() + ", 状态是"
+                    + Status.valueOf(purchase.getStatus()).getPhrase() + ",是异常状态");
+        }
+
+        installmentDetailDao.save(installmentDetail);
+        installmentDao.save(installment);
+        return purchase;
 	}
 
 	@Override