diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/MemberPointsRecordMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/MemberPointsRecordMapper.java index 3c9032817..b5d722034 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/MemberPointsRecordMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/MemberPointsRecordMapper.java @@ -54,4 +54,9 @@ public interface MemberPointsRecordMapper { * 根据主键删除 */ int deleteByPrimaryKey(Long id); + + /** + * 根据订单号和类型统计记录数(用于幂等性校验) + */ + int countByOrderCodeAndType(@Param("orderCode") String orderCode, @Param("type") Integer type); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberPointsInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberPointsInfoServiceImpl.java index d23cbfa16..3629c93e1 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberPointsInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberPointsInfoServiceImpl.java @@ -63,6 +63,15 @@ public class MemberPointsInfoServiceImpl implements MemberPointsInfoService { throw new BusinessException(ReturnCodeEnum.valueOf("参数错误")); } + // 幂等性校验:检查该订单是否已发放过充电奖励积分 + if (StringUtils.isNotBlank(orderCode)) { + int count = memberPointsRecordMapper.countByOrderCodeAndType(orderCode, POINTS_TYPE_CHARGE_REWARD); + if (count > 0) { + logger.warn("积分已发放,跳过重复发放,memberId: {}, orderCode: {}", memberId, orderCode); + return true; + } + } + // 检查积分账户是否存在,不存在则初始化 MemberPointsInfo pointsInfo = memberPointsInfoMapper.selectByMemberId(memberId); if (pointsInfo == null) { diff --git a/jsowell-pile/src/main/resources/mapper/pile/MemberPointsRecordMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/MemberPointsRecordMapper.xml index d35f7d19c..5c63b4600 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/MemberPointsRecordMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/MemberPointsRecordMapper.xml @@ -150,4 +150,11 @@ from member_points_record where id = #{id,jdbcType=BIGINT} + +