From 8990e31f78e85081fa2891bf19d6602e8fa3ea15 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Thu, 25 Dec 2025 16:06:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=85=8D=E5=AF=86=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/constant/HardThirdMiStatusEnum.java | 29 +++++++++ .../api/entity/HardThirdMiOrderEntity.java | 28 ++++++++- .../hard/controller/HardAuthController.java | 2 +- .../HardThirdMiOrderController.java | 12 +++- .../hard/service/HardThirdMiOrderService.java | 5 ++ .../hard/service/MiniAlipayService.java | 7 ++- .../service/impl/HardAuthServiceImpl.java | 2 +- .../impl/HardThirdMiOrderServiceImpl.java | 62 +++++++++++++++++++ .../impl/ali/MiniAlipayServiceImpl.java | 28 +++++++-- 9 files changed, 162 insertions(+), 13 deletions(-) create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardThirdMiStatusEnum.java diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardThirdMiStatusEnum.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardThirdMiStatusEnum.java new file mode 100644 index 000000000..6bc48e680 --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardThirdMiStatusEnum.java @@ -0,0 +1,29 @@ +package com.bsd.pjcloud.hard.api.constant; + +import cn.hutool.core.util.ObjectUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 第三方面密类型 + */ +@AllArgsConstructor +@Getter +public enum HardThirdMiStatusEnum { + + CREATE_ORDER("10", "创建订单"), + PAY("20", "支付订单"), + REFUND("30", "取消/退款"), + ; + + private final String type; + private final String description; + + public static HardThirdMiStatusEnum valueOfByType(String type) { + if (ObjectUtil.isEmpty(type)) return null; + return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get(); + } + +} diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardThirdMiOrderEntity.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardThirdMiOrderEntity.java index b49b90844..6bdc1b901 100755 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardThirdMiOrderEntity.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardThirdMiOrderEntity.java @@ -39,6 +39,12 @@ public class HardThirdMiOrderEntity extends Model { @Schema(description = "用户id") private Long userId; + /** + * 用户类型 + */ + @Schema(description = "用户类型") + private String userType; + /** * 授权id */ @@ -91,13 +97,31 @@ public class HardThirdMiOrderEntity extends Model { * 订单状态 */ @Schema(description = "订单状态") - private Integer orderStatus; + private String orderStatus; + + /** + * 押金 + */ + @Schema(description = "押金") + private int depositPrice; + + /** + * 订单金额 + */ + @Schema(description = "订单金额") + private int orderPrice; + + /** + * 支付金额 + */ + @Schema(description = "支付金额") + private int payPrice; /** * 原始json数据 */ @Schema(description = "原始json数据") - private String orgJson; + private String orgOrderJson; /** * 创建人 diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardAuthController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardAuthController.java index be8b91392..00e924d7a 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardAuthController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardAuthController.java @@ -59,7 +59,7 @@ public class HardAuthController { public R appAuthHardDoor(@Valid @RequestBody HardAuthAppDto dto) { PjcloudUser user = SecurityUtils.getUser(); dto.setUserId(user.getId()); - dto.setUserType(UserTypeEnum.valueOfByStatus(user.getUserType())); + dto.setUserType(UserTypeEnum.TOB); return R.ok(hardAuthService.appAuthHardDoor(dto)); } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardThirdMiOrderController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardThirdMiOrderController.java index b0b703e50..81f547d4e 100755 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardThirdMiOrderController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardThirdMiOrderController.java @@ -27,13 +27,23 @@ import java.util.Objects; */ @RestController @RequiredArgsConstructor -@RequestMapping("/hardThirdMiOrder") +@RequestMapping("/hard-third-mi-order") @Tag(description = "hardThirdMiOrder", name = "硬件商品免密订单管理") @SecurityRequirement(name = HttpHeaders.AUTHORIZATION) public class HardThirdMiOrderController { private final HardThirdMiOrderService hardThirdMiOrderService; + /** + * 刷新订单 + */ + @Operation(summary = "刷新订单", description = "刷新订单") + @GetMapping("/refresh") + public R refresh(@RequestParam("id") Long id) { + hardThirdMiOrderService.refresh(id); + return R.ok(); + } + /** * 分页查询 */ diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdMiOrderService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdMiOrderService.java index 8dc7729b2..8ce921075 100755 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdMiOrderService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdMiOrderService.java @@ -5,4 +5,9 @@ import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity; public interface HardThirdMiOrderService extends IService { + /** + * 刷新订单 + */ + void refresh(Long id); + } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java index ffde0e38b..777d2a135 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java @@ -2,6 +2,7 @@ package com.bsd.pjcloud.hard.service; import com.alipay.api.response.*; +import com.bsd.pjcloud.common.core.constant.enums.UserTypeEnum; public interface MiniAlipayService { @@ -13,17 +14,17 @@ public interface MiniAlipayService { /** * 创建支付宝免密订单 */ - AlipayTradeCreateResponse miCreateOrder(String openId, Long authId); + AlipayTradeCreateResponse miCreateOrder(String openId, Long authId, Long userId, UserTypeEnum userType); /** * 查询支付宝免密订单 */ - ZhimaCreditPayafteruseCreditbizorderQueryResponse miQueryOrder(String alipayOrderNo, String authId); + ZhimaCreditPayafteruseCreditbizorderQueryResponse miQueryOrder(String alipayOrderNo, Long authId); /** * 支付宝免密扣款 */ - AlipayTradeOrderPayResponse miQueryPay(String authId, String alipayTradeNo, int price); + AlipayTradeOrderPayResponse miPay(String authId, String alipayTradeNo, int price); /** * 支付宝免密(取消/退款) diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java index dcdc59ac2..b7e5f289a 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java @@ -147,7 +147,7 @@ public class HardAuthServiceImpl extends ServiceImpl implements HardThirdMiOrderService { + private final MiniAlipayService miniAlipayService; + + /** + * 刷新订单 + */ + @Override + public void refresh(Long id) { + HardThirdMiOrderEntity order = baseMapper.selectById(id); + if (ObjectUtil.isEmpty(order)) { + throw new RuntimeException("订单不存在"); + } + // 微信免密支付 + if (ObjectUtil.equals(order.getBizType(), HardThirdMiTypeEnum.MI_WECHAT.getType())) { + + return; + } + // 支付宝-芝麻先享 + if (ObjectUtil.equals(order.getBizType(), HardThirdMiTypeEnum.MI_ALIPAY.getType())) { + ZhimaCreditPayafteruseCreditbizorderQueryResponse res = miniAlipayService.miQueryOrder(null, order.getAuthId()); + if (ObjectUtil.isEmpty(res)) { + throw new RuntimeException("支付宝-芝麻先享中,未查询到此订单"); + } + HardThirdMiOrderEntity updateObj = new HardThirdMiOrderEntity(); + updateObj.setId(order.getId()); + // 押金 + updateObj.setDepositPrice(new BigDecimal(res.getTotalAmount()).multiply(BigDecimal.valueOf(100)).intValue()); + // 扣款金额 + if (ObjectUtil.isNotEmpty(res.getTotalCreditPayAmount())) { + updateObj.setPayPrice(new BigDecimal(res.getTotalCreditPayAmount()).multiply(BigDecimal.valueOf(100)).intValue()); + } + // 订单状态 + if (ObjectUtil.isNotEmpty(res.getOrderStatus())) { + String orderStatus = res.getOrderStatus(); + switch (orderStatus) { + // 下单状态 + case "INIT": + updateObj.setOrderStatus(HardThirdMiStatusEnum.CREATE_ORDER.getType()); + break; + // 订单取消或者交易全额退款 + case "TRADE_CLOSED": + updateObj.setOrderStatus(HardThirdMiStatusEnum.REFUND.getType()); + break; + // 扣款成功状态 + case "TRADE_FINISHED": + updateObj.setOrderStatus(HardThirdMiStatusEnum.PAY.getType()); + break; + } + } + baseMapper.updateById(updateObj); + return; + } + } + } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/MiniAlipayServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/MiniAlipayServiceImpl.java index 5073b29de..141fe2f66 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/MiniAlipayServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/MiniAlipayServiceImpl.java @@ -11,7 +11,12 @@ import com.alipay.api.DefaultAlipayClient; import com.alipay.api.domain.*; import com.alipay.api.request.*; import com.alipay.api.response.*; +import com.bsd.pjcloud.common.core.constant.enums.UserTypeEnum; +import com.bsd.pjcloud.hard.api.constant.HardThirdMiStatusEnum; +import com.bsd.pjcloud.hard.api.constant.HardThirdMiTypeEnum; +import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity; import com.bsd.pjcloud.hard.config.MiniAlipayConf; +import com.bsd.pjcloud.hard.mapper.HardThirdMiOrderMapper; import com.bsd.pjcloud.hard.service.MiniAlipayService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -29,6 +34,8 @@ import java.time.LocalDateTime; @Slf4j public class MiniAlipayServiceImpl implements MiniAlipayService { + private final HardThirdMiOrderMapper hardThirdMiOrderMapper; + private final MiniAlipayConf conf; static private AlipayClient client = null; @@ -83,7 +90,14 @@ public class MiniAlipayServiceImpl implements MiniAlipayService { * 创建支付宝免密订单 */ @Override - public AlipayTradeCreateResponse miCreateOrder(String openId, Long authId) { + public AlipayTradeCreateResponse miCreateOrder(String openId, Long authId, Long userId, UserTypeEnum userType) { + HardThirdMiOrderEntity thirdOrder = new HardThirdMiOrderEntity(); + thirdOrder.setBizType(HardThirdMiTypeEnum.MI_ALIPAY.getType()); + thirdOrder.setAuthId(authId); + thirdOrder.setUserId(userId); + thirdOrder.setUserType(userType.getStatus()); + thirdOrder.setCreateOrderTime(LocalDateTime.now()); + thirdOrder.setOrderStatus(HardThirdMiStatusEnum.CREATE_ORDER.getType()); AlipayTradeCreateRequest request = new AlipayTradeCreateRequest(); try { JSONObject bizContent = new JSONObject(); @@ -108,18 +122,21 @@ public class MiniAlipayServiceImpl implements MiniAlipayService { extraParam.putOnce("creditTradeScene", "CREDIT_PAY"); bizContent.putOnce("extend_params", extraParam); request.setBizContent(bizContent.toString()); - // request.setNotifyUrl("https://www.notifyURL.com"); AlipayTradeCreateResponse response = getClient().execute(request); if (!response.isSuccess()) { log.error("|创建支付宝订单|失败,json|{}", response.getBody()); return null; } log.info("|创建支付宝订单|成功,json|{}", response.getBody()); + thirdOrder.setOutOrderNo(String.valueOf(authId)); + thirdOrder.setThirdOrderNo(response.getTradeNo()); return response; } catch (Exception e) { e.printStackTrace(); log.error("|创建支付宝订单|意外的错误", e); return null; + } finally { + hardThirdMiOrderMapper.insert(thirdOrder); } } @@ -127,15 +144,16 @@ public class MiniAlipayServiceImpl implements MiniAlipayService { * 查询支付宝免密订单 */ @Override - public ZhimaCreditPayafteruseCreditbizorderQueryResponse miQueryOrder(String alipayOrderNo, String authId) { + public ZhimaCreditPayafteruseCreditbizorderQueryResponse miQueryOrder(String alipayOrderNo, Long authId) { ZhimaCreditPayafteruseCreditbizorderQueryRequest request = new ZhimaCreditPayafteruseCreditbizorderQueryRequest(); ZhimaCreditPayafteruseCreditbizorderQueryModel model = new ZhimaCreditPayafteruseCreditbizorderQueryModel(); if (ObjectUtil.isNotEmpty(alipayOrderNo)) { model.setCreditBizOrderId(alipayOrderNo); } if (ObjectUtil.isNotEmpty(authId)) { - model.setOutOrderNo(authId); + model.setOutOrderNo(String.valueOf(authId)); } + request.setBizModel(model); try { ZhimaCreditPayafteruseCreditbizorderQueryResponse response = getClient().execute(request); if (!response.isSuccess()) { @@ -155,7 +173,7 @@ public class MiniAlipayServiceImpl implements MiniAlipayService { * 支付宝免密扣款 */ @Override - public AlipayTradeOrderPayResponse miQueryPay(String authId, String alipayTradeNo, int price) { + public AlipayTradeOrderPayResponse miPay(String authId, String alipayTradeNo, int price) { AlipayTradeOrderPayRequest request = new AlipayTradeOrderPayRequest(); JSONObject bizContent = new JSONObject(); // 商家外部协议号,自定义确保唯一