浏览代码

直接付款给卖家增加取消订单、取消订单申请功能

wangyc 8 年之前
父节点
当前提交
f333f0b00b

+ 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 525 卖家取消申请待确认}
+	 */
+	CANCELTOBECONFIRMED(525, "卖家取消申请待确认"),
 	/**
 	 * {@code 524 待继续分期付款}
 	 */

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

@@ -601,13 +601,13 @@ public class PurchaseController {
 	/**
 	 * 卖家取消订单 释放库存
 	 *
-	 * @param orderid the orderid
+	 * @param purchaseId the purchaseId
 	 * @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 purchaseService.releaseByVendor(orderid);
+	@RequestMapping(value = "simpleinfo/ones/{purchaseId}/release", method = RequestMethod.PUT)
+	public String release(@PathVariable String purchaseId, @RequestBody String reason) {
+		logger.log("卖家订单管理", "取消订单", "根据订单号: " + purchaseId + "取消订单,释放库存");
+		return purchaseService.release(purchaseId);
 	}
 }

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

@@ -1499,6 +1499,15 @@ public class OrderDetail extends Document implements Serializable{
 		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
 	}
 
+	/**
+	 * 卖家申请取消订单(未完全付完)
+	 * @param uu
+	 */
+	public void setStatusCancelToBeConfirmed(Long uu) {
+		this.status = com.uas.platform.b2c.core.constant.Status.CANCELTOBECONFIRMED.value();
+		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
+	}
+
 	/**
 	 * Sets status unavailable return.
 	 *

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

@@ -676,6 +676,15 @@ public class Purchase extends Document implements Serializable {
 		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
 	}
 
+	/**
+	 * 卖家申请取消订单(未完全付完)
+	 * @param uu
+	 */
+	public void setStatusCancelToBeConfirmed(Long uu) {
+		this.status = com.uas.platform.b2c.core.constant.Status.CANCELTOBECONFIRMED.value();
+		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
+	}
+
 	/**
 	 * Sets status comfirm disagree.
 	 *

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

@@ -1238,6 +1238,15 @@ public class PurchaseDetail extends Document {
 		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
 	}
 
+	/**
+	 * 卖家申请取消订单(未完全付完)
+	 * @param uu
+	 */
+	public void setStatusCancelToBeConfirmed(Long uu) {
+		this.status = com.uas.platform.b2c.core.constant.Status.CANCELTOBECONFIRMED.value();
+		this.statushistory = addStatusHistory(this.statushistory, uu, this.status);
+	}
+
 	/**
 	 * Sets status unavailable return.
 	 *

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

@@ -403,8 +403,8 @@ public interface PurchaseService {
 	/**
 	 * 卖家取消订单,释放库存
 	 *
-	 * @param orderid the orderid
+	 * @param purchaseId the purchaseId
 	 * @return string string
 	 */
-	String releaseByVendor(String orderid);
+	String release(String purchaseId);
 }

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

@@ -1579,76 +1579,92 @@ public class PurchaseServiceImpl implements PurchaseService {
 	/**
 	 * 卖家取消订单,释放库存
 	 *
-	 * @param orderid
+	 * @param purchaseId
 	 * @return string string
 	 */
 	@Transactional
 	@Override
-	public String releaseByVendor(String orderid) {
-		Order order = orderDao.findByOrderid(orderid);
+	public String release(String purchaseId) {
+		Purchase purchase = purchaseDao.findByPurchaseid(purchaseId);
+		if (purchase == null)
+			throw new IllegalOperatorException("订单不存在");
+		Order order = orderDao.findByOrderid(purchase.getOrderid());
 		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().getEnterprise() == null) {
+			throw new IllegalOperatorException("您的企业信息有误,请重新选择企业");
 		}
-		if (SystemSession.getUser().getUserUU() == null) {
-			throw new IllegalOperatorException("您当前的账号不存在或未登录!请重新登录");
+		if (!SystemSession.getUser().getEnterprise().getUu().equals(purchase.getInstallment().getSellerenuu())) {
+			throw new IllegalOperatorException("该订单不属于当前企业,请重新确认信息");
 		}
-		if (SystemSession.getUser().getUserUU() != order.getInstallment().getSellerenuu()) {
-			throw new IllegalOperatorException("您当前的账号登录异常!请重新登录");
+		if (purchase.getInstallmentId() == null) {
+			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("此订单已付款,不可取消订单");
+		Installment installment = installmentDao.findOne(purchase.getInstallmentId());
+		if (installment == null) {
+			throw new IllegalOperatorException("订单:" + order.getOrderid() + "分期信息有误,请重新确认或联系客服");
 		}
-		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<>();
+
+		Date sysDate = new Date();
 		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 (!org.springframework.util.CollectionUtils.isEmpty(purchases)) {
-			for (Purchase purchase : purchases) {
+		if (sysDate.after(installment.getInstallmentDetails().get(0).getDeadline())) {// 当前时间已将超过一期的截止时间
+			if (com.uas.platform.b2c.core.constant.Status.TOBEPAID.value() == installment.getStatus().intValue()) {// 买家未付款,直接取消
+				Set<String> uuids = new HashSet<>();
+				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 (!org.springframework.util.CollectionUtils.isEmpty(purchases)) {
+					for (Purchase purchase1: purchases) {
+						int puStatus = purchase1.getStatus().intValue();
+						purchase1.setStatusUnAvailablePersonal(uu);
+						purchase1.setUnavailableTime(new Date());
+						for (PurchaseDetail detail : purchase1.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);
+				}
+			} else {// 买家已付款,卖家发起取消申请
+				Set<OrderDetail> orderDetails = order.getOrderDetails();
+				for (OrderDetail orderDetail : orderDetails) {
+					if (orderDetail.getStatus().equals(com.uas.platform.b2c.core.constant.Status.PAID.value())
+							|| orderDetail.getStatus().equals(com.uas.platform.b2c.core.constant.Status.TOBEPAIDAGAGIN.value())) {
+						orderDetail.setStatusCancelToBeConfirmed(uu);
+					}
+				}
+
 				int puStatus = purchase.getStatus().intValue();
-				purchase.setStatusUnAvailablePersonal(uu);
-				purchase.setUnavailableTime(new Date());
+				purchase.setStatusCancelToBeConfirmed(uu);
 				for (PurchaseDetail detail : purchase.getPurchaseDetails()) {
 					if (puStatus == detail.getStatus().intValue()) {
-						detail.setStatusUnAvailablePersonal(uu);
-						detail.setUnavailableTime(new Date());
+						detail.setStatusCancelToBeConfirmed(uu);
 					}
 				}
+				purchaseDao.save(purchase);
+				orderDao.save(order);
 			}
+		} else {
+			throw new IllegalOperatorException("买家未逾期付款,您不可取消");
 		}
-		purchaseDao.save(purchases);
-		orderDao.save(order);
-		for (String uuid : uuids) {
-			goodsService.updateComponentTradeInfos(uuid);
-		}
+
 		return "success";
 	}
 }