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) { 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 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} + +