Bladeren bron

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

ouxq 8 jaren geleden
bovenliggende
commit
693234568b

+ 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);
 	}
 
     /**

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

@@ -51,7 +51,7 @@ public class Installment {
 
     /**
      * 状态
-     * TOBEPAID(503, "待付款"),PAIDING(523, "付款中"),PAID(504, "已付款")
+     * TOBEPAID(503, "待付款"),PAID(504, "已付款"),MONEYRECEIVED(505, "已收款")
      */
     @Column(name = "ins_status")
     private Integer status;

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

@@ -49,7 +49,7 @@ public class InstallmentDetail {
 
     /**
      * 本期状态
-     * TOBEPAID(503, "待付款"),PAID(504, "已付款")
+     * TOBEPAID(503, "待付款"),PAID(504, "已付款"),MONEYRECEIVED(505, "已收款")
      */
     @Column(name = "insd_status")
     private Integer status;

+ 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]);
 			}
 

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

@@ -184,15 +184,15 @@ public class InstallmentServiceImpl implements InstallmentService{
         if (!installment.getCurrentNo().equals(installmentDetail.getDetno())) {
             throw new IllegalOperatorException("此次付款分期与应付分期信息不符,请重新确认分期信息");
         }
-        if ((Status.TOBEPAID.value() != installment.getStatus().intValue()) && (Status.PAIDING.value() != installment.getStatus().intValue())) {
+        if ((Status.TOBEPAID.value() != installment.getStatus().intValue()) && (Status.PAID.value() != installment.getStatus().intValue())) {
             throw new IllegalOperatorException("此分期不为待付款状态,请重新确认分期信息");
         }
 
-        installment.setStatus(com.uas.platform.b2c.core.constant.Status.PAIDING.value());
+        installment.setStatus(com.uas.platform.b2c.core.constant.Status.PAID.value());
 
         installmentDetail.setPaidDate(new Date());
         installmentDetail.setImgs(bankTransfer.getImgUrl());
-        installmentDetail.setStatus(com.uas.platform.b2c.core.constant.Status.TOBECONFIRMED.value());
+        installmentDetail.setStatus(com.uas.platform.b2c.core.constant.Status.PAID.value());
 
         installmentDetailDao.save(installmentDetail);
 

+ 13 - 0
src/main/java/com/uas/platform/b2c/trade/order/controller/OrderController.java

@@ -576,6 +576,19 @@ public class OrderController {
 		return orderService.releaseOrder(orderid, reason);
 	}
 
+	/**
+	 * 卖家取消订单 释放库存
+	 *
+	 * @param orderid the orderid
+	 * @param reason  the reason
+	 * @return the string
+	 */
+	@RequestMapping(value = "simpleinfo/ones/{orderid}/releaseByVendor", method = RequestMethod.PUT)
+	public String releaseOrderByVendor(@PathVariable String orderid, @RequestBody String reason) {
+		logger.log("卖家订单管理", "取消订单", "根据订单号: " + orderid + "取消订单,释放库存");
+		return orderService.releaseByVendor(orderid);
+	}
+
 	/**
 	 * 失效订单 (因确认是订单批次库存不足)
 	 *

+ 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);
+	}
+
 	/**
 	 * 售后中(只能单次单次的售后,暂时先这么处理)
 	 *

+ 15 - 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);
+
 	/**
 	 * 批量确认收款
 	 *
@@ -391,6 +399,13 @@ public interface OrderService {
 	 */
 	String releaseOrder(String orderid, String reason);
 
+	/**
+	 * 卖家取消订单,释放库存
+	 *
+	 * @param orderid the orderid
+	 * @return string string
+	 */
+	String releaseByVendor(String orderid);
 	/**
 	 * 失效订单 (因确认是订单批次库存不足)
 	 *

+ 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获取采购单

+ 116 - 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;
@@ -21,8 +21,10 @@ import com.uas.platform.b2c.core.utils.FastjsonUtils;
 import com.uas.platform.b2c.core.utils.NumberUtil;
 import com.uas.platform.b2c.fa.payment.dao.BankTransferDao;
 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.BankTransfer;
 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.service.BankInfoService;
 import com.uas.platform.b2c.fa.settlement.dao.BillDao;
 import com.uas.platform.b2c.fa.settlement.dao.BillInfoDao;
@@ -57,6 +59,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;
@@ -1264,6 +1268,13 @@ public class OrderServiceImpl implements OrderService {
     @Transactional
     public Order ensurePayed(String orderid, Integer type, Long... param) {
         Order order = orderDao.findByOrderid(orderid);
+        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(
@@ -1337,12 +1348,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;
@@ -1516,6 +1528,15 @@ public class OrderServiceImpl implements OrderService {
     @Override
     public Order buyerOrderDetail(String orderid) {
         Order order = orderDao.findOrderByOrderid(orderid);
+        //买家中心--订单详情页 增加分期付款信息
+        Long installmentId = order.getInstallmentId();
+        if (installmentId != null) {
+            Installment installment = installmentDao.findOne(installmentId);
+            if (installment == null) {
+                throw new IllegalOperatorException("订单:" + order.getOrderid() + "分期信息有误,请重新确认或联系客服");
+            }
+            order.setInstallment(installment);
+        }
         Set<OrderDetail> orderDetails = order.getOrderDetails();
         for (OrderDetail orderDetail : orderDetails) {
             Goods goods = goodsService.findGoodsByBatchCode(orderDetail.getBatchCode());
@@ -1878,6 +1899,18 @@ public class OrderServiceImpl implements OrderService {
             order.setPuExInfoMapToJson(puExInfoMap);
         }
 
+        //买家中心--订单中心 增加分期付款信息
+        for (Order order : pageOrders) {
+            Long installmentId = order.getInstallmentId();
+            if (installmentId != null) {
+                Installment installment = installmentDao.findOne(installmentId);
+                if (installment == null) {
+                    throw new IllegalOperatorException("订单:" + order.getOrderid() + "分期信息有误,请重新确认或联系客服");
+                }
+                order.setInstallment(installment);
+            }
+        }
+
         modelMap.addAttribute("content", pageOrders.getContent());
         modelMap.addAttribute("totalElements", pageOrders.getTotalElements());
         modelMap.addAttribute("totalPages", pageOrders.getTotalPages());
@@ -2118,6 +2151,82 @@ public class OrderServiceImpl implements OrderService {
         return "success";
     }
 
+    /**
+     * 卖家取消订单,释放库存
+     *
+     * @param orderid
+     * @return string string
+     */
+    @Transactional
+    @Override
+    public String releaseByVendor(String orderid) {
+        Order order = orderDao.findByOrderid(orderid);
+        if (order == null) {
+            throw new IllegalOperatorException("此订单不存在");
+        }
+        Long installmentId = order.getInstallmentId();
+        if (installmentId != null) {
+            Installment installment = installmentDao.findOne(installmentId);
+            if (installment == null) {
+                throw new IllegalOperatorException("订单:" + order.getOrderid() + "分期信息有误,请重新确认或联系客服");
+            }
+            order.setInstallment(installment);
+        }
+        if (SystemSession.getUser().getUserUU() == null) {
+            throw new IllegalOperatorException("您当前的账号不存在或未登录!请重新登录");
+        }
+        if (SystemSession.getUser().getUserUU() != order.getInstallment().getSellerenuu()) {
+            throw new IllegalOperatorException("您当前的账号登录异常!请重新登录");
+        }
+        Set<Integer> status = new HashSet<>();
+        Collections.addAll(status, Status.TOBECONFIRMED.value(), Status.TOBEPAID.value(), Status.CONFIRMED.value());
+        if (!status.contains(order.getStatus())) {
+            throw new IllegalOperatorException("此订单已付款,不可取消订单");
+        }
+        Date dateDeadline = order.getInstallment().getInstallmentDetails().get(0).getDeadline();
+        Date datePaidData = order.getInstallment().getInstallmentDetails().get(0).getPaidDate();
+        Date newDate = new Date();
+        if (dateDeadline.after(datePaidData) && datePaidData != null) {
+            throw new IllegalOperatorException("买家已付款且付款日期没有超过截止期限,不可取消订单");
+        }
+        if (dateDeadline.after(newDate) && datePaidData == null) {
+            throw new IllegalOperatorException("没有超过付款截止日期,不可取消订单");
+        }
+        Set<String> uuids = new HashSet<>();
+        Long uu = SystemSession.getUser().getUserUU();
+        order.setStatusUnAvailablePersonal(uu);
+        order.setUnavailableTime(new Date());
+        Set<OrderDetail> orderDetails = order.getOrderDetails();
+        for (OrderDetail orderDetail : orderDetails) {
+            if (orderDetail.getStatus().equals(Status.CONFIRMED.value())
+                    || orderDetail.getStatus().equals(Status.TOBEPAID.value())) {
+                uuids.add(orderDetail.getUuid());
+                orderDetail.setStatusUnAvailablePersonal(uu);
+                goodsService.releaseReserve(orderDetail.getBatchCode(), orderDetail.getNumber());
+            }
+        }
+        List<Purchase> purchases = purchaseDao.findByOrderid(order.getOrderid());
+        if (!CollectionUtils.isEmpty(purchases)) {
+            for (Purchase purchase : purchases) {
+                int puStatus = purchase.getStatus().intValue();
+                purchase.setStatusUnAvailablePersonal(uu);
+                purchase.setUnavailableTime(new Date());
+                for (PurchaseDetail detail : purchase.getPurchaseDetails()) {
+                    if (puStatus == detail.getStatus().intValue()) {
+                        detail.setStatusUnAvailablePersonal(uu);
+                        detail.setUnavailableTime(new Date());
+                    }
+                }
+            }
+        }
+        purchaseDao.save(purchases);
+        orderDao.save(order);
+        for (String uuid : uuids) {
+            goodsService.updateComponentTradeInfos(uuid);
+        }
+        return "success";
+    }
+
 
     // TODO 查询接口 支持类型 :现货
     @Override

+ 148 - 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
@@ -1071,6 +1166,19 @@ public class PurchaseServiceImpl implements PurchaseService {
 		setExceptionStatus(pageInfo, exceptionType);
 
 		Page<Purchase> purchasePage = getPurchaseByStatus(pageInfo, null, status, isProof);
+
+		//卖家中心--订单中心 增加分期付款信息
+		for (Purchase purchase : purchasePage) {
+			Long installmentId = purchase.getInstallmentId();
+			if (installmentId != null) {
+				Installment installment = installmentDao.findOne(installmentId);
+				if (installment == null) {
+					throw new IllegalOperatorException("订单:" + purchase.getPurchaseid() + "分期信息有误,请重新确认或联系客服");
+				}
+				purchase.setInstallment(installment);
+			}
+		}
+
 		modelMap.put("totalElements", purchasePage.getTotalElements());
 		modelMap.put("totalPages", purchasePage.getTotalPages());
 		modelMap.put("content", purchasePage.getContent());
@@ -1209,6 +1317,15 @@ public class PurchaseServiceImpl implements PurchaseService {
 			return new ResultMap(CodeType.NO_INFO, "采购单编号不能为空");
 		}
 		Purchase purchase = purchaseDao.findByPurchaseid(purchaseId);
+		//卖家中心--采购单详情页 增加分期付款信息
+		Long installmentId = purchase.getInstallmentId();
+		if (installmentId != null) {
+			Installment installment = installmentDao.findOne(installmentId);
+			if (installment == null) {
+				throw new IllegalOperatorException("订单:" + purchase.getPurchaseid() + "分期信息有误,请重新确认或联系客服");
+			}
+			purchase.setInstallment(installment);
+		}
 		Long enUU = SystemSession.getUser().getEnterprise().getUu();
 		if (!Objects.equals(enUU, purchase.getSellerenuu())) {
 			return new ResultMap(CodeType.NOT_PERMIT, "非法获取操作");