|
|
@ -138,17 +138,32 @@ public class MallRefundRecordServiceImpl extends ServiceImpl<MallRefundRecordMap |
|
|
return amount == null ? BigDecimal.ZERO : amount; |
|
|
return amount == null ? BigDecimal.ZERO : amount; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private boolean shouldIncludePackageFee(MallOrder order) { |
|
|
|
|
|
return order == null |
|
|
|
|
|
|| !Integer.valueOf(DELIVERY_TYPE_SELF).equals(order.getDeliveryType()) |
|
|
|
|
|
|| !Integer.valueOf(0).equals(order.getIsPack()); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
private BigDecimal goodsPackageAmount(MallOrder order) { |
|
|
private BigDecimal goodsPackageAmount(MallOrder order) { |
|
|
if (order == null) { |
|
|
if (order == null) { |
|
|
return BigDecimal.ZERO; |
|
|
return BigDecimal.ZERO; |
|
|
} |
|
|
} |
|
|
return safeAmount(order.getGoodsAmount()).add(safeAmount(order.getPackageFee())); |
|
|
BigDecimal packageFee = shouldIncludePackageFee(order) ? safeAmount(order.getPackageFee()) : BigDecimal.ZERO; |
|
|
|
|
|
return safeAmount(order.getGoodsAmount()).add(packageFee); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private BigDecimal deliveryAmount(MallOrder order) { |
|
|
private BigDecimal deliveryAmount(MallOrder order) { |
|
|
return order == null ? BigDecimal.ZERO : safeAmount(order.getDeliveryFee()); |
|
|
return order == null ? BigDecimal.ZERO : safeAmount(order.getDeliveryFee()); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private BigDecimal deliveryMarketplaceAmount(MallDeliveryOrder delivery) { |
|
|
|
|
|
return delivery == null ? BigDecimal.ZERO : safeAmount(delivery.getDeliveryFeeMarketplace()); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private BigDecimal workerDeliverySettlementAmount(MallOrder order, MallDeliveryOrder delivery) { |
|
|
|
|
|
return deliveryAmount(order).add(deliveryMarketplaceAmount(delivery)).setScale(2, RoundingMode.UP); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
private boolean isRunnerOrder(MallOrder order) { |
|
|
private boolean isRunnerOrder(MallOrder order) { |
|
|
return order != null && Integer.valueOf(1).equals(order.getOtherOrder()); |
|
|
return order != null && Integer.valueOf(1).equals(order.getOtherOrder()); |
|
|
} |
|
|
} |
|
|
@ -211,10 +226,11 @@ public class MallRefundRecordServiceImpl extends ServiceImpl<MallRefundRecordMap |
|
|
.setScale(2, RoundingMode.HALF_UP); |
|
|
.setScale(2, RoundingMode.HALF_UP); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private BigDecimal workerFullAfterSaleSettlementAmount(MallOrder order) { |
|
|
private BigDecimal workerFullAfterSaleSettlementAmount(MallOrder order, MallDeliveryOrder delivery) { |
|
|
|
|
|
BigDecimal deliverySettlementAmount = workerDeliverySettlementAmount(order, delivery); |
|
|
return isRunnerOrder(order) |
|
|
return isRunnerOrder(order) |
|
|
? deliveryAmount(order) |
|
|
? deliverySettlementAmount |
|
|
: merchantNetSettlementAmount(order).add(deliveryAmount(order)); |
|
|
: merchantNetSettlementAmount(order).add(deliverySettlementAmount).setScale(2, RoundingMode.UP); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private boolean merchantRecordIncludesDeliveryFee(MallOrder order, MallRefundRecord refundRecord) { |
|
|
private boolean merchantRecordIncludesDeliveryFee(MallOrder order, MallRefundRecord refundRecord) { |
|
|
@ -228,15 +244,20 @@ public class MallRefundRecordServiceImpl extends ServiceImpl<MallRefundRecordMap |
|
|
return amount.compareTo(goodsPackageAmount(order)) > 0; |
|
|
return amount.compareTo(goodsPackageAmount(order)) > 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private BigDecimal selectedGoodsPackageAmount(MallRefundRecord refundRecord) { |
|
|
private BigDecimal selectedGoodsPackageAmount(MallOrder order, MallRefundRecord refundRecord) { |
|
|
|
|
|
boolean includePackageFee = shouldIncludePackageFee(order); |
|
|
if (refundRecord == null || refundRecord.getItems() == null || refundRecord.getItems().isEmpty()) { |
|
|
if (refundRecord == null || refundRecord.getItems() == null || refundRecord.getItems().isEmpty()) { |
|
|
|
|
|
BigDecimal packageFee = includePackageFee |
|
|
|
|
|
? safeAmount(refundRecord == null ? null : refundRecord.getPackageFee()) |
|
|
|
|
|
: BigDecimal.ZERO; |
|
|
return safeAmount(refundRecord == null ? null : refundRecord.getGoodsAmount()) |
|
|
return safeAmount(refundRecord == null ? null : refundRecord.getGoodsAmount()) |
|
|
.add(safeAmount(refundRecord == null ? null : refundRecord.getPackageFee())); |
|
|
.add(packageFee); |
|
|
} |
|
|
} |
|
|
BigDecimal amount = BigDecimal.ZERO; |
|
|
BigDecimal amount = BigDecimal.ZERO; |
|
|
for (MallReturnOrderGoods item : refundRecord.getItems()) { |
|
|
for (MallReturnOrderGoods item : refundRecord.getItems()) { |
|
|
BigDecimal quantity = item.getQuantity() == null ? BigDecimal.ZERO : new BigDecimal(item.getQuantity()); |
|
|
BigDecimal quantity = item.getQuantity() == null ? BigDecimal.ZERO : new BigDecimal(item.getQuantity()); |
|
|
amount = amount.add(safeAmount(item.getPrice()).add(safeAmount(item.getPackageFee())).multiply(quantity)); |
|
|
BigDecimal packageFee = includePackageFee ? safeAmount(item.getPackageFee()) : BigDecimal.ZERO; |
|
|
|
|
|
amount = amount.add(safeAmount(item.getPrice()).add(packageFee).multiply(quantity)); |
|
|
} |
|
|
} |
|
|
return amount.setScale(2, RoundingMode.HALF_UP); |
|
|
return amount.setScale(2, RoundingMode.HALF_UP); |
|
|
} |
|
|
} |
|
|
@ -379,7 +400,7 @@ public class MallRefundRecordServiceImpl extends ServiceImpl<MallRefundRecordMap |
|
|
if(mallRefundRecord.getRefundType() == 1){ |
|
|
if(mallRefundRecord.getRefundType() == 1){ |
|
|
// 退商品,和商家有关联
|
|
|
// 退商品,和商家有关联
|
|
|
mallRefundRecord.setLinkId(mallRefundRecord.getShopId()); |
|
|
mallRefundRecord.setLinkId(mallRefundRecord.getShopId()); |
|
|
mallRefundRecord.setSettlementAmount(selectedGoodsPackageAmount(mallRefundRecord)); |
|
|
mallRefundRecord.setSettlementAmount(selectedGoodsPackageAmount(order, mallRefundRecord)); |
|
|
/*if(ratio != null && ratio.compareTo(BigDecimal.ZERO) > 0){ |
|
|
/*if(ratio != null && ratio.compareTo(BigDecimal.ZERO) > 0){ |
|
|
mallRefundRecord.setRefundAmount(mallRefundRecord.getRefundAmount() |
|
|
mallRefundRecord.setRefundAmount(mallRefundRecord.getRefundAmount() |
|
|
.subtract(mallRefundRecord.getRefundAmount().multiply(ratio)).setScale(2, RoundingMode.UP)); |
|
|
.subtract(mallRefundRecord.getRefundAmount().multiply(ratio)).setScale(2, RoundingMode.UP)); |
|
|
@ -399,8 +420,9 @@ public class MallRefundRecordServiceImpl extends ServiceImpl<MallRefundRecordMap |
|
|
sendShopAfterSaleNotice(order); |
|
|
sendShopAfterSaleNotice(order); |
|
|
}else if(mallRefundRecord.getRefundType() == 2){ |
|
|
}else if(mallRefundRecord.getRefundType() == 2){ |
|
|
// 退配送费和配送员有关联
|
|
|
// 退配送费和配送员有关联
|
|
|
|
|
|
MallDeliveryOrder delivery = getDeliveryOrder(order); |
|
|
mallRefundRecord.setLinkId(mallRefundRecord.getWorkerId()); |
|
|
mallRefundRecord.setLinkId(mallRefundRecord.getWorkerId()); |
|
|
mallRefundRecord.setSettlementAmount(deliveryAmount(order)); |
|
|
mallRefundRecord.setSettlementAmount(workerDeliverySettlementAmount(order, delivery)); |
|
|
/*if(ratio != null && ratio.compareTo(BigDecimal.ZERO) > 0){ |
|
|
/*if(ratio != null && ratio.compareTo(BigDecimal.ZERO) > 0){ |
|
|
mallRefundRecord.setRefundAmount(mallRefundRecord.getRefundAmount() |
|
|
mallRefundRecord.setRefundAmount(mallRefundRecord.getRefundAmount() |
|
|
.subtract(mallRefundRecord.getRefundAmount().multiply(ratio)).setScale(2, RoundingMode.UP)); |
|
|
.subtract(mallRefundRecord.getRefundAmount().multiply(ratio)).setScale(2, RoundingMode.UP)); |
|
|
@ -414,14 +436,15 @@ public class MallRefundRecordServiceImpl extends ServiceImpl<MallRefundRecordMap |
|
|
refundOrderCacheUtil.put(mallRefundRecord.getLinkId(),mallRefundRecord); |
|
|
refundOrderCacheUtil.put(mallRefundRecord.getLinkId(),mallRefundRecord); |
|
|
//发送1小时延时MQ:超时未处理则自动同意
|
|
|
//发送1小时延时MQ:超时未处理则自动同意
|
|
|
orderAsyncProducer.sendRefundDelayMessage(mallRefundRecord.getId(), mallRefundRecord.getOrderId()); |
|
|
orderAsyncProducer.sendRefundDelayMessage(mallRefundRecord.getId(), mallRefundRecord.getOrderId()); |
|
|
sendWorkerAfterSaleSms(mallRefundRecord,order); |
|
|
sendWorkerAfterSaleSms(mallRefundRecord,order,delivery); |
|
|
}else if(mallRefundRecord.getRefundType() == 3){ |
|
|
}else if(mallRefundRecord.getRefundType() == 3){ |
|
|
// 全额退款
|
|
|
// 全额退款
|
|
|
if(mallRefundRecord.getRefundTypeStatus() == 1){ |
|
|
if(mallRefundRecord.getRefundTypeStatus() == 1){ |
|
|
//和商家有关联
|
|
|
//和商家有关联
|
|
|
if (isRunnerOrder(order)) { |
|
|
if (isRunnerOrder(order)) { |
|
|
|
|
|
MallDeliveryOrder delivery = getDeliveryOrder(order); |
|
|
mallRefundRecord.setLinkId(mallRefundRecord.getWorkerId()); |
|
|
mallRefundRecord.setLinkId(mallRefundRecord.getWorkerId()); |
|
|
mallRefundRecord.setSettlementAmount(deliveryAmount(order)); |
|
|
mallRefundRecord.setSettlementAmount(workerDeliverySettlementAmount(order, delivery)); |
|
|
} else { |
|
|
} else { |
|
|
mallRefundRecord.setLinkId(mallRefundRecord.getShopId()); |
|
|
mallRefundRecord.setLinkId(mallRefundRecord.getShopId()); |
|
|
mallRefundRecord.setSettlementAmount(merchantFullAfterSaleSettlementAmount(order)); |
|
|
mallRefundRecord.setSettlementAmount(merchantFullAfterSaleSettlementAmount(order)); |
|
|
@ -438,23 +461,25 @@ public class MallRefundRecordServiceImpl extends ServiceImpl<MallRefundRecordMap |
|
|
} |
|
|
} |
|
|
}else if(mallRefundRecord.getRefundTypeStatus() == 2){ |
|
|
}else if(mallRefundRecord.getRefundTypeStatus() == 2){ |
|
|
//和配送员有关联
|
|
|
//和配送员有关联
|
|
|
|
|
|
MallDeliveryOrder delivery = getDeliveryOrder(order); |
|
|
mallRefundRecord.setLinkId(mallRefundRecord.getWorkerId()); |
|
|
mallRefundRecord.setLinkId(mallRefundRecord.getWorkerId()); |
|
|
mallRefundRecord.setSettlementAmount(workerFullAfterSaleSettlementAmount(order)); |
|
|
mallRefundRecord.setSettlementAmount(workerFullAfterSaleSettlementAmount(order, delivery)); |
|
|
mallRefundRecordMapper.insert(mallRefundRecord); |
|
|
mallRefundRecordMapper.insert(mallRefundRecord); |
|
|
//售后放到缓存
|
|
|
//售后放到缓存
|
|
|
refundOrderCacheUtil.put(mallRefundRecord.getLinkId(),mallRefundRecord); |
|
|
refundOrderCacheUtil.put(mallRefundRecord.getLinkId(),mallRefundRecord); |
|
|
//发送1小时延时MQ:超时未处理则自动同意
|
|
|
//发送1小时延时MQ:超时未处理则自动同意
|
|
|
orderAsyncProducer.sendRefundDelayMessage(mallRefundRecord.getId(), mallRefundRecord.getOrderId()); |
|
|
orderAsyncProducer.sendRefundDelayMessage(mallRefundRecord.getId(), mallRefundRecord.getOrderId()); |
|
|
sendWorkerAfterSaleSms(mallRefundRecord,order); |
|
|
sendWorkerAfterSaleSms(mallRefundRecord,order,delivery); |
|
|
}else if(mallRefundRecord.getRefundTypeStatus() == 3){ |
|
|
}else if(mallRefundRecord.getRefundTypeStatus() == 3){ |
|
|
if (!isMerchantDeliveryOrder(order)) { |
|
|
if (!isMerchantDeliveryOrder(order)) { |
|
|
|
|
|
MallDeliveryOrder delivery = isRunnerOrder(order) ? getDeliveryOrder(order) : null; |
|
|
mallRefundRecord.setLinkId(isRunnerOrder(order) ? mallRefundRecord.getWorkerId() : mallRefundRecord.getShopId()); |
|
|
mallRefundRecord.setLinkId(isRunnerOrder(order) ? mallRefundRecord.getWorkerId() : mallRefundRecord.getShopId()); |
|
|
mallRefundRecord.setSettlementAmount(isRunnerOrder(order) ? deliveryAmount(order) : goodsPackageAmount(order)); |
|
|
mallRefundRecord.setSettlementAmount(isRunnerOrder(order) ? workerDeliverySettlementAmount(order, delivery) : goodsPackageAmount(order)); |
|
|
mallRefundRecordMapper.insert(mallRefundRecord); |
|
|
mallRefundRecordMapper.insert(mallRefundRecord); |
|
|
refundOrderCacheUtil.put(mallRefundRecord.getLinkId(),mallRefundRecord); |
|
|
refundOrderCacheUtil.put(mallRefundRecord.getLinkId(),mallRefundRecord); |
|
|
orderAsyncProducer.sendRefundDelayMessage(mallRefundRecord.getId(), mallRefundRecord.getOrderId()); |
|
|
orderAsyncProducer.sendRefundDelayMessage(mallRefundRecord.getId(), mallRefundRecord.getOrderId()); |
|
|
if (isRunnerOrder(order)) { |
|
|
if (isRunnerOrder(order)) { |
|
|
sendWorkerAfterSaleSms(mallRefundRecord,order); |
|
|
sendWorkerAfterSaleSms(mallRefundRecord,order,delivery); |
|
|
} else { |
|
|
} else { |
|
|
sendShopAfterSaleNotice(order); |
|
|
sendShopAfterSaleNotice(order); |
|
|
} |
|
|
} |
|
|
@ -478,7 +503,8 @@ public class MallRefundRecordServiceImpl extends ServiceImpl<MallRefundRecordMap |
|
|
MallRefundRecord mallRefundRecord1 = copyRefundRecord(mallRefundRecord); |
|
|
MallRefundRecord mallRefundRecord1 = copyRefundRecord(mallRefundRecord); |
|
|
mallRefundRecord1.setId(SnowFlakeUtil.nextId().toString()); |
|
|
mallRefundRecord1.setId(SnowFlakeUtil.nextId().toString()); |
|
|
mallRefundRecord1.setLinkId(mallRefundRecord.getWorkerId()); |
|
|
mallRefundRecord1.setLinkId(mallRefundRecord.getWorkerId()); |
|
|
mallRefundRecord1.setSettlementAmount(deliveryAmount(order)); |
|
|
MallDeliveryOrder delivery = getDeliveryOrder(order); |
|
|
|
|
|
mallRefundRecord1.setSettlementAmount(workerDeliverySettlementAmount(order, delivery)); |
|
|
mallRefundRecord1.setRefundAmount(mallRefundRecord.getDeliveryFee()); |
|
|
mallRefundRecord1.setRefundAmount(mallRefundRecord.getDeliveryFee()); |
|
|
if(ratio != null && ratio.compareTo(BigDecimal.ZERO) > 0){ |
|
|
if(ratio != null && ratio.compareTo(BigDecimal.ZERO) > 0){ |
|
|
mallRefundRecord1.setRefundAmount(order.getTotalAmount().subtract(shopRefund)); |
|
|
mallRefundRecord1.setRefundAmount(order.getTotalAmount().subtract(shopRefund)); |
|
|
@ -488,7 +514,7 @@ public class MallRefundRecordServiceImpl extends ServiceImpl<MallRefundRecordMap |
|
|
refundOrderCacheUtil.put(mallRefundRecord1.getLinkId(),mallRefundRecord1); |
|
|
refundOrderCacheUtil.put(mallRefundRecord1.getLinkId(),mallRefundRecord1); |
|
|
//发送1小时延时MQ:超时未处理则自动同意(配送员侧)
|
|
|
//发送1小时延时MQ:超时未处理则自动同意(配送员侧)
|
|
|
orderAsyncProducer.sendRefundDelayMessage(mallRefundRecord1.getId(), mallRefundRecord1.getOrderId()); |
|
|
orderAsyncProducer.sendRefundDelayMessage(mallRefundRecord1.getId(), mallRefundRecord1.getOrderId()); |
|
|
sendWorkerAfterSaleSms(mallRefundRecord1,order); |
|
|
sendWorkerAfterSaleSms(mallRefundRecord1,order,delivery); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
@ -946,13 +972,19 @@ public class MallRefundRecordServiceImpl extends ServiceImpl<MallRefundRecordMap |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private void sendWorkerAfterSaleSms(MallRefundRecord mallRefundRecord, MallOrder order) { |
|
|
private void sendWorkerAfterSaleSms(MallRefundRecord mallRefundRecord, MallOrder order) { |
|
|
|
|
|
sendWorkerAfterSaleSms(mallRefundRecord, order, null); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void sendWorkerAfterSaleSms(MallRefundRecord mallRefundRecord, MallOrder order, MallDeliveryOrder delivery) { |
|
|
if (mallRefundRecord == null) { |
|
|
if (mallRefundRecord == null) { |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
try { |
|
|
try { |
|
|
MallDeliveryOrder delivery = order.getOrderType() == STATUS_WAIT_PICKUP |
|
|
if (delivery == null) { |
|
|
? mallDeliveryOrderMapper.selectByGroupId(mallRefundRecord.getOrderId()) |
|
|
delivery = order.getOrderType() == STATUS_WAIT_PICKUP |
|
|
: findDeliveryByOrderId(order.getId()); |
|
|
? mallDeliveryOrderMapper.selectByGroupId(mallRefundRecord.getOrderId()) |
|
|
|
|
|
: findDeliveryByOrderId(order.getId()); |
|
|
|
|
|
} |
|
|
if (delivery != null && delivery.getWorkerPhone() != null && !"".equals(delivery.getWorkerPhone())) { |
|
|
if (delivery != null && delivery.getWorkerPhone() != null && !"".equals(delivery.getWorkerPhone())) { |
|
|
smsUtil.sendCode(delivery.getWorkerPhone(), null, SettingConstant.SMS_TYPE.SMS_REFUNDWORKER.name()); |
|
|
smsUtil.sendCode(delivery.getWorkerPhone(), null, SettingConstant.SMS_TYPE.SMS_REFUNDWORKER.name()); |
|
|
recordSmsBilling(delivery.getRegionId(), SettingConstant.SMS_TYPE.SMS_REFUNDWORKER.name(), |
|
|
recordSmsBilling(delivery.getRegionId(), SettingConstant.SMS_TYPE.SMS_REFUNDWORKER.name(), |
|
|
|