From 1c37eb2f74eed5c05c7f26fe61ffcd375b5916cb Mon Sep 17 00:00:00 2001 From: Lemon Date: Thu, 8 Jan 2026 10:00:23 +0800 Subject: [PATCH 1/3] =?UTF-8?q?bugfix=20=20=E4=BF=AE=E5=A4=8D=E8=BF=90?= =?UTF-8?q?=E8=90=A5=E7=AB=AF=E5=B0=8F=E7=A8=8B=E5=BA=8F=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=95=B0=E6=8D=AEsql=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessStationInfoController.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/business/BusinessStationInfoController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/business/BusinessStationInfoController.java index 05f984a7c..8c622031d 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/business/BusinessStationInfoController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/business/BusinessStationInfoController.java @@ -12,9 +12,12 @@ import com.jsowell.pile.dto.business.StationBusinessAnalyzeInfoDTO; import com.jsowell.pile.dto.business.StationStatisticsInfoDTO; import com.jsowell.pile.service.OrderBasicInfoService; import com.jsowell.pile.service.PileStationInfoService; +import com.jsowell.pile.util.UserUtils; +import com.jsowell.pile.vo.base.LoginUserDetailVO; import com.jsowell.pile.vo.uniapp.business.StationBusinessAnalyzeInfoVO; import com.jsowell.pile.vo.uniapp.business.StationStatisticsInfosVO; import com.jsowell.pile.vo.web.StationSelectVO; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -83,6 +86,12 @@ public class BusinessStationInfoController extends BaseController { public RestApiResponse getStationBusinessAnalyzeInfo(@RequestBody StationBusinessAnalyzeInfoDTO dto){ RestApiResponse response = null; try { + // 获取登录账号信息 + LoginUserDetailVO loginUserDetail = UserUtils.getLoginUserDetail(); + List merchantIdList = loginUserDetail.getFirstMerchantIdList(); + if (CollectionUtils.isEmpty(dto.getStationIds())) { + dto.setStationIds(pileStationInfoService.getStationIdsByMerchantIds(merchantIdList)); + } StationBusinessAnalyzeInfoVO vo = pileStationInfoService.getStationBusinessAnalyzeInfo(dto); response = new RestApiResponse<>(ImmutableMap.of("stationBusinessAnalyzeInfoVO", vo)); } catch (Exception e) { @@ -145,6 +154,12 @@ public class BusinessStationInfoController extends BaseController { public RestApiResponse getStationOrderQuantityInfo(@RequestBody StationBusinessAnalyzeInfoDTO dto) { RestApiResponse response = null; try { + // 获取登录账号信息 + LoginUserDetailVO loginUserDetail = UserUtils.getLoginUserDetail(); + List merchantIdList = loginUserDetail.getFirstMerchantIdList(); + if (CollectionUtils.isEmpty(dto.getStationIds())) { + dto.setStationIds(pileStationInfoService.getStationIdsByMerchantIds(merchantIdList)); + } StationBusinessAnalyzeInfoVO vo = pileStationInfoService.getStationOrderQuantityInfo(dto); response = new RestApiResponse<>(ImmutableMap.of("stationBusinessAnalyzeInfoVO", vo)); } catch (Exception e) { @@ -163,6 +178,12 @@ public class BusinessStationInfoController extends BaseController { public RestApiResponse getStationConnectorUsedInfo(@RequestBody StationBusinessAnalyzeInfoDTO dto) { RestApiResponse response = null; try { + // 获取登录账号信息 + LoginUserDetailVO loginUserDetail = UserUtils.getLoginUserDetail(); + List merchantIdList = loginUserDetail.getFirstMerchantIdList(); + if (CollectionUtils.isEmpty(dto.getStationIds())) { + dto.setStationIds(pileStationInfoService.getStationIdsByMerchantIds(merchantIdList)); + } StationBusinessAnalyzeInfoVO vo = pileStationInfoService.getStationConnectorUsedInfo(dto); response = new RestApiResponse<>(ImmutableMap.of("stationBusinessAnalyzeInfoVO", vo)); } catch (Exception e) { 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 2/3] =?UTF-8?q?=E5=8F=91=E7=A7=AF=E5=88=86=E5=B9=82?= =?UTF-8?q?=E7=AD=89=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} + + From 36bc9f433defb1598ec248dfaf8cb875a6b5f899 Mon Sep 17 00:00:00 2001 From: "YAS\\29473" <2947326429@qq.com> Date: Thu, 8 Jan 2026 11:00:22 +0800 Subject: [PATCH 3/3] update --- .../src/main/resources/application-pre.yml | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/jsowell-admin/src/main/resources/application-pre.yml b/jsowell-admin/src/main/resources/application-pre.yml index 36b61249e..b095c0754 100644 --- a/jsowell-admin/src/main/resources/application-pre.yml +++ b/jsowell-admin/src/main/resources/application-pre.yml @@ -92,29 +92,11 @@ spring: multi-statement-allow: true # rabbitmq配置 pre -# rabbitmq: -# host: 172.23.0.190 -# port: 5672 -# username: guest -# password: guest -# #这个配置是保证提供者确保消息推送到交换机中,不管成不成功,都会回调 -# publisher-confirm-type: correlated -# #保证交换机能把消息推送到队列中 -# publisher-returns: true -# virtual-host: / -# #这个配置是保证消费者会消费消息,手动确认 -# listener: -# simple: -# acknowledge-mode: manual -# template: -# mandatory: true - - # rabbitmq配置 prd rabbitmq: - host: 172.23.0.187 + host: 172.23.0.190 port: 5672 - username: admin - password: js160829@ + username: guest + password: guest #这个配置是保证提供者确保消息推送到交换机中,不管成不成功,都会回调 publisher-confirm-type: correlated #保证交换机能把消息推送到队列中 @@ -127,6 +109,24 @@ spring: template: mandatory: true + # rabbitmq配置 prd +# rabbitmq: +# host: 172.23.0.187 +# port: 5672 +# username: admin +# password: js160829@ +# #这个配置是保证提供者确保消息推送到交换机中,不管成不成功,都会回调 +# publisher-confirm-type: correlated +# #保证交换机能把消息推送到队列中 +# publisher-returns: true +# virtual-host: / +# #这个配置是保证消费者会消费消息,手动确认 +# listener: +# simple: +# acknowledge-mode: manual +# template: +# mandatory: true + # Swagger配置 swagger: # 是否开启swagger