diff --git a/README.md b/README.md index 6730f96a..d6c4ad29 100644 --- a/README.md +++ b/README.md @@ -161,7 +161,7 @@ public class SimplePayOrderTest { [**更新记录**](/_doc/ChangeLog.md) ### 2.0.X版本: -- [ ] 对账比对功能实现 +- [x] 对账比对功能实现 - [ ] 支持转账、分账操作 - [ ] 云闪付支付支持 - [ ] 支付宝和微信增加V3版本接口支持 diff --git a/_doc/Task.md b/_doc/Task.md index b42cbb6a..c82f5b1c 100644 --- a/_doc/Task.md +++ b/_doc/Task.md @@ -1,9 +1,9 @@ -2.0.2: -- [x] 对账功能补全账单比对功能 -- [x] 支付对账的序列化生成器有问题, 可以生成重复的序号 2.0.3: - [ ] 云闪付接入 +- [x] 手动触发通知消息发送 +- [ ] 退款操作支持重试 +- [x] 通知任务增加订单的状态类型,例如订单关闭、成功、失败等 2.0.x 版本内容 - [ ] 增加各类日志记录,例如钱包的各项操作 @@ -11,7 +11,6 @@ - [ ] 支付流程涉及异步支付时, 更换支付方式需要控制预防客户重复付款 - [ ] 增加撤销功能,用于处理线下支付订单的情况 - [ ] 数据库表进行规则, 字段设置长度, 增加索引 -- [ ] 退款操作支持重试 **任务池** - [x] 支付SDK编写 diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/service/ClientNoticeAssistService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/service/ClientNoticeAssistService.java index 6d75380c..7e249428 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/service/ClientNoticeAssistService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/service/ClientNoticeAssistService.java @@ -75,7 +75,8 @@ public class ClientNoticeAssistService { .setContent(JacksonUtil.toJson(payNoticeResult)) .setNoticeType(ClientNoticeTypeEnum.PAY.getType()) .setSendCount(0) - .setOrderId(order.getId()); + .setOrderId(order.getId()) + .setOrderStatus(order.getStatus()); } /** @@ -115,7 +116,8 @@ public class ClientNoticeAssistService { .setContent(JacksonUtil.toJson(payNoticeResult)) .setNoticeType(ClientNoticeTypeEnum.REFUND.getType()) .setSendCount(0) - .setOrderId(order.getId()); + .setOrderId(order.getId()) + .setOrderStatus(order.getStatus()); } } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/service/ClientNoticeService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/service/ClientNoticeService.java index 9ccf5084..f06f408d 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/service/ClientNoticeService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/service/ClientNoticeService.java @@ -249,6 +249,46 @@ public class ClientNoticeService { recordService.save(record); } + /** + * 发送通知数据, 手动触发, + */ + public void sendDataByManual(ClientNoticeTask task){ + LocalDateTime now = LocalDateTime.now(); + // 创建记录 + ClientNoticeRecord record = new ClientNoticeRecord() + .setTaskId(task.getId()) + .setSendType(ClientNoticeSendTypeEnum.MANUAL.getType()); + String body = null; + try { + HttpResponse execute = HttpUtil.createPost(task.getUrl()) + .body(task.getContent(), ContentType.JSON.getValue()) + .timeout(5000) + .execute(); + body = execute.body(); + } catch (Exception e) { + log.error("发送通知失败,数据错误,任务ID:{}",task.getOrderId()); + log.error("错误内容",e); + record.setErrorMsg(e.getMessage()); + } + // 如果响应值等于SUCCESS, 说明发送成功 + if (Objects.equals(body, "SUCCESS")){ + record.setSuccess(true); + // 如果任务不是成功状态, 修改为成功状态 + if (!task.isSuccess()){ + task.setLatestTime(now).setSuccess(true); + taskManager.updateById(task); + } + } else { + // 如果响应地址不为空, 将错误响应写到记录中 + if (Objects.nonNull(body)){ + // 预防返回值过长, 只保留100位 + record.setErrorMsg(StrUtil.sub(body,0,100)); + } + } + // 保存请求记录 + recordService.save(record); + } + /** * 成功处理 */ diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/task/notice/entity/ClientNoticeTask.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/task/notice/entity/ClientNoticeTask.java index 936d7f68..970fc438 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/task/notice/entity/ClientNoticeTask.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/task/notice/entity/ClientNoticeTask.java @@ -42,11 +42,11 @@ public class ClientNoticeTask extends MpBaseEntity implements EntityBaseFunction private String noticeType; /** - * 订单类型 + * 订单状态 * @see PayStatusEnum * @see RefundStatusEnum */ - @DbColumn(comment = "订单类型") + @DbColumn(comment = "订单状态") private String orderStatus; /** 消息内容 */ diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/task/notice/service/ClientNoticeTaskService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/task/notice/service/ClientNoticeTaskService.java index 94f71de6..e707f1f3 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/task/notice/service/ClientNoticeTaskService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/task/notice/service/ClientNoticeTaskService.java @@ -36,8 +36,14 @@ public class ClientNoticeTaskService { /** * 手动触发消息发送 + * 1. 手动触发消息发送次数不会变更 + * 2. 会记录发送历史 + * 3. 不受次数限制, 也不受状态控制. 任务完成与否都可以推送 */ public void sendData(Long taskId){ + ClientNoticeTask task = taskManager.findById(taskId) + .orElseThrow(() -> new DataNotExistException("任务不存在")); + clientNoticeService.sendDataByManual(task); } /** diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/record/notice/ClientNoticeRecordDto.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/record/notice/ClientNoticeRecordDto.java index 7dd4f0aa..6c062060 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/record/notice/ClientNoticeRecordDto.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/record/notice/ClientNoticeRecordDto.java @@ -27,7 +27,7 @@ public class ClientNoticeRecordDto extends BaseDto { * @see ClientNoticeSendTypeEnum */ @Schema(description = "发送类型") - private String type; + private String sendType; /** 请求次数 */ @Schema(description = "请求次数") diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/record/notice/ClientNoticeTaskDto.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/record/notice/ClientNoticeTaskDto.java index c284340f..ea4f6a9e 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/record/notice/ClientNoticeTaskDto.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/record/notice/ClientNoticeTaskDto.java @@ -29,7 +29,13 @@ public class ClientNoticeTaskDto extends BaseDto { * @see ClientNoticeTypeEnum */ @Schema(description = "回调类型") - private String type; + private String noticeType; + + /** + * 订单状态 + */ + @Schema(description = "订单状态") + private String orderStatus; /** 消息内容 */ @Schema(description = "消息内容")