|
|
|
@ -1,13 +1,17 @@ |
|
|
|
package cc.hiver.mall.serviceimpl.mybatis; |
|
|
|
|
|
|
|
import cc.hiver.core.common.constant.DealingsRecordConstant; |
|
|
|
import cc.hiver.core.common.constant.SettingConstant; |
|
|
|
import cc.hiver.core.common.sms.SmsUtil; |
|
|
|
import cc.hiver.core.common.utils.SnowFlakeUtil; |
|
|
|
import cc.hiver.core.entity.Worker; |
|
|
|
import cc.hiver.core.serviceimpl.JPushServiceImpl; |
|
|
|
import cc.hiver.core.serviceimpl.WorkerServiceImpl; |
|
|
|
import cc.hiver.mall.dao.mapper.*; |
|
|
|
import cc.hiver.mall.entity.*; |
|
|
|
import cc.hiver.mall.pojo.query.MallRefundRecordPageQuery; |
|
|
|
import cc.hiver.mall.pojo.vo.MallOrderVO; |
|
|
|
import cc.hiver.mall.service.ShopService; |
|
|
|
import cc.hiver.mall.service.mybatis.DealingsRecordService; |
|
|
|
import cc.hiver.mall.service.mybatis.MallOrderService; |
|
|
|
import cc.hiver.mall.service.mybatis.MallRefundRecordService; |
|
|
|
@ -58,6 +62,15 @@ public class MallRefundRecordServiceImpl extends ServiceImpl<MallRefundRecordMap |
|
|
|
@Autowired |
|
|
|
private cc.hiver.mall.mq.OrderAsyncProducer orderAsyncProducer; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private SmsUtil smsUtil; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private JPushServiceImpl jPushService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private ShopService shopService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private MallReturnOrderGoodsMapper mallReturnOrderGoodsMapper; |
|
|
|
|
|
|
|
@ -156,7 +169,7 @@ public class MallRefundRecordServiceImpl extends ServiceImpl<MallRefundRecordMap |
|
|
|
mallRefundRecord.setCreateTime(new Date()); |
|
|
|
mallRefundRecord.setRegionId(order.getRegionId()); |
|
|
|
if(mallRefundRecord.getRefundType() == 1){ |
|
|
|
// 退商品
|
|
|
|
// 退商品,和商家有关联
|
|
|
|
mallRefundRecord.setLinkId(mallRefundRecord.getShopId()); |
|
|
|
if(ratio != null && !ratio.equals(0)){ |
|
|
|
mallRefundRecord.setRefundAmount(mallRefundRecord.getRefundAmount() |
|
|
|
@ -167,8 +180,9 @@ public class MallRefundRecordServiceImpl extends ServiceImpl<MallRefundRecordMap |
|
|
|
refundOrderCacheUtil.put(mallRefundRecord.getLinkId(),mallRefundRecord); |
|
|
|
//发送1小时延时MQ:超时未处理则自动同意
|
|
|
|
orderAsyncProducer.sendRefundDelayMessage(mallRefundRecord.getId(), mallRefundRecord.getOrderId()); |
|
|
|
sendShopAfterSaleNotice(order); |
|
|
|
}else if(mallRefundRecord.getRefundType() == 2){ |
|
|
|
// 退配送费
|
|
|
|
// 退配送费和配送员有关联
|
|
|
|
mallRefundRecord.setLinkId(mallRefundRecord.getWorkerId()); |
|
|
|
if(ratio != null){ |
|
|
|
mallRefundRecord.setRefundAmount(mallRefundRecord.getRefundAmount() |
|
|
|
@ -179,24 +193,29 @@ public class MallRefundRecordServiceImpl extends ServiceImpl<MallRefundRecordMap |
|
|
|
refundOrderCacheUtil.put(mallRefundRecord.getLinkId(),mallRefundRecord); |
|
|
|
//发送1小时延时MQ:超时未处理则自动同意
|
|
|
|
orderAsyncProducer.sendRefundDelayMessage(mallRefundRecord.getId(), mallRefundRecord.getOrderId()); |
|
|
|
sendWorkerAfterSaleSms(mallRefundRecord,order); |
|
|
|
}else if(mallRefundRecord.getRefundType() == 3){ |
|
|
|
// 全额退款
|
|
|
|
if(mallRefundRecord.getRefundTypeStatus() == 1){ |
|
|
|
//和商家有关联
|
|
|
|
mallRefundRecord.setLinkId(mallRefundRecord.getShopId()); |
|
|
|
mallRefundRecordMapper.insert(mallRefundRecord); |
|
|
|
//售后放到缓存
|
|
|
|
refundOrderCacheUtil.put(mallRefundRecord.getLinkId(),mallRefundRecord); |
|
|
|
//发送1小时延时MQ:超时未处理则自动同意
|
|
|
|
orderAsyncProducer.sendRefundDelayMessage(mallRefundRecord.getId(), mallRefundRecord.getOrderId()); |
|
|
|
sendShopAfterSaleNotice(order); |
|
|
|
}else if(mallRefundRecord.getRefundTypeStatus() == 2){ |
|
|
|
//和配送员有关联
|
|
|
|
mallRefundRecord.setLinkId(mallRefundRecord.getWorkerId()); |
|
|
|
mallRefundRecordMapper.insert(mallRefundRecord); |
|
|
|
//售后放到缓存
|
|
|
|
refundOrderCacheUtil.put(mallRefundRecord.getLinkId(),mallRefundRecord); |
|
|
|
//发送1小时延时MQ:超时未处理则自动同意
|
|
|
|
orderAsyncProducer.sendRefundDelayMessage(mallRefundRecord.getId(), mallRefundRecord.getOrderId()); |
|
|
|
sendWorkerAfterSaleSms(mallRefundRecord,order); |
|
|
|
}else if(mallRefundRecord.getRefundTypeStatus() == 3){ |
|
|
|
//商家、配送员都加一条
|
|
|
|
//商家、配送员都加一条,和商家+配送员都有关联
|
|
|
|
mallRefundRecord.setLinkId(mallRefundRecord.getShopId()); |
|
|
|
mallRefundRecord.setRefundAmount(mallRefundRecord.getGoodsAmount().add(mallRefundRecord.getPackageFee())); |
|
|
|
if(ratio != null){ |
|
|
|
@ -208,6 +227,7 @@ public class MallRefundRecordServiceImpl extends ServiceImpl<MallRefundRecordMap |
|
|
|
refundOrderCacheUtil.put(mallRefundRecord.getLinkId(),mallRefundRecord); |
|
|
|
//发送1小时延时MQ:超时未处理则自动同意(商家侧)
|
|
|
|
orderAsyncProducer.sendRefundDelayMessage(mallRefundRecord.getId(), mallRefundRecord.getOrderId()); |
|
|
|
sendShopAfterSaleNotice(order); |
|
|
|
MallRefundRecord mallRefundRecord1 = mallRefundRecord; |
|
|
|
mallRefundRecord1.setId(SnowFlakeUtil.nextId().toString()); |
|
|
|
mallRefundRecord1.setLinkId(mallRefundRecord.getWorkerId()); |
|
|
|
@ -221,6 +241,7 @@ public class MallRefundRecordServiceImpl extends ServiceImpl<MallRefundRecordMap |
|
|
|
refundOrderCacheUtil.put(mallRefundRecord1.getLinkId(),mallRefundRecord1); |
|
|
|
//发送1小时延时MQ:超时未处理则自动同意(配送员侧)
|
|
|
|
orderAsyncProducer.sendRefundDelayMessage(mallRefundRecord1.getId(), mallRefundRecord1.getOrderId()); |
|
|
|
sendWorkerAfterSaleSms(mallRefundRecord1,order); |
|
|
|
} |
|
|
|
} |
|
|
|
if(!mallRefundRecord.getItems().isEmpty()){ |
|
|
|
@ -264,6 +285,11 @@ public class MallRefundRecordServiceImpl extends ServiceImpl<MallRefundRecordMap |
|
|
|
//处理售后
|
|
|
|
isTuiKuan = false; |
|
|
|
} |
|
|
|
MallOrder rejectOrder = null; |
|
|
|
if(mallRefundRecord.getStatus() == 2 || mallRefundRecord.getStatus() == 5){ |
|
|
|
rejectOrder = mallOrderService.getById(mallRefundRecord.getOrderId()); |
|
|
|
sendRejectSmsIfNeeded(mallRefundRecord, rejectOrder); |
|
|
|
} |
|
|
|
//更新订单status、 配送单isReturn
|
|
|
|
if(mallRefundRecord.getRefundTypeStatus() != null && mallRefundRecord.getRefundTypeStatus() == 3){ |
|
|
|
//商家和配送员都有原因,需要判断另外角色处理了没再判断是否更新订单的状态
|
|
|
|
@ -337,7 +363,7 @@ public class MallRefundRecordServiceImpl extends ServiceImpl<MallRefundRecordMap |
|
|
|
} |
|
|
|
}else{ |
|
|
|
//拒绝退款
|
|
|
|
MallOrder order = mallOrderService.getById(mallRefundRecord.getOrderId()); |
|
|
|
MallOrder order = rejectOrder != null ? rejectOrder : mallOrderService.getById(mallRefundRecord.getOrderId()); |
|
|
|
//如果是自取订单,则恢复待消费状态
|
|
|
|
if(order.getDeliveryType() == DELIVERY_TYPE_SELF){ |
|
|
|
updateOrderStatusAndReturn(mallRefundRecord.getOrderId(), STATUS_WAIT_PICKUP); |
|
|
|
@ -476,7 +502,7 @@ public class MallRefundRecordServiceImpl extends ServiceImpl<MallRefundRecordMap |
|
|
|
if(isTuiKuan){ |
|
|
|
//拒绝退款
|
|
|
|
if(mallRefundRecord.getStatus() == 2){ |
|
|
|
MallOrder order = mallOrderService.getById(mallRefundRecord.getOrderId()); |
|
|
|
MallOrder order = rejectOrder; |
|
|
|
//如果是自取订单,则恢复待消费状态
|
|
|
|
if(mallRefundRecord.getDeliveryType() == DELIVERY_TYPE_SELF){ |
|
|
|
updateOrderStatusAndReturn(mallRefundRecord.getOrderId(), STATUS_WAIT_PICKUP); |
|
|
|
@ -677,6 +703,46 @@ public class MallRefundRecordServiceImpl extends ServiceImpl<MallRefundRecordMap |
|
|
|
mallOrderMapper.update(null, uw); |
|
|
|
} |
|
|
|
|
|
|
|
private void sendRejectSmsIfNeeded(MallRefundRecord mallRefundRecord, MallOrder order) { |
|
|
|
if (mallRefundRecord == null || order == null || (mallRefundRecord.getStatus() != 2 && mallRefundRecord.getStatus() != 5)) { |
|
|
|
return; |
|
|
|
} |
|
|
|
try { |
|
|
|
if (order.getReceiverPhone() != null && !"".equals(order.getReceiverPhone())) { |
|
|
|
smsUtil.sendCode(order.getReceiverPhone(), null, SettingConstant.SMS_TYPE.SMS_REFUNDUSER.name()); |
|
|
|
} |
|
|
|
} catch (Exception ignored) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void sendShopAfterSaleNotice(MallOrder order) { |
|
|
|
if (order == null || order.getShopId() == null) { |
|
|
|
return; |
|
|
|
} |
|
|
|
try { |
|
|
|
Shop shop = shopService.findById(order.getShopId()); |
|
|
|
if (shop != null && shop.getClientId() != null && !"".equals(shop.getClientId())) { |
|
|
|
jPushService.sendPushNotification(shop.getClientId(), "您有一笔订单用户申请售后,请尽快处理", order.getId()); |
|
|
|
} |
|
|
|
} catch (Exception ignored) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void sendWorkerAfterSaleSms(MallRefundRecord mallRefundRecord, MallOrder order) { |
|
|
|
if (mallRefundRecord == null) { |
|
|
|
return; |
|
|
|
} |
|
|
|
try { |
|
|
|
MallDeliveryOrder delivery = order.getOrderType() == STATUS_WAIT_PICKUP |
|
|
|
? mallDeliveryOrderMapper.selectByGroupId(mallRefundRecord.getOrderId()) |
|
|
|
: findDeliveryByOrderId(order.getId()); |
|
|
|
if (delivery != null && delivery.getWorkerPhone() != null && !"".equals(delivery.getWorkerPhone())) { |
|
|
|
smsUtil.sendCode(delivery.getWorkerPhone(), null, SettingConstant.SMS_TYPE.SMS_REFUNDWORKER.name()); |
|
|
|
} |
|
|
|
} catch (Exception ignored) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void updateOrderStatusAndReturn(String orderId, int status) { |
|
|
|
LambdaUpdateWrapper<MallOrder> uw = new LambdaUpdateWrapper<>(); |
|
|
|
uw.eq(MallOrder::getId, orderId).set(MallOrder::getStatus, status); |
|
|
|
|