v1.0.20
CI / build-deploy (pull_request) Successful in 30s
CI / notify-on-failure (pull_request) Skipped

This commit is contained in:
Timi
2026-08-21 15:25:04 +08:00
parent 022185079c
commit 4963988ec2
11 changed files with 149 additions and 16 deletions
@@ -61,15 +61,15 @@ public class GaoCustomer extends UUIDEntity {
/// 姓名
private String name;
@Column("zh_cn_pinyin_full")
@Column("name_pinyin_full")
@JsonIgnore
private String namePinyinFull;
@Column("zh_cn_pinyin_initial")
@Column("name_pinyin_initial")
@JsonIgnore
private String namePinyinInitial;
@Column("zh_cn_pinyin_mixed")
@Column("name_pinyin_mixed")
@JsonIgnore
private String namePinyinMixed;
@@ -17,9 +17,12 @@ public class GaoPointLedger extends UUIDEntity {
/// 流水变化类型
public enum ChangeType {
/// 登记事件积分变化
/// 登记事件发放积分
EARN,
/// 登记事件消费积分
CONSUME,
/// 删除登记记录撤销积分
REVOKE,
@@ -19,11 +19,11 @@ public interface GaoPointLedgerMapper extends BaseMapper<GaoPointLedger, String>
/// @return 流水
GaoPointLedger selectByIdempotencyKey(@Param("idempotencyKey") String idempotencyKey);
/// 查询登记记录产生的原始获得积分流水
/// 查询登记记录产生的原始规则积分流水
///
/// @param eventRecordId 登记记录 ID
/// @return 获得积分流水
List<GaoPointLedger> selectEarnByEventRecordId(@Param("eventRecordId") String eventRecordId);
/// @return 原始规则积分流水
List<GaoPointLedger> selectRuleChangeByEventRecordId(@Param("eventRecordId") String eventRecordId);
/// 批量查询幂等键对应的流水
///
@@ -15,18 +15,18 @@ import com.imyeyu.spring.service.BaseService;
/// @since 2026-08-11
public interface GaoPointLedgerService extends BaseService<GaoPointLedger, String> {
/// 写入登记获得积分流水
/// 写入登记规则积分流水
///
/// @param record 登记记录
/// @param rule 命中规则
/// @param pointDelta 积分变化
/// @param sourcePayload 来源快照
/// @return 积分流水
GaoPointLedger earn(GaoEventRecord record, GaoPointRule rule, long pointDelta, JsonNode sourcePayload);
GaoPointLedger applyRule(GaoEventRecord record, GaoPointRule rule, long pointDelta, JsonNode sourcePayload);
/// 写入删除登记记录的撤销流水
///
/// @param originLedger 原始获得积分流水
/// @param originLedger 原始规则积分流水
/// @param record 登记记录
/// @return 撤销流水
GaoPointLedger revoke(GaoPointLedger originLedger, GaoEventRecord record);
@@ -71,12 +71,13 @@ public class GaoPointLedgerServiceImplement extends AbstractEntityService<GaoPoi
@Transactional(TimiServerDBConfig.ROLLBACKER)
@Override
public GaoPointLedger earn(GaoEventRecord record, GaoPointRule rule, long pointDelta, JsonNode sourcePayload) {
public GaoPointLedger applyRule(GaoEventRecord record, GaoPointRule rule, long pointDelta, JsonNode sourcePayload) {
TimiException.required(record, "not found event record");
TimiException.required(rule, "not found point rule");
TimiException.requiredTrue(pointDelta != 0, "pointDelta invalid");
String idempotencyKey = "GAO_EVENT_RECORD:%s:RULE:%s:EARN".formatted(record.getId(), rule.getId());
return apply(record.getStoreId(), record.getCustomerId(), GaoPointLedger.ChangeType.EARN, pointDelta, rule.getId(), record.getEventId(), record.getId(), sourcePayload, idempotencyKey, rule.getRemark(), record.getOperatorUserId(), record.getRegisteredAt());
GaoPointLedger.ChangeType changeType = pointDelta < 0 ? GaoPointLedger.ChangeType.CONSUME : GaoPointLedger.ChangeType.EARN;
return apply(record.getStoreId(), record.getCustomerId(), changeType, pointDelta, rule.getId(), record.getEventId(), record.getId(), sourcePayload, idempotencyKey, rule.getRemark(), record.getOperatorUserId(), record.getRegisteredAt());
}
@Transactional(TimiServerDBConfig.ROLLBACKER)
@@ -73,7 +73,7 @@ public class GaoPointTriggerServiceImplement implements GaoPointTriggerService {
}
long pointDelta = resolution.pointDelta();
if (pointDelta != 0) {
ledgerService.earn(record, rule, pointDelta, resolution.sourcePayload());
ledgerService.applyRule(record, rule, pointDelta, resolution.sourcePayload());
pointDeltaTotal = Math.addExact(pointDeltaTotal, pointDelta);
}
if (Boolean.TRUE.equals(rule.getExclusive())) {
@@ -88,7 +88,7 @@ public class GaoPointTriggerServiceImplement implements GaoPointTriggerService {
@Override
public void revokeByEventRecord(GaoEventRecord record) {
TimiException.required(record, "not found event record");
List<GaoPointLedger> originLedgerList = ledgerMapper.selectEarnByEventRecordId(record.getId());
List<GaoPointLedger> originLedgerList = ledgerMapper.selectRuleChangeByEventRecordId(record.getId());
if (originLedgerList.isEmpty()) {
return;
}