|
|
@@ -9,23 +9,28 @@ import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.boot.CommandLineRunner;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
+import shop.alien.entity.result.R;
|
|
|
import shop.alien.entity.store.LawyerConsultationOrder;
|
|
|
import shop.alien.entity.store.LifeNotice;
|
|
|
import shop.alien.entity.store.vo.WebSocketVo;
|
|
|
import shop.alien.lawyer.config.BaseRedisService;
|
|
|
import shop.alien.lawyer.config.WebSocketProcess;
|
|
|
import shop.alien.lawyer.controller.AliController;
|
|
|
+import shop.alien.lawyer.feign.AlienStoreFeign;
|
|
|
import shop.alien.lawyer.listener.RedisKeyExpirationHandler;
|
|
|
import shop.alien.lawyer.service.OrderExpirationService;
|
|
|
import shop.alien.mapper.LawyerConsultationOrderMapper;
|
|
|
import shop.alien.mapper.LifeNoticeMapper;
|
|
|
import shop.alien.mapper.LifeUserMapper;
|
|
|
import shop.alien.util.common.DateUtils;
|
|
|
+import shop.alien.util.common.constant.PaymentEnum;
|
|
|
|
|
|
|
|
|
import javax.annotation.PostConstruct;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
* 訂單過期處理服務實現類
|
|
|
@@ -51,6 +56,7 @@ public class OrderExpirationServiceImpl implements OrderExpirationService, Comma
|
|
|
private final LifeNoticeMapper lifeNoticeMapper;
|
|
|
private final LifeUserMapper lifeUserMapper;
|
|
|
private final WebSocketProcess webSocketProcess;
|
|
|
+ private final AlienStoreFeign alienStoreFeign;
|
|
|
|
|
|
/**
|
|
|
* Redis key前綴:訂單支付超時
|
|
|
@@ -147,11 +153,6 @@ public class OrderExpirationServiceImpl implements OrderExpirationService, Comma
|
|
|
|
|
|
log.info("檢測到有訂單需要退款,訂單no: {}", orderNo);
|
|
|
|
|
|
- // 處理訂單退款
|
|
|
- aliController.processRefund(order.getAlipayNo(), new BigDecimal(order.getOrderAmount()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString(), refundReason,"");
|
|
|
-
|
|
|
- log.info("訂單退款成功,訂單no: {}", orderNo);
|
|
|
-
|
|
|
//通知
|
|
|
LifeNotice lifeNotice = buildUserLifeNotice(order, title, message);
|
|
|
WebSocketVo webSocketVo = buildWebSocketVo(lifeNotice);
|
|
|
@@ -161,11 +162,32 @@ public class OrderExpirationServiceImpl implements OrderExpirationService, Comma
|
|
|
|
|
|
log.info("系统通知发送成功,訂單no: {}", orderNo);
|
|
|
|
|
|
- LawyerConsultationOrder update = new LawyerConsultationOrder();
|
|
|
- update.setId(order.getId());
|
|
|
- update.setOrderStatus(5);
|
|
|
- orderMapper.updateById( update);
|
|
|
+ // 處理訂單退款
|
|
|
+ //aliController.processRefund(order.getAlipayNo(), new BigDecimal(order.getOrderAmount()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString(), refundReason,"");
|
|
|
+
|
|
|
+ // 微信/支付宝退款
|
|
|
+ Map<String, String> paramMap = new HashMap<>();
|
|
|
+ refundParam(paramMap, order, refundReason);
|
|
|
+ R refunds = alienStoreFeign.paymentRefunds(paramMap);
|
|
|
+
|
|
|
+ if (refunds.getCode() == 200) {
|
|
|
+ log.info("訂單退款成功,訂單no: {}", orderNo);
|
|
|
+
|
|
|
+ //退款到账通知
|
|
|
+ LifeNotice lifeNotice2 = buildUserLifeNotice(order, "退款到账通知", "您的编号为" + orderNo + "的订单,订单金额已原路返还至您的支付渠道,请查收。");
|
|
|
+ WebSocketVo webSocketVo2 = buildWebSocketVo(lifeNotice2);
|
|
|
+ lifeNotice2.setCreatedTime(DateUtils.calcMinute(lifeNotice2.getCreatedTime(), 2));
|
|
|
+
|
|
|
+ lifeNoticeMapper.insert(lifeNotice2);
|
|
|
+ webSocketProcess.sendMessage(lifeNotice2.getReceiverId(), JSONObject.from(webSocketVo2).toJSONString());
|
|
|
+
|
|
|
+ log.info("系统通知发送成功,訂單no: {}", orderNo);
|
|
|
|
|
|
+ LawyerConsultationOrder update = new LawyerConsultationOrder();
|
|
|
+ update.setId(order.getId());
|
|
|
+ update.setOrderStatus(5);
|
|
|
+ orderMapper.updateById( update);
|
|
|
+ }
|
|
|
}
|
|
|
//申请退款 律师没处理
|
|
|
if (expiredKey.contains(ORDER_REFUND_TIMEOUT_PREFIX)) {
|
|
|
@@ -179,30 +201,28 @@ public class OrderExpirationServiceImpl implements OrderExpirationService, Comma
|
|
|
|
|
|
log.info("檢測到有訂單需要退款,訂單no: {}", orderNo);
|
|
|
|
|
|
+ //同意退款通知
|
|
|
+ LifeNotice lifeNotice = buildUserLifeNotice(order, "同意退款通知", "您的编号为" + orderNo + "的订单,律师已同意您的退款申请,订单金额将在1-3个工作日原路返还,请注意查收。");
|
|
|
+ WebSocketVo webSocketVo = buildWebSocketVo(lifeNotice);
|
|
|
+
|
|
|
+ lifeNoticeMapper.insert(lifeNotice);
|
|
|
+ webSocketProcess.sendMessage(lifeNotice.getReceiverId(), JSONObject.from(webSocketVo).toJSONString());
|
|
|
+
|
|
|
// 處理訂單退款
|
|
|
- String refundResult = aliController.processRefund(order.getAlipayNo(), new BigDecimal(order.getOrderAmount()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString(), refundReason, "");
|
|
|
+ //String refundResult = aliController.processRefund(order.getAlipayNo(), new BigDecimal(order.getOrderAmount()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString(), refundReason, "");
|
|
|
|
|
|
// 微信/支付宝退款
|
|
|
- /*paramMap.put("payType", "1".equals(order.getPayType()) ? PaymentEnum.ALIPAY.getType() : PaymentEnum.WECHAT_PAY.getType());
|
|
|
- paramMap.put("outTradeNo", order.getAlipayNo());
|
|
|
- paramMap.put("refundReason", refundReason);
|
|
|
- paramMap.put("refundAmount", new BigDecimal(order.getOrderAmount()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString());
|
|
|
- R refunds = alienStoreFeign.paymentRefunds(paramMap);*/
|
|
|
+ Map<String, String> paramMap = new HashMap<>();
|
|
|
+ refundParam(paramMap, order, refundReason);
|
|
|
+ R refunds = alienStoreFeign.paymentRefunds(paramMap);
|
|
|
|
|
|
- if ("调用成功".equals(refundResult)) {
|
|
|
+ if (refunds.getCode() == 200) {
|
|
|
log.info("訂單退款成功,訂單no: {}", orderNo);
|
|
|
|
|
|
- //同意退款通知
|
|
|
- LifeNotice lifeNotice = buildUserLifeNotice(order, "同意退款通知", "您的编号为" + orderNo + "的订单,律师已同意您的退款申请,订单金额将在1-3个工作日原路返还,请注意查收。");
|
|
|
- WebSocketVo webSocketVo = buildWebSocketVo(lifeNotice);
|
|
|
-
|
|
|
- lifeNoticeMapper.insert(lifeNotice);
|
|
|
- webSocketProcess.sendMessage(lifeNotice.getReceiverId(), JSONObject.from(webSocketVo).toJSONString());
|
|
|
-
|
|
|
//退款到账通知
|
|
|
LifeNotice lifeNotice2 = buildUserLifeNotice(order, "退款到账通知", "您的编号为" + orderNo + "的订单,订单金额已原路返还至您的支付渠道,请查收。");
|
|
|
- WebSocketVo webSocketVo2 = buildWebSocketVo(lifeNotice);
|
|
|
- lifeNotice2.setCreatedTime(DateUtils.calcMinute(lifeNotice.getCreatedTime(), 2));
|
|
|
+ WebSocketVo webSocketVo2 = buildWebSocketVo(lifeNotice2);
|
|
|
+ lifeNotice2.setCreatedTime(DateUtils.calcMinute(lifeNotice2.getCreatedTime(), 2));
|
|
|
|
|
|
lifeNoticeMapper.insert(lifeNotice2);
|
|
|
webSocketProcess.sendMessage(lifeNotice2.getReceiverId(), JSONObject.from(webSocketVo2).toJSONString());
|
|
|
@@ -221,6 +241,24 @@ public class OrderExpirationServiceImpl implements OrderExpirationService, Comma
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void refundParam(Map<String,String> paramMap,LawyerConsultationOrder order,String refundReason){
|
|
|
+ //支付宝
|
|
|
+ if ("1".equals(order.getPayType())) {
|
|
|
+ paramMap.put("payType", PaymentEnum.ALIPAY.getType());
|
|
|
+ paramMap.put("outTradeNo", order.getAlipayNo());
|
|
|
+ paramMap.put("refundReason", refundReason);
|
|
|
+ paramMap.put("refundAmount", new BigDecimal(order.getOrderAmount()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString());
|
|
|
+ }
|
|
|
+ //微信
|
|
|
+ if ("2".equals(order.getPayType())) {
|
|
|
+ paramMap.put("payType", PaymentEnum.WECHAT_PAY.getType());
|
|
|
+ paramMap.put("outTradeNo", order.getAlipayNo());
|
|
|
+ paramMap.put("reason", refundReason);
|
|
|
+ paramMap.put("refundAmount", order.getOrderAmount().toString());
|
|
|
+ paramMap.put("totalAmount", order.getOrderAmount().toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void handleOrderPaymentTimeout(String orderNum) {
|