|
|
|
@ -420,6 +420,8 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder |
|
|
|
group.setIsFace(STATUS_WAIT_PAY); |
|
|
|
} |
|
|
|
group.setShopId(dto.getShopId()); |
|
|
|
group.setRegionId(dto.getRegionId()); |
|
|
|
group.setShopName(order.getShopName()); |
|
|
|
group.setHeadUserId(dto.getUserId()); |
|
|
|
group.setTargetMembers(gp.getTargetMembers()); |
|
|
|
//group.setCurrentMembers(1);
|
|
|
|
@ -681,6 +683,8 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder |
|
|
|
//普通拼团团长发起拼团进缓存
|
|
|
|
if(order.getOrderType() == ORDER_TYPE_GROUP){ |
|
|
|
group.setCurrentMembers(newMembers); |
|
|
|
group.setStatus(GROUP_STATUS_FORMING); |
|
|
|
group.setIsFace(0); |
|
|
|
shopGroupOrderCacheUtil.put(order.getShopId(), group); |
|
|
|
} |
|
|
|
}else{ |
|
|
|
@ -775,7 +779,7 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
public void cancelOrder(String orderId, String userId,Integer refundType,Integer refundTypeStatus) { |
|
|
|
public void cancelOrder(String orderId, String userId,Integer refundType,Integer refundTypeStatus, String reason, String pictures) { |
|
|
|
MallOrder order = getById(orderId); |
|
|
|
if (order == null) throw new RuntimeException("订单不存在"); |
|
|
|
if (!userId.equals(order.getUserId())) throw new RuntimeException("无权操作该订单"); |
|
|
|
@ -788,10 +792,10 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder |
|
|
|
|
|
|
|
// 拼团 / 面对面团
|
|
|
|
if (order.getOrderType() == ORDER_TYPE_GROUP || order.getOrderType() == 3) { |
|
|
|
handleGroupCancel(order,refundType,refundTypeStatus); |
|
|
|
handleGroupCancel(order,refundType,refundTypeStatus, reason, pictures); |
|
|
|
} else { |
|
|
|
// 直接购买
|
|
|
|
handleDirectCancel(order, refundType,refundTypeStatus); |
|
|
|
handleDirectCancel(order, refundType,refundTypeStatus, reason, pictures); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -802,22 +806,22 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder |
|
|
|
/** |
|
|
|
* 拼团取消总调度:判断团长/团员后分流 |
|
|
|
*/ |
|
|
|
private void handleGroupCancel(MallOrder order,Integer refundType,Integer refundTypeStatus) { |
|
|
|
private void handleGroupCancel(MallOrder order,Integer refundType,Integer refundTypeStatus, String reason, String pictures) { |
|
|
|
MallOrderGroup group = findGroupByOrderId(order.getId()); |
|
|
|
if (group == null) throw new RuntimeException("拼团信息不存在"); |
|
|
|
|
|
|
|
boolean isHead = order.getId().equals(group.getHeadOrderId()); |
|
|
|
if (isHead) { |
|
|
|
handleGroupHeadCancel(order, group,refundType,refundTypeStatus); |
|
|
|
handleGroupHeadCancel(order, group,refundType,refundTypeStatus, reason, pictures); |
|
|
|
} else { |
|
|
|
handleGroupMemberCancel(order, group,refundType,refundTypeStatus); |
|
|
|
handleGroupMemberCancel(order, group,refundType,refundTypeStatus, reason, pictures); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 团长取消订单 |
|
|
|
*/ |
|
|
|
private void handleGroupHeadCancel(MallOrder order, MallOrderGroup group,Integer refundType,Integer refundTypeStatus) { |
|
|
|
private void handleGroupHeadCancel(MallOrder order, MallOrderGroup group,Integer refundType,Integer refundTypeStatus, String reason, String pictures) { |
|
|
|
boolean isFace2Face = (order.getOrderType() == 3); |
|
|
|
|
|
|
|
// ---- 1. 未支付 ----
|
|
|
|
@ -909,13 +913,13 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder |
|
|
|
} |
|
|
|
|
|
|
|
// ---- 3. 已成团后 ----
|
|
|
|
handlePostGroupCancel(order, group,refundType,refundTypeStatus); |
|
|
|
handlePostGroupCancel(order, group,refundType,refundTypeStatus, reason, pictures); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 团员取消订单 |
|
|
|
*/ |
|
|
|
private void handleGroupMemberCancel(MallOrder order, MallOrderGroup group,Integer refundType,Integer refundTypeStatus) { |
|
|
|
private void handleGroupMemberCancel(MallOrder order, MallOrderGroup group,Integer refundType,Integer refundTypeStatus, String reason, String pictures) { |
|
|
|
// ---- 1. 未支付 ----
|
|
|
|
if (order.getStatus() == STATUS_WAIT_PAY) { |
|
|
|
updateOrderStatus(order.getId(), STATUS_CANCELLED); |
|
|
|
@ -955,13 +959,13 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder |
|
|
|
} |
|
|
|
|
|
|
|
// ---- 3. 已成团后 ----
|
|
|
|
handlePostGroupCancel(order, group,refundType,refundTypeStatus); |
|
|
|
handlePostGroupCancel(order, group,refundType,refundTypeStatus, reason, pictures); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 成团后取消逻辑(团长和团员共用) |
|
|
|
*/ |
|
|
|
private void handlePostGroupCancel(MallOrder order, MallOrderGroup group,Integer refundType,Integer refundTypeStatus) { |
|
|
|
private void handlePostGroupCancel(MallOrder order, MallOrderGroup group,Integer refundType,Integer refundTypeStatus, String reason, String pictures) { |
|
|
|
boolean isFace2Face = (order.getOrderType() == 3); |
|
|
|
boolean isHead = order.getId().equals(group.getHeadOrderId()); |
|
|
|
|
|
|
|
@ -977,7 +981,7 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder |
|
|
|
if (!isHead) { |
|
|
|
throw new RuntimeException("面对面配送团只有团长可以取消订单"); |
|
|
|
} |
|
|
|
handleFace2FaceDeliveryCancel(order, group, refundType,refundTypeStatus); |
|
|
|
handleFace2FaceDeliveryCancel(order, group, refundType,refundTypeStatus, reason, pictures); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
@ -993,7 +997,7 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder |
|
|
|
} |
|
|
|
} |
|
|
|
if (delivery != null && delivery.getStatus() != null && delivery.getStatus() >= 1) { |
|
|
|
applyMerchantRefund(delivery.getWorkerId(),order, "用户申请取消订单退款",refundType,refundTypeStatus); |
|
|
|
applyMerchantRefund(delivery.getWorkerId(),order, appendCancelReason("用户申请取消订单退款", reason),refundType,refundTypeStatus, pictures); |
|
|
|
}else{ |
|
|
|
// 允许取消
|
|
|
|
cancelDeliveryOrderByOrderId(order.getId()); |
|
|
|
@ -1004,14 +1008,14 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder |
|
|
|
} |
|
|
|
} else { |
|
|
|
// 自取(待消费)→ 待商家同意退款
|
|
|
|
applyMerchantRefund(null,order, "用户申请取消订单退款",refundType,refundTypeStatus); |
|
|
|
applyMerchantRefund(null,order, appendCancelReason("用户申请取消订单退款", reason),refundType,refundTypeStatus, pictures); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 面对面团 + 配送 成团后团长取消(批量操作所有子订单) |
|
|
|
*/ |
|
|
|
private void handleFace2FaceDeliveryCancel(MallOrder order, MallOrderGroup group,Integer refundType,Integer refundTypeStatus) { |
|
|
|
private void handleFace2FaceDeliveryCancel(MallOrder order, MallOrderGroup group,Integer refundType,Integer refundTypeStatus, String reason, String pictures) { |
|
|
|
MallDeliveryOrder delivery = findDeliveryByOrderId(order.getId()); |
|
|
|
|
|
|
|
if (delivery != null && delivery.getStatus() != null && delivery.getStatus() == 0) { |
|
|
|
@ -1044,7 +1048,7 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder |
|
|
|
if (subOrder != null && subOrder.getStatus() != STATUS_CANCELLED |
|
|
|
&& subOrder.getStatus() != STATUS_REFUNDED) { |
|
|
|
subOrder.setGroupOrderIds(group.getGroupOrderIds()); |
|
|
|
applyMerchantRefund(delivery.getWorkerId(),subOrder, "面对面团团长申请取消",refundType,refundTypeStatus); |
|
|
|
applyMerchantRefund(delivery.getWorkerId(),subOrder, appendCancelReason("面对面团团长申请取消", reason),refundType,refundTypeStatus, pictures); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -1057,7 +1061,7 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder |
|
|
|
/** |
|
|
|
* 直接购买订单取消 |
|
|
|
*/ |
|
|
|
private void handleDirectCancel(MallOrder order,Integer refundType,Integer refundTypeStatus) { |
|
|
|
private void handleDirectCancel(MallOrder order,Integer refundType,Integer refundTypeStatus, String reason, String pictures) { |
|
|
|
// ---- 1. 未支付 ----
|
|
|
|
if (order.getStatus() == STATUS_WAIT_PAY) { |
|
|
|
updateOrderStatus(order.getId(), STATUS_CANCELLED); |
|
|
|
@ -1083,7 +1087,7 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder |
|
|
|
MallDeliveryOrder delivery = findDeliveryByOrderId(order.getId()); |
|
|
|
if (delivery != null && delivery.getStatus() != null && delivery.getStatus() >= 1) { |
|
|
|
// 配送员已接单 → 走商家或者配送员同意流程
|
|
|
|
applyMerchantRefund(delivery.getWorkerId(),order, "用户申请取消订单", refundType, refundTypeStatus); |
|
|
|
applyMerchantRefund(delivery.getWorkerId(),order, appendCancelReason("用户申请取消订单", reason), refundType, refundTypeStatus, pictures); |
|
|
|
} else { |
|
|
|
// 未接单 → 直接取消并退款
|
|
|
|
cancelDeliveryOrderByOrderId(order.getId()); |
|
|
|
@ -1098,7 +1102,7 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder |
|
|
|
autoRefund(order, "用户取消订单,系统退款"); |
|
|
|
restoreStock(order.getId()); |
|
|
|
}else{ |
|
|
|
applyMerchantRefund(null,order, "用户申请取消订单", refundType, refundTypeStatus); |
|
|
|
applyMerchantRefund(null,order, appendCancelReason("用户申请取消订单", reason), refundType, refundTypeStatus, pictures); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -1703,12 +1707,19 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder |
|
|
|
* 创建退款记录 |
|
|
|
*/ |
|
|
|
private void createRefundRecord(String workerId,MallOrder order, BigDecimal amount, String reason,Integer refundType,Integer refundTypeStatus) { |
|
|
|
createRefundRecord(workerId, order, amount, reason, refundType, refundTypeStatus, null); |
|
|
|
} |
|
|
|
|
|
|
|
private void createRefundRecord(String workerId,MallOrder order, BigDecimal amount, String reason,Integer refundType,Integer refundTypeStatus, String pictures) { |
|
|
|
MallRefundRecord record = new MallRefundRecord(); |
|
|
|
record.setOrderId(order.getId()); |
|
|
|
record.setUserId(order.getUserId()); |
|
|
|
record.setRefundAmount(amount); |
|
|
|
record.setRegionId(order.getRegionId()); |
|
|
|
record.setReason(reason); |
|
|
|
if (StringUtils.isNotBlank(pictures)) { |
|
|
|
record.setPictures(pictures); |
|
|
|
} |
|
|
|
if(order.getGroupOrderIds() != null){ |
|
|
|
record.setGroupOrderIds(order.getGroupOrderIds()); |
|
|
|
} |
|
|
|
@ -1967,6 +1978,10 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder |
|
|
|
* 申请商家同意退款:订单状态 → 待商家同意退款(7),退款记录状态 → 待商家同意(0) |
|
|
|
*/ |
|
|
|
private void applyMerchantRefund(String workerId, MallOrder order, String reason,Integer refundType,Integer refundTypeStatus) { |
|
|
|
applyMerchantRefund(workerId, order, reason, refundType, refundTypeStatus, null); |
|
|
|
} |
|
|
|
|
|
|
|
private void applyMerchantRefund(String workerId, MallOrder order, String reason,Integer refundType,Integer refundTypeStatus, String pictures) { |
|
|
|
updateOrderStatus(order.getId(), STATUS_WAIT_REFUND); |
|
|
|
//更新缓存
|
|
|
|
MallOrderVO vo = userPendingOrderCacheUtil.get(order.getUserId(), order.getId()); |
|
|
|
@ -1981,7 +1996,14 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder |
|
|
|
.set(MallDeliveryOrder::getIsReturn, IS_RETURN_EXPRESS); |
|
|
|
mallDeliveryOrderMapper.update(null, duw); |
|
|
|
} |
|
|
|
createRefundRecord(workerId,order, order.getTotalAmount(), reason,refundType,refundTypeStatus); |
|
|
|
createRefundRecord(workerId,order, order.getTotalAmount(), reason,refundType,refundTypeStatus, pictures); |
|
|
|
} |
|
|
|
|
|
|
|
private String appendCancelReason(String baseReason, String reason) { |
|
|
|
if (StringUtils.isBlank(reason)) { |
|
|
|
return baseReason; |
|
|
|
} |
|
|
|
return baseReason + ":" + reason; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
|