chen.yinxiang

fix:将订阅消息合并进meal order

......@@ -11,7 +11,6 @@ import brave.propagation.TraceContext;
import brave.sampler.Sampler;
import com.tianting.infoloop.service.grpc.MealOrderGrpcService;
import com.tianting.infoloop.service.grpc.OrderGrpcService;
import com.tianting.infoloop.service.grpc.OrderSubscriptionMessageGrpcService;
import io.grpc.Server;
import io.grpc.ServerInterceptor;
import io.grpc.ServerInterceptors;
......@@ -67,13 +66,11 @@ public class AppConfig implements ApplicationContextAware {
public Server serviceServer(@Value(SERVICE_PORT) final int port,
final ServerInterceptor serverInterceptor,
final OrderGrpcService orderGrpcService,
final MealOrderGrpcService mealOrderGrpcService,
final OrderSubscriptionMessageGrpcService orderSubscriptionMessageGrpcService) {
final MealOrderGrpcService mealOrderGrpcService) {
return NettyServerBuilder
.forPort(port)
.addService(ServerInterceptors.intercept(orderGrpcService, serverInterceptor))
.addService(ServerInterceptors.intercept(mealOrderGrpcService, serverInterceptor))
.addService(ServerInterceptors.intercept(orderSubscriptionMessageGrpcService, serverInterceptor))
.build();
}
}
......
package com.tianting.infoloop.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.infoloop.tianting.ordersubscriptionmessageservice.CreateOrderSubscriptionMessageRpcRequest;
import com.infoloop.tianting.ordersubscriptionmessageservice.GetUserOrderSubscriptionMessageHistoryRpcRequest;
import com.infoloop.tianting.mealorderservice.CreateOrderSubscriptionMessageRpcRequest;
import com.infoloop.tianting.mealorderservice.GetUserOrderSubscriptionMessageHistoryRpcRequest;
import com.tianting.infoloop.model.db.OrderSubscriptionMessageDb;
import java.util.List;
......
......@@ -7,6 +7,15 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.infoloop.tianting.mealorderservice.BatchCreateDinerMealSuspensionRecordsRpcRequest;
import com.infoloop.tianting.mealorderservice.BatchCreateDinerMealSuspensionRecordsRpcResponse;
import com.infoloop.tianting.mealorderservice.BatchCreateGradeClassesRpcRequest;
import com.infoloop.tianting.mealorderservice.BatchDeleteOrderSubscriptionMessagesByIdsRpcRequest;
import com.infoloop.tianting.mealorderservice.BatchDeleteOrderSubscriptionMessagesByIdsRpcResponse;
import com.infoloop.tianting.mealorderservice.BatchPhysicalDeleteOrderSubscriptionMessagesByIdsRpcRequest;
import com.infoloop.tianting.mealorderservice.BatchPhysicalDeleteOrderSubscriptionMessagesByIdsRpcResponse;
import com.infoloop.tianting.mealorderservice.CreateOrderSubscriptionMessageRpcRequest;
import com.infoloop.tianting.mealorderservice.CreateOrderSubscriptionMessageRpcResponse;
import com.infoloop.tianting.mealorderservice.GetUserOrderSubscriptionMessageHistoryRpcRequest;
import com.infoloop.tianting.mealorderservice.GetUserOrderSubscriptionMessageHistoryRpcResponse;
import com.infoloop.tianting.mealorderservice.OrderSubscriptionMessageRpcResponse;
import com.infoloop.tianting.mealorderservice.BatchCreateGradeClassesRpcResponse;
import com.infoloop.tianting.mealorderservice.BatchCreateMealOrdersRpcRequest;
import com.infoloop.tianting.mealorderservice.BatchCreateMealOrdersRpcResponse;
......@@ -124,6 +133,8 @@ import com.tianting.infoloop.service.MealOrderService;
import com.tianting.infoloop.service.MpAccountDinerRefService;
import com.tianting.infoloop.service.MpAccountService;
import com.tianting.infoloop.service.DinerMealSuspensionRecordService;
import com.tianting.infoloop.service.OrderSubscriptionMessageDbService;
import com.tianting.infoloop.model.db.OrderSubscriptionMessageDb;
import com.tianting.infoloop.utils.ProtoBeanUtil;
import io.grpc.Status;
import io.grpc.stub.StreamObserver;
......@@ -134,10 +145,10 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.DayOfWeek;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.Collections;
......@@ -167,6 +178,8 @@ public class MealOrderGrpcService extends MealOrderServiceRpcGrpc.MealOrderServi
private final DinerMealSuspensionRecordService dinerMealSuspensionRecordService;
private final OrderSubscriptionMessageDbService orderSubscriptionMessageDbService;
@Override
@DS(DATA_SOURCE_SLAVE)
public void getMealOrderById(final GetMealOrderByIdRpcRequest request,
......@@ -1417,4 +1430,115 @@ public class MealOrderGrpcService extends MealOrderServiceRpcGrpc.MealOrderServi
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
}
// 订餐订阅消息相关服务实现
@Override
@DS(DATA_SOURCE_MASTER)
public void createOrderSubscriptionMessage(final CreateOrderSubscriptionMessageRpcRequest request,
final StreamObserver<CreateOrderSubscriptionMessageRpcResponse> responseObserver) {
final var builder = CreateOrderSubscriptionMessageRpcResponse.newBuilder();
try {
final var data = orderSubscriptionMessageDbService.createOrderSubscriptionMessage(request);
builder.setId(data.getId());
} catch (final Exception e) {
log.error("createOrderSubscriptionMessage error;", e);
responseObserver.onError(Status.INTERNAL.withDescription(e.getMessage()).asException());
return;
}
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
}
@Override
@DS(DATA_SOURCE_MASTER)
public void getUserOrderSubscriptionMessageHistory(final GetUserOrderSubscriptionMessageHistoryRpcRequest request,
final StreamObserver<GetUserOrderSubscriptionMessageHistoryRpcResponse> responseObserver) {
final var builder = GetUserOrderSubscriptionMessageHistoryRpcResponse.newBuilder();
try {
final var list = orderSubscriptionMessageDbService.getUserOrderSubscriptionMessageHistory(request);
builder.addAllResponse(list.stream()
.map(this::convertToRpcResponse)
.collect(Collectors.toList()));
} catch (final Exception e) {
log.error("getUserOrderSubscriptionMessageHistory error;", e);
responseObserver.onError(Status.INTERNAL.withDescription(e.getMessage()).asException());
return;
}
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
}
private OrderSubscriptionMessageRpcResponse convertToRpcResponse(OrderSubscriptionMessageDb db) {
OrderSubscriptionMessageRpcResponse.Builder builder = OrderSubscriptionMessageRpcResponse.newBuilder();
builder.setId(db.getId());
if (db.getJumpPath() != null) {
builder.setJumpPath(db.getJumpPath());
}
// 转换LocalDateTime为时间戳(毫秒),与项目中其他时间字段保持一致
if (db.getOrderPeriodStartDate() != null) {
long timestamp = db.getOrderPeriodStartDate().atZone(ZoneId.systemDefault())
.toInstant()
.toEpochMilli();
builder.setOrderPeriodStartDate(timestamp);
}
if (db.getOrderPeriodEndDate() != null) {
long timestamp = db.getOrderPeriodEndDate().atZone(ZoneId.systemDefault())
.toInstant()
.toEpochMilli();
builder.setOrderPeriodEndDate(timestamp);
}
// 转换LocalDateTime为时间戳(毫秒)
if (db.getCreatedAt() != null) {
long timestamp = db.getCreatedAt().atZone(ZoneId.systemDefault())
.toInstant()
.toEpochMilli();
builder.setCreatedAt(timestamp);
}
builder.setIsDeleted(db.getIsDeleted() != null && db.getIsDeleted());
return builder.build();
}
@Override
@DS(DATA_SOURCE_MASTER)
public void batchDeleteOrderSubscriptionMessagesByIds(final BatchDeleteOrderSubscriptionMessagesByIdsRpcRequest request,
final StreamObserver<BatchDeleteOrderSubscriptionMessagesByIdsRpcResponse> responseObserver) {
final var builder = BatchDeleteOrderSubscriptionMessagesByIdsRpcResponse.newBuilder();
try {
final int affectedRows = orderSubscriptionMessageDbService.batchDeleteByIds(
request.getIdsList(),
request.getEnterpriseId());
builder.setAffectedRows(affectedRows);
} catch (final Exception e) {
log.error("batchDeleteOrderSubscriptionMessagesByIds error;", e);
responseObserver.onError(Status.INTERNAL.withDescription(e.getMessage()).asException());
return;
}
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
}
@Override
@DS(DATA_SOURCE_MASTER)
public void batchPhysicalDeleteOrderSubscriptionMessagesByIds(
final BatchPhysicalDeleteOrderSubscriptionMessagesByIdsRpcRequest request,
final StreamObserver<BatchPhysicalDeleteOrderSubscriptionMessagesByIdsRpcResponse> responseObserver) {
final var builder = BatchPhysicalDeleteOrderSubscriptionMessagesByIdsRpcResponse.newBuilder();
try {
final int affectedRows = orderSubscriptionMessageDbService.batchPhysicalDeleteByIds(
request.getIdsList(),
request.getEnterpriseId());
builder.setAffectedRows(affectedRows);
} catch (final Exception e) {
log.error("batchPhysicalDeleteOrderSubscriptionMessagesByIds error;", e);
responseObserver.onError(Status.INTERNAL.withDescription(e.getMessage()).asException());
return;
}
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
}
}
......
package com.tianting.infoloop.service.grpc;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.infoloop.tianting.ordersubscriptionmessageservice.BatchDeleteOrderSubscriptionMessagesByIdsRpcRequest;
import com.infoloop.tianting.ordersubscriptionmessageservice.BatchDeleteOrderSubscriptionMessagesByIdsRpcResponse;
import com.infoloop.tianting.ordersubscriptionmessageservice.BatchPhysicalDeleteOrderSubscriptionMessagesByIdsRpcRequest;
import com.infoloop.tianting.ordersubscriptionmessageservice.BatchPhysicalDeleteOrderSubscriptionMessagesByIdsRpcResponse;
import com.infoloop.tianting.ordersubscriptionmessageservice.CreateOrderSubscriptionMessageRpcRequest;
import com.infoloop.tianting.ordersubscriptionmessageservice.CreateOrderSubscriptionMessageRpcResponse;
import com.infoloop.tianting.ordersubscriptionmessageservice.GetUserOrderSubscriptionMessageHistoryRpcRequest;
import com.infoloop.tianting.ordersubscriptionmessageservice.GetUserOrderSubscriptionMessageHistoryRpcResponse;
import com.infoloop.tianting.ordersubscriptionmessageservice.OrderSubscriptionMessageRpcResponse;
import com.infoloop.tianting.ordersubscriptionmessageservice.OrderSubscriptionMessageServiceRpcGrpc;
import com.tianting.infoloop.model.db.OrderSubscriptionMessageDb;
import com.tianting.infoloop.service.OrderSubscriptionMessageDbService;
import io.grpc.Status;
import io.grpc.stub.StreamObserver;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.ZoneId;
import java.util.stream.Collectors;
import static com.tianting.infoloop.constants.ConfigConstants.DATA_SOURCE_MASTER;
@Slf4j
@Service
@RequiredArgsConstructor(onConstructor_ = @Autowired)
public class OrderSubscriptionMessageGrpcService extends OrderSubscriptionMessageServiceRpcGrpc.OrderSubscriptionMessageServiceRpcImplBase {
private final OrderSubscriptionMessageDbService orderSubscriptionMessageDbService;
@Override
@DS(DATA_SOURCE_MASTER)
public void createOrderSubscriptionMessage(final CreateOrderSubscriptionMessageRpcRequest request,
final StreamObserver<CreateOrderSubscriptionMessageRpcResponse> responseObserver) {
final var builder = CreateOrderSubscriptionMessageRpcResponse.newBuilder();
try {
final var data = orderSubscriptionMessageDbService.createOrderSubscriptionMessage(request);
builder.setId(data.getId());
} catch (final Exception e) {
log.error("createOrderSubscriptionMessage error;", e);
responseObserver.onError(Status.INTERNAL.withDescription(e.getMessage()).asException());
return;
}
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
}
@Override
@DS(DATA_SOURCE_MASTER)
public void getUserOrderSubscriptionMessageHistory(final GetUserOrderSubscriptionMessageHistoryRpcRequest request,
final StreamObserver<GetUserOrderSubscriptionMessageHistoryRpcResponse> responseObserver) {
final var builder = GetUserOrderSubscriptionMessageHistoryRpcResponse.newBuilder();
try {
final var list = orderSubscriptionMessageDbService.getUserOrderSubscriptionMessageHistory(request);
builder.addAllResponse(list.stream()
.map(this::convertToRpcResponse)
.collect(Collectors.toList()));
} catch (final Exception e) {
log.error("getUserOrderSubscriptionMessageHistory error;", e);
responseObserver.onError(Status.INTERNAL.withDescription(e.getMessage()).asException());
return;
}
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
}
private OrderSubscriptionMessageRpcResponse convertToRpcResponse(OrderSubscriptionMessageDb db) {
OrderSubscriptionMessageRpcResponse.Builder builder = OrderSubscriptionMessageRpcResponse.newBuilder();
builder.setId(db.getId());
if (db.getJumpPath() != null) {
builder.setJumpPath(db.getJumpPath());
}
// 转换LocalDateTime为时间戳(毫秒),与项目中其他时间字段保持一致
if (db.getOrderPeriodStartDate() != null) {
long timestamp = db.getOrderPeriodStartDate().atZone(ZoneId.systemDefault())
.toInstant()
.toEpochMilli();
builder.setOrderPeriodStartDate(timestamp);
}
if (db.getOrderPeriodEndDate() != null) {
long timestamp = db.getOrderPeriodEndDate().atZone(ZoneId.systemDefault())
.toInstant()
.toEpochMilli();
builder.setOrderPeriodEndDate(timestamp);
}
// 转换LocalDateTime为时间戳(毫秒)
if (db.getCreatedAt() != null) {
long timestamp = db.getCreatedAt().atZone(ZoneId.systemDefault())
.toInstant()
.toEpochMilli();
builder.setCreatedAt(timestamp);
}
builder.setIsDeleted(db.getIsDeleted() != null && db.getIsDeleted());
return builder.build();
}
@Override
@DS(DATA_SOURCE_MASTER)
public void batchDeleteOrderSubscriptionMessagesByIds(final BatchDeleteOrderSubscriptionMessagesByIdsRpcRequest request,
final StreamObserver<BatchDeleteOrderSubscriptionMessagesByIdsRpcResponse> responseObserver) {
final var builder = BatchDeleteOrderSubscriptionMessagesByIdsRpcResponse.newBuilder();
try {
final int affectedRows = orderSubscriptionMessageDbService.batchDeleteByIds(
request.getIdsList(),
request.getEnterpriseId());
builder.setAffectedRows(affectedRows);
} catch (final Exception e) {
log.error("batchDeleteOrderSubscriptionMessagesByIds error;", e);
responseObserver.onError(Status.INTERNAL.withDescription(e.getMessage()).asException());
return;
}
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
}
@Override
@DS(DATA_SOURCE_MASTER)
public void batchPhysicalDeleteOrderSubscriptionMessagesByIds(
final BatchPhysicalDeleteOrderSubscriptionMessagesByIdsRpcRequest request,
final StreamObserver<BatchPhysicalDeleteOrderSubscriptionMessagesByIdsRpcResponse> responseObserver) {
final var builder = BatchPhysicalDeleteOrderSubscriptionMessagesByIdsRpcResponse.newBuilder();
try {
final int affectedRows = orderSubscriptionMessageDbService.batchPhysicalDeleteByIds(
request.getIdsList(),
request.getEnterpriseId());
builder.setAffectedRows(affectedRows);
} catch (final Exception e) {
log.error("batchPhysicalDeleteOrderSubscriptionMessagesByIds error;", e);
responseObserver.onError(Status.INTERNAL.withDescription(e.getMessage()).asException());
return;
}
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
}
}
......@@ -2,8 +2,8 @@ package com.tianting.infoloop.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.infoloop.tianting.ordersubscriptionmessageservice.CreateOrderSubscriptionMessageRpcRequest;
import com.infoloop.tianting.ordersubscriptionmessageservice.GetUserOrderSubscriptionMessageHistoryRpcRequest;
import com.infoloop.tianting.mealorderservice.CreateOrderSubscriptionMessageRpcRequest;
import com.infoloop.tianting.mealorderservice.GetUserOrderSubscriptionMessageHistoryRpcRequest;
import com.tianting.infoloop.mapper.OrderSubscriptionMessageMapper;
import com.tianting.infoloop.model.db.OrderSubscriptionMessageDb;
import com.tianting.infoloop.service.OrderSubscriptionMessageDbService;
......
......@@ -63,6 +63,12 @@ service MealOrderServiceRpc {
rpc batchCreateDinerMealSuspensionRecords(BatchCreateDinerMealSuspensionRecordsRpcRequest) returns (BatchCreateDinerMealSuspensionRecordsRpcResponse);
rpc updateDinerMealSuspensionRecord(UpdateDinerMealSuspensionRecordRpcRequest) returns (UpdateDinerMealSuspensionRecordRpcResponse);
rpc deleteDinerMealSuspensionRecordsByIds(DeleteDinerMealSuspensionRecordsByIdsRpcRequest) returns (DeleteDinerMealSuspensionRecordsRpcResponse);
// 订餐订阅消息相关服务
rpc CreateOrderSubscriptionMessage (CreateOrderSubscriptionMessageRpcRequest) returns (CreateOrderSubscriptionMessageRpcResponse) {}
rpc GetUserOrderSubscriptionMessageHistory (GetUserOrderSubscriptionMessageHistoryRpcRequest) returns (GetUserOrderSubscriptionMessageHistoryRpcResponse) {}
rpc BatchDeleteOrderSubscriptionMessagesByIds (BatchDeleteOrderSubscriptionMessagesByIdsRpcRequest) returns (BatchDeleteOrderSubscriptionMessagesByIdsRpcResponse) {}
rpc BatchPhysicalDeleteOrderSubscriptionMessagesByIds (BatchPhysicalDeleteOrderSubscriptionMessagesByIdsRpcRequest) returns (BatchPhysicalDeleteOrderSubscriptionMessagesByIdsRpcResponse) {}
}
enum MealOrderOrderMethodEnum {
......@@ -955,3 +961,55 @@ message BatchCreateDinerMealSuspensionRecordsRpcResponse {
bool isCreated = 1;
repeated int32 ids = 2;
}
// 订餐订阅消息相关消息定义
message CreateOrderSubscriptionMessageRpcRequest {
int32 enterpriseId = 1;
int32 dinerId = 2;
string openId = 3;
string templateId = 4;
int64 orderPeriodStartDate = 5; // Unix 时间戳(毫秒),精确到秒
string jumpPath = 6; // 跳转路径(小程序 path),可选
int64 orderPeriodEndDate = 7; // Unix 时间戳(毫秒),精确到秒,可选
}
message CreateOrderSubscriptionMessageRpcResponse {
int64 id = 1;
}
message GetUserOrderSubscriptionMessageHistoryRpcRequest {
int32 enterpriseId = 1;
string openId = 2;
int64 orderPeriodStartDate = 3; // Unix 时间戳(毫秒),精确到秒,可选,如果传入则查询大于等于该值的记录
}
message OrderSubscriptionMessageRpcResponse {
int64 id = 1;
int64 orderPeriodStartDate = 2; // Unix 时间戳(毫秒),精确到秒
int64 createdAt = 3; // Unix 时间戳(毫秒)
bool isDeleted = 4;
string jumpPath = 5; // 跳转路径(小程序 path),可选
int64 orderPeriodEndDate = 6; // Unix 时间戳(毫秒),精确到秒,可选
}
message GetUserOrderSubscriptionMessageHistoryRpcResponse {
repeated OrderSubscriptionMessageRpcResponse response = 1;
}
message BatchDeleteOrderSubscriptionMessagesByIdsRpcRequest {
int32 enterpriseId = 1;
repeated int64 ids = 2; // 要删除的记录ID列表
}
message BatchDeleteOrderSubscriptionMessagesByIdsRpcResponse {
int32 affectedRows = 1; // 受影响的行数
}
message BatchPhysicalDeleteOrderSubscriptionMessagesByIdsRpcRequest {
int32 enterpriseId = 1;
repeated int64 ids = 2; // 要删除的记录ID列表
}
message BatchPhysicalDeleteOrderSubscriptionMessagesByIdsRpcResponse {
int32 affectedRows = 1; // 受影响的行数
}
......
syntax = "proto3";
option java_multiple_files = true;
option java_package = "com.infoloop.tianting.ordersubscriptionmessageservice";
option java_outer_classname = "OrderSubscriptionMessageServiceProto";
option objc_class_prefix = "OP";
package com.infoloop.tianting.ordersubscriptionmessageservice;
service OrderSubscriptionMessageServiceRpc {
// 创建订阅消息授权
rpc CreateOrderSubscriptionMessage (CreateOrderSubscriptionMessageRpcRequest) returns (CreateOrderSubscriptionMessageRpcResponse) {}
// 查询用户授权历史
rpc GetUserOrderSubscriptionMessageHistory (GetUserOrderSubscriptionMessageHistoryRpcRequest) returns (GetUserOrderSubscriptionMessageHistoryRpcResponse) {}
// 批量逻辑删除授权记录(表示已使用)
rpc BatchDeleteOrderSubscriptionMessagesByIds (BatchDeleteOrderSubscriptionMessagesByIdsRpcRequest) returns (BatchDeleteOrderSubscriptionMessagesByIdsRpcResponse) {}
// 批量物理删除授权记录
rpc BatchPhysicalDeleteOrderSubscriptionMessagesByIds (BatchPhysicalDeleteOrderSubscriptionMessagesByIdsRpcRequest) returns (BatchPhysicalDeleteOrderSubscriptionMessagesByIdsRpcResponse) {}
}
// 创建订阅消息授权请求
message CreateOrderSubscriptionMessageRpcRequest {
int32 enterpriseId = 1;
int32 dinerId = 2;
string openId = 3;
string templateId = 4;
int64 orderPeriodStartDate = 5; // Unix 时间戳(毫秒),精确到秒
string jumpPath = 6; // 跳转路径(小程序 path),可选
int64 orderPeriodEndDate = 7; // Unix 时间戳(毫秒),精确到秒,可选
}
// 创建订阅消息授权响应
message CreateOrderSubscriptionMessageRpcResponse {
int64 id = 1;
}
// 查询用户授权历史请求
message GetUserOrderSubscriptionMessageHistoryRpcRequest {
int32 enterpriseId = 1;
string openId = 2;
int64 orderPeriodStartDate = 3; // Unix 时间戳(毫秒),精确到秒,可选,如果传入则查询大于等于该值的记录
}
// 订阅消息授权记录
message OrderSubscriptionMessageRpcResponse {
int64 id = 1;
int64 orderPeriodStartDate = 2; // Unix 时间戳(毫秒),精确到秒
int64 createdAt = 3; // Unix 时间戳(毫秒)
bool isDeleted = 4;
string jumpPath = 5; // 跳转路径(小程序 path),可选
int64 orderPeriodEndDate = 6; // Unix 时间戳(毫秒),精确到秒,可选
}
// 查询用户授权历史响应
message GetUserOrderSubscriptionMessageHistoryRpcResponse {
repeated OrderSubscriptionMessageRpcResponse response = 1;
}
// 批量逻辑删除授权记录请求
message BatchDeleteOrderSubscriptionMessagesByIdsRpcRequest {
int32 enterpriseId = 1;
repeated int64 ids = 2; // 要删除的记录ID列表
}
// 批量逻辑删除授权记录响应
message BatchDeleteOrderSubscriptionMessagesByIdsRpcResponse {
int32 affectedRows = 1; // 受影响的行数
}
// 批量物理删除授权记录请求
message BatchPhysicalDeleteOrderSubscriptionMessagesByIdsRpcRequest {
int32 enterpriseId = 1;
repeated int64 ids = 2; // 要删除的记录ID列表
}
// 批量物理删除授权记录响应
message BatchPhysicalDeleteOrderSubscriptionMessagesByIdsRpcResponse {
int32 affectedRows = 1; // 受影响的行数
}