feat 手动触发通知消息发送, 通知任务增加订单的状态类型

This commit is contained in:
bootx
2024-03-05 23:23:44 +08:00
parent bc43d57cfb
commit 60d3dd9c11
8 changed files with 64 additions and 11 deletions

View File

@@ -161,7 +161,7 @@ public class SimplePayOrderTest {
[**更新记录**](/_doc/ChangeLog.md)
### 2.0.X版本:
- [ ] 对账比对功能实现
- [x] 对账比对功能实现
- [ ] 支持转账、分账操作
- [ ] 云闪付支付支持
- [ ] 支付宝和微信增加V3版本接口支持

View File

@@ -1,9 +1,9 @@
2.0.2:
- [x] 对账功能补全账单比对功能
- [x] 支付对账的序列化生成器有问题, 可以生成重复的序号
2.0.3:
- [ ] 云闪付接入
- [x] 手动触发通知消息发送
- [ ] 退款操作支持重试
- [x] 通知任务增加订单的状态类型,例如订单关闭、成功、失败等
2.0.x 版本内容
- [ ] 增加各类日志记录,例如钱包的各项操作
@@ -11,7 +11,6 @@
- [ ] 支付流程涉及异步支付时, 更换支付方式需要控制预防客户重复付款
- [ ] 增加撤销功能,用于处理线下支付订单的情况
- [ ] 数据库表进行规则, 字段设置长度, 增加索引
- [ ] 退款操作支持重试
**任务池**
- [x] 支付SDK编写

View File

@@ -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());
}
}

View File

@@ -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);
}
/**
* 成功处理
*/

View File

@@ -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;
/** 消息内容 */

View File

@@ -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);
}
/**

View File

@@ -27,7 +27,7 @@ public class ClientNoticeRecordDto extends BaseDto {
* @see ClientNoticeSendTypeEnum
*/
@Schema(description = "发送类型")
private String type;
private String sendType;
/** 请求次数 */
@Schema(description = "请求次数")

View File

@@ -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 = "消息内容")