zoujiajian 1 год назад
Родитель
Сommit
db3c5e567d

+ 2 - 0
netflix-service/src/main/java/com/cyksj/service/order/OrderRefundService.java

@@ -30,4 +30,6 @@ public interface OrderRefundService {
 	String refundWholesaleOrder(GoodsWholesaleOrderDon orderDon) throws Exception;
 
 	String refundUserMirrorShopFee(UserMirrorShopFeeOrderDon orderDon) throws Exception;
+
+	void refundSpotifyUpgrade(Long orderId) throws Exception;
 }

+ 46 - 0
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderRefundServiceImpl.java

@@ -63,6 +63,8 @@ public class OrderRefundServiceImpl implements OrderRefundService {
 
 	private final RefundUpgradeOrderDonMapper refundUpgradeOrderDonMapper;
 
+	private final SpotifyUserUpgradeOrderMapper spotifyUserUpgradeOrderMapper;
+
 	@Override
 	public String centerRefund(OrderRefundReq refundReq, OrderDon orderDon) throws Exception {
 		OrderDon.Type type = orderDon.getType();
@@ -432,6 +434,50 @@ public class OrderRefundServiceImpl implements OrderRefundService {
 		return outRefundNo;
 	}
 
+	@Override
+	public void refundSpotifyUpgrade(Long orderId) throws Exception {
+		SpotifyUserUpgradeOrder order = spotifyUserUpgradeOrderMapper.selectById(orderId);
+		if (order == null) {
+			throw BusinessRuntimeException.getInstance("订单不存在");
+		}
+		if (order.getStatus() != SpotifyUserUpgradeOrder.Status.hasPayment) {
+			throw BusinessRuntimeException.getInstance("订单状态异常");
+		}
+		BigDecimal money = order.getMoney();
+		if (money.compareTo(BigDecimal.ZERO) <=0){
+			return;
+		}
+		AlipayTradeRefundResponse response;
+		//支付宝退款
+		AlipayClient alipayClient = AliPayClientFactory.getAlipayClient(Optional.ofNullable(order.getShopId()).orElse(ShopConfig.ZFB_DEFAULT_APP_ID));
+		AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
+		AlipayTradeRefundModel model = new AlipayTradeRefundModel();
+		//支付宝交易号
+		model.setTradeNo(order.getTransactionId());
+		model.setRefundAmount(money.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_EVEN).toString());
+		model.setQueryOptions(List.of("gmt_refund_pay"));
+		long time = System.currentTimeMillis();
+		//退款订单号
+		String outRefundNo = Codec.DoDigest.custom()
+				.setAlgorithm(Codec.DoDigest.Algorithm.MD5)
+				.setStringData(time + String.valueOf(order.getId()))
+				.toHexString();
+		log.info("spotify升级订单oid:{}退款订单号:{}", orderId, outRefundNo);
+		//退款请求号
+		model.setOutRequestNo(outRefundNo);
+		request.setBizModel(model);
+		String shopId = order.getShopId();
+		ShopConfig shopConfig = shopConfigMapper.selectOne(Wrappers.lambdaQuery(ShopConfig.class).eq(ShopConfig::getAppId, order.getShopId()));
+		if (shopId != null && shopConfig != null && shopConfig.getIsCert()) {
+			response = alipayClient.certificateExecute(request);
+		} else {
+			response = alipayClient.execute(request);
+		}
+		if (!response.isSuccess()) throw BusinessRuntimeException.getInstance("退款失败,e:{0}", response.getSubMsg());
+		order.setStatus(SpotifyUserUpgradeOrder.Status.refund);
+		spotifyUserUpgradeOrderMapper.updateById(order);
+	}
+
 	private String zfbRefundWholesaleOrder(GoodsWholesaleOrderDon orderDon) throws Exception {
 		BigDecimal money = orderDon.getRefundMoney();
 		if (money.compareTo(BigDecimal.ZERO) <=0){

+ 12 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/spotify/SpotifyUpgradeController.java

@@ -7,6 +7,7 @@ import com.cyksj.mapper.SpotifyUserUpgradeSubmitRecordMapper;
 import com.cyksj.model.entity.SpotifyUserUpgradeSubmitRecord;
 import com.cyksj.model.views.SpotifyUserUpgradeOrderView;
 import com.cyksj.model.views.SpotifyUserUpgradeSubmitRecordView;
+import com.cyksj.service.order.OrderRefundService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
 import com.ejlchina.searcher.util.MapUtils;
@@ -32,6 +33,8 @@ public class SpotifyUpgradeController {
 
 	private final SpotifyUserUpgradeSubmitRecordMapper spotifyUserUpgradeSubmitRecordMapper;
 
+	private final OrderRefundService orderRefundService;
+
 	/**
 	 * 提交账号列表
 	 */
@@ -65,4 +68,13 @@ public class SpotifyUpgradeController {
 		SearchResult<SpotifyUserUpgradeOrderView> search = beanSearcher.search(SpotifyUserUpgradeOrderView.class, MapUtils.flatBuilder(request.getParameterMap()).orderBy(SpotifyUserUpgradeOrderView::getId).desc().build());
 		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
 	}
+
+	/**
+	 * 订单退款
+	 */
+	@PostMapping("/refund/{orderId}")
+	public Result<String> refund(@PathVariable Long orderId) throws Exception {
+		orderRefundService.refundSpotifyUpgrade(orderId);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
 }