From eb46b5a23b0c51dbcf28ea481be7d1d6f71a1983 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 8 Jan 2026 10:43:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E7=A7=AF=E5=88=86=E5=B9=82=E7=AD=89?= =?UTF-8?q?=E6=80=A7=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jsowell/pile/mapper/MemberPointsRecordMapper.java | 5 +++++ .../pile/service/impl/MemberPointsInfoServiceImpl.java | 9 +++++++++ .../resources/mapper/pile/MemberPointsRecordMapper.xml | 7 +++++++ 3 files changed, 21 insertions(+) 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} + +