From 82e8dc0bfea1edeb51e08856ab7885c1d0d77c9a Mon Sep 17 00:00:00 2001 From: hy001 Date: Mon, 27 Apr 2026 12:38:08 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A4=BC=E7=89=A9=E5=8C=BA=E5=9F=9F=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rc-scheduling/pom.xml | 31 +++++---- .../src/main/resources/application-local.yml | 2 +- .../src/main/resources/bootstrap.yml | 4 ++ .../src/main/resources/bootstrap.yml | 14 ++-- .../gift/api/GiftConfigClientApi.java | 27 +++++--- .../app/sys/SysGiftConfigRestController.java | 45 ++++++++---- .../app/sys/SysGiftConfigServiceImpl.java | 41 +++++++---- .../app/dto/cmd/app/sys/GiftRegionAddCmd.java | 27 ++++++++ .../service/app/sys/SysGiftConfigService.java | 24 ++++--- .../impl/ImGroupClientServiceImpl.java | 36 +++++++++- .../impl/ImGroupClientServiceImplTest.java | 50 ++++++++++++++ .../rds/service/gift/GiftConfigService.java | 21 +++--- .../gift/impl/GiftConfigServiceImpl.java | 68 +++++++++++++++---- .../gift/GiftConfigClientEndpoint.java | 17 +++-- .../gift/GiftConfigClientService.java | 21 +++--- .../impl/GiftConfigClientServiceImpl.java | 17 +++-- 16 files changed, 339 insertions(+), 106 deletions(-) create mode 100644 rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/dto/cmd/app/sys/GiftRegionAddCmd.java diff --git a/rc-scheduling/pom.xml b/rc-scheduling/pom.xml index d414f286..86115c63 100644 --- a/rc-scheduling/pom.xml +++ b/rc-scheduling/pom.xml @@ -38,14 +38,20 @@ spring-boot-starter-jdbc - - mysql - mysql-connector-java - ${mysql-connector-java.version} - - - - org.yaml + + mysql + mysql-connector-java + ${mysql-connector-java.version} + + + + p6spy + p6spy + ${p6spy.version} + + + + org.yaml snakeyaml ${snakeyaml.version} @@ -113,10 +119,11 @@ true - 3.0.4 - 2.2 - 8.0.33 - + 3.0.4 + 2.2 + 8.0.33 + 3.8.5 + rc-dependencies diff --git a/rc-scheduling/src/main/resources/application-local.yml b/rc-scheduling/src/main/resources/application-local.yml index 3212ed01..b2816ff9 100644 --- a/rc-scheduling/src/main/resources/application-local.yml +++ b/rc-scheduling/src/main/resources/application-local.yml @@ -23,5 +23,5 @@ feign: elasticjob: reg-center: - server-lists: 127.0.0.1:2181 + server-lists: zookeeper:2181 namespace: rc-scheduling-local diff --git a/rc-scheduling/src/main/resources/bootstrap.yml b/rc-scheduling/src/main/resources/bootstrap.yml index c372d743..b309e8b0 100644 --- a/rc-scheduling/src/main/resources/bootstrap.yml +++ b/rc-scheduling/src/main/resources/bootstrap.yml @@ -27,6 +27,10 @@ spring: config: import: - optional:nacos:application.@register.file-extension@ + - optional:nacos:rds-config.@register.file-extension@?group=@config.group.common@ + - optional:nacos:redis-config.@register.file-extension@?group=@config.group.common@ + - optional:nacos:external.@register.file-extension@?refresh=true&group=@config.group.common@ + - optional:nacos:rocketmq.@register.file-extension@?group=@config.group.common@ - optional:nacos:framework-config.@register.file-extension@?refresh=true&group=@config.group.common@ logging: diff --git a/rc-service-game/game-fruit/src/main/resources/bootstrap.yml b/rc-service-game/game-fruit/src/main/resources/bootstrap.yml index 9e2dc041..15149b55 100644 --- a/rc-service-game/game-fruit/src/main/resources/bootstrap.yml +++ b/rc-service-game/game-fruit/src/main/resources/bootstrap.yml @@ -25,12 +25,14 @@ spring: cache: ttl: 5s - config: - import: - - optional:nacos:application.@register.file-extension@?refresh=true&group=@artifactId@ - - optional:nacos:application-${spring-profile.active}.@register.file-extension@?refresh=true&group=@artifactId@ - - optional:nacos:${spring.application.name}-${spring-profile.active}.@register.file-extension@?refresh=true&group=@artifactId@ - - optional:nacos:rocketmq.@register.file-extension@?group=@config.group.common@ + config: + import: + - optional:nacos:application.@register.file-extension@?refresh=true&group=@artifactId@ + - optional:nacos:application-${spring-profile.active}.@register.file-extension@?refresh=true&group=@artifactId@ + - optional:nacos:${spring.application.name}-${spring-profile.active}.@register.file-extension@?refresh=true&group=@artifactId@ + - optional:nacos:rds-config.@register.file-extension@?group=@config.group.common@ + - optional:nacos:redis-config.@register.file-extension@?group=@config.group.common@ + - optional:nacos:rocketmq.@register.file-extension@?group=@config.group.common@ # - optional:nacos:external.@register.file-extension@?refresh=true&group=@config.group.common@ - optional:nacos:framework-config.@register.file-extension@?refresh=true&group=@config.group.common@ diff --git a/rc-service/rc-inner-api/other-inner/other-inner-api/src/main/java/com/red/circle/other/inner/endpoint/material/gift/api/GiftConfigClientApi.java b/rc-service/rc-inner-api/other-inner/other-inner-api/src/main/java/com/red/circle/other/inner/endpoint/material/gift/api/GiftConfigClientApi.java index 04c3d1c3..e1e0a62b 100644 --- a/rc-service/rc-inner-api/other-inner/other-inner-api/src/main/java/com/red/circle/other/inner/endpoint/material/gift/api/GiftConfigClientApi.java +++ b/rc-service/rc-inner-api/other-inner/other-inner-api/src/main/java/com/red/circle/other/inner/endpoint/material/gift/api/GiftConfigClientApi.java @@ -89,16 +89,23 @@ public interface GiftConfigClientApi { @PostMapping("/saveGift") ResultResponse saveGift(@RequestBody GiftConfigDTO giftConfig); - /** - * 上下架礼物. - */ - @GetMapping("/switchDelStatus") - ResultResponse switchDelStatus(@RequestParam("id") Long id, - @RequestParam("status") Boolean status); - - /** - * 礼物列表. - */ + /** + * 上下架礼物. + */ + @GetMapping("/switchDelStatus") + ResultResponse switchDelStatus(@RequestParam("id") Long id, + @RequestParam("status") Boolean status); + + /** + * 批量追加当前平台所有礼物区域. + */ + @PostMapping("/addAllGiftRegion") + ResultResponse addAllGiftRegion(@RequestParam("sysOrigin") String sysOrigin, + @RequestParam("regionId") String regionId); + + /** + * 礼物列表. + */ @GetMapping("/listByTab") ResultResponse> listByTab(@RequestParam("sysOrigin") String sysOrigin, @RequestParam("giftTab") String giftTab); diff --git a/rc-service/rc-service-console/console-adapter/src/main/java/com/red/circle/console/adapter/app/sys/SysGiftConfigRestController.java b/rc-service/rc-service-console/console-adapter/src/main/java/com/red/circle/console/adapter/app/sys/SysGiftConfigRestController.java index 85417d38..98172f32 100644 --- a/rc-service/rc-service-console/console-adapter/src/main/java/com/red/circle/console/adapter/app/sys/SysGiftConfigRestController.java +++ b/rc-service/rc-service-console/console-adapter/src/main/java/com/red/circle/console/adapter/app/sys/SysGiftConfigRestController.java @@ -1,8 +1,9 @@ package com.red.circle.console.adapter.app.sys; -import com.red.circle.console.app.dto.clienobject.sys.SysGiftConfigCO; -import com.red.circle.console.app.dto.cmd.app.sys.GiftConsoleQryCmd; +import com.red.circle.console.app.dto.clienobject.sys.SysGiftConfigCO; +import com.red.circle.console.app.dto.cmd.app.sys.GiftConsoleQryCmd; +import com.red.circle.console.app.dto.cmd.app.sys.GiftRegionAddCmd; import com.red.circle.console.app.service.app.sys.SysGiftConfigService; import com.red.circle.console.infra.annotations.OpsOperationReqLog; import com.red.circle.framework.dto.PageResult; @@ -57,17 +58,35 @@ public class SysGiftConfigRestController extends BaseController { sysGiftConfigService.updateGift(param); } - @OpsOperationReqLog(value = "新增礼物信息") - @PostMapping - public void addGift(@RequestBody SysGiftConfigCO param) { - param.setCreateUser(getReqUserId()); - param.setDel(Boolean.TRUE); - sysGiftConfigService.addGift(param); - } - - /** - * 上下架礼物. - */ + @OpsOperationReqLog(value = "新增礼物信息") + @PostMapping + public void addGift(@RequestBody SysGiftConfigCO param) { + param.setCreateUser(getReqUserId()); + param.setDel(Boolean.TRUE); + sysGiftConfigService.addGift(param); + } + + /** + * 批量追加当前平台所有礼物区域. + */ + @OpsOperationReqLog(value = "批量追加礼物区域") + @PostMapping("/regions/add-all") + public void addAllGiftRegion(@RequestBody GiftRegionAddCmd param) { + sysGiftConfigService.addAllGiftRegion(param); + } + + /** + * 兼容旧前端入口,实际逻辑仍然是追加区域. + */ + @OpsOperationReqLog(value = "批量追加礼物区域") + @PostMapping("/regions/transfer-all") + public void addAllGiftRegionCompatible(@RequestBody GiftRegionAddCmd param) { + sysGiftConfigService.addAllGiftRegion(param); + } + + /** + * 上下架礼物. + */ @GetMapping("/switch/{id}/{status}") public void deleteGift(@PathVariable("id") Long id, @PathVariable("status") Boolean status) { diff --git a/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/sys/SysGiftConfigServiceImpl.java b/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/sys/SysGiftConfigServiceImpl.java index 6622373a..94f0cd8a 100644 --- a/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/sys/SysGiftConfigServiceImpl.java +++ b/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/sys/SysGiftConfigServiceImpl.java @@ -3,9 +3,10 @@ package com.red.circle.console.app.service.app.sys; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.red.circle.common.business.core.ImageSizeConst; -import com.red.circle.console.app.convertor.sys.GiftAppConvertor; -import com.red.circle.console.app.dto.clienobject.sys.SysGiftConfigCO; -import com.red.circle.console.app.dto.cmd.app.sys.GiftConsoleQryCmd; +import com.red.circle.console.app.convertor.sys.GiftAppConvertor; +import com.red.circle.console.app.dto.clienobject.sys.SysGiftConfigCO; +import com.red.circle.console.app.dto.cmd.app.sys.GiftConsoleQryCmd; +import com.red.circle.console.app.dto.cmd.app.sys.GiftRegionAddCmd; import com.red.circle.console.infra.enums.sys.SysGiftTypeEnum; import com.red.circle.console.inner.error.ConsoleErrorCode; import com.red.circle.external.inner.endpoint.oss.OssServiceClient; @@ -155,15 +156,31 @@ public class SysGiftConfigServiceImpl implements SysGiftConfigService { } @Override - public List listByTabV2(GiftConsoleQryCmd query) { - return ResponseAssert.requiredSuccess( - giftConfigClient.listByTabV2(giftAppConvertor.toGiftQryCmd(query))); - } - - @Override - public List listByExpiredTime(Timestamp now) { - return giftAppConvertor.toSysGiftConfigCOList(ResponseAssert.requiredSuccess(giftConfigClient.listByExpiredTime(now))); - } + public List listByTabV2(GiftConsoleQryCmd query) { + return ResponseAssert.requiredSuccess( + giftConfigClient.listByTabV2(giftAppConvertor.toGiftQryCmd(query))); + } + + @Override + public void addAllGiftRegion(GiftRegionAddCmd param) { + ResponseAssert.notNull(GiftErrorCode.BAD_REQUEST, param); + ResponseAssert.isTrue(GiftErrorCode.BAD_REQUEST, StringUtils.isNotBlank(param.getSysOrigin())); + ResponseAssert.isTrue(GiftErrorCode.BAD_REQUEST, StringUtils.isNotBlank(param.getRegionId())); + + Map mapRegion = ResponseAssert.requiredSuccess( + regionConfigClient.mapRegionNameBySysOrigin(param.getSysOrigin())); + ResponseAssert.isTrue(GiftErrorCode.BAD_REQUEST, mapRegion.containsKey(param.getRegionId())); + + ResponseAssert.isTrue(CommonErrorCode.UPDATE_FAILURE, + ResponseAssert.requiredSuccess(giftConfigClient.addAllGiftRegion( + param.getSysOrigin(), param.getRegionId()))); + giftConfigClient.removeGiftCache(); + } + + @Override + public List listByExpiredTime(Timestamp now) { + return giftAppConvertor.toSysGiftConfigCOList(ResponseAssert.requiredSuccess(giftConfigClient.listByExpiredTime(now))); + } private Function getGiftConfigVOFunction( Map mapRegion, Map userMap) { diff --git a/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/dto/cmd/app/sys/GiftRegionAddCmd.java b/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/dto/cmd/app/sys/GiftRegionAddCmd.java new file mode 100644 index 00000000..792623a8 --- /dev/null +++ b/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/dto/cmd/app/sys/GiftRegionAddCmd.java @@ -0,0 +1,27 @@ +package com.red.circle.console.app.dto.cmd.app.sys; + +import java.io.Serial; +import java.io.Serializable; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 礼物区域批量追加参数. + */ +@Data +@Accessors(chain = true) +public class GiftRegionAddCmd implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 归属系统. + */ + private String sysOrigin; + + /** + * 要追加的区域ID. + */ + private String regionId; +} diff --git a/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/service/app/sys/SysGiftConfigService.java b/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/service/app/sys/SysGiftConfigService.java index a3d3d6b1..c2fd5a5b 100644 --- a/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/service/app/sys/SysGiftConfigService.java +++ b/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/service/app/sys/SysGiftConfigService.java @@ -1,7 +1,8 @@ package com.red.circle.console.app.service.app.sys; -import com.red.circle.console.app.dto.clienobject.sys.SysGiftConfigCO; -import com.red.circle.console.app.dto.cmd.app.sys.GiftConsoleQryCmd; +import com.red.circle.console.app.dto.clienobject.sys.SysGiftConfigCO; +import com.red.circle.console.app.dto.cmd.app.sys.GiftRegionAddCmd; +import com.red.circle.console.app.dto.cmd.app.sys.GiftConsoleQryCmd; import com.red.circle.framework.dto.PageResult; import com.red.circle.other.inner.model.dto.material.GiftConfigDTO; import java.sql.Timestamp; @@ -54,10 +55,15 @@ public interface SysGiftConfigService { */ void pushPairCpGiveGiftId(Long giftId, String sysOrigin); - /** - * 礼物列表. - */ - List listByTabV2(GiftConsoleQryCmd query); - - List listByExpiredTime(Timestamp now); -} + /** + * 礼物列表. + */ + List listByTabV2(GiftConsoleQryCmd query); + + /** + * 批量追加当前平台所有礼物区域. + */ + void addAllGiftRegion(GiftRegionAddCmd param); + + List listByExpiredTime(Timestamp now); +} diff --git a/rc-service/rc-service-external/external-inner-endpoint/src/main/java/com/red/circle/external/inner/service/message/impl/ImGroupClientServiceImpl.java b/rc-service/rc-service-external/external-inner-endpoint/src/main/java/com/red/circle/external/inner/service/message/impl/ImGroupClientServiceImpl.java index dea56b3d..52f1e825 100644 --- a/rc-service/rc-service-external/external-inner-endpoint/src/main/java/com/red/circle/external/inner/service/message/impl/ImGroupClientServiceImpl.java +++ b/rc-service/rc-service-external/external-inner-endpoint/src/main/java/com/red/circle/external/inner/service/message/impl/ImGroupClientServiceImpl.java @@ -41,6 +41,7 @@ import org.springframework.stereotype.Service; public class ImGroupClientServiceImpl implements ImGroupClientService { private static final Integer GROUP_ALREADY_EXISTS_ERROR_CODE = 10025; + private static final Integer GROUP_ALREADY_USED_ERROR_CODE = 10021; private final RcMessageProperties rcMessageProperties; private final ImGroupMemberService imGroupMemberService; @@ -179,8 +180,9 @@ public class ImGroupClientServiceImpl implements ImGroupClientService { if (Objects.equals(errorCode, 0)) { return true; } - if (Objects.equals(errorCode, GROUP_ALREADY_EXISTS_ERROR_CODE)) { - log.warn("createAVChatRoomGroup duplicate groupId={}, treat as success", cmd.getGroupId()); + if (isGroupAlreadyExists(errorCode, response)) { + log.warn("createAVChatRoomGroup duplicate groupId={}, errorCode={}, treat as success", + cmd.getGroupId(), errorCode); return true; } @@ -212,6 +214,36 @@ public class ImGroupClientServiceImpl implements ImGroupClientService { } } + boolean isGroupAlreadyExists(Integer errorCode, String res) { + if (Objects.equals(errorCode, GROUP_ALREADY_EXISTS_ERROR_CODE) + || Objects.equals(errorCode, GROUP_ALREADY_USED_ERROR_CODE)) { + return true; + } + + String errorInfo = parseErrorInfo(res); + if (StringUtils.isBlank(errorInfo)) { + return false; + } + + String normalizedErrorInfo = errorInfo.toLowerCase(); + return normalizedErrorInfo.contains("group id in use") + || normalizedErrorInfo.contains("group id has been used"); + } + + String parseErrorInfo(String res) { + try { + JsonObject jsonObject = JsonParser.parseString(res).getAsJsonObject(); + if (Objects.isNull(jsonObject) || !jsonObject.has("ErrorInfo") + || jsonObject.get("ErrorInfo").isJsonNull()) { + return null; + } + return jsonObject.get("ErrorInfo").getAsString(); + } catch (Exception ex) { + log.warn("parseErrorInfo fail res={}", res, ex); + return null; + } + } + boolean recoverRoomGroup(String groupId) { String normalizedGroupId = Objects.isNull(groupId) ? null : groupId.trim(); if (!isRecoverableRoomGroupId(normalizedGroupId)) { diff --git a/rc-service/rc-service-external/external-inner-endpoint/src/test/java/com/red/circle/external/inner/service/message/impl/ImGroupClientServiceImplTest.java b/rc-service/rc-service-external/external-inner-endpoint/src/test/java/com/red/circle/external/inner/service/message/impl/ImGroupClientServiceImplTest.java index 227d2cc7..0bb68b53 100644 --- a/rc-service/rc-service-external/external-inner-endpoint/src/test/java/com/red/circle/external/inner/service/message/impl/ImGroupClientServiceImplTest.java +++ b/rc-service/rc-service-external/external-inner-endpoint/src/test/java/com/red/circle/external/inner/service/message/impl/ImGroupClientServiceImplTest.java @@ -94,6 +94,56 @@ class ImGroupClientServiceImplTest { assertTrue(created); } + @Test + void createAvChatRoomGroupShouldTreatUsedGroupAsSuccess() { + ImGroupManagerService imGroupManagerService = mock(ImGroupManagerService.class); + @SuppressWarnings("unchecked") + RcHttpClient.ResponseMono responseMono = mock(RcHttpClient.ResponseMono.class); + when(imGroupManagerService.createGroup(any())).thenReturn(responseMono); + when(responseMono.block()) + .thenReturn("{\"ErrorCode\":10021,\"ErrorInfo\":\"group id has been used!\"}"); + + ImGroupClientServiceImpl service = new ImGroupClientServiceImpl( + mock(RcMessageProperties.class), + mock(ImGroupMemberService.class), + mock(ImGroupMessageService.class), + imGroupManagerService, + mock(RoomManagerClient.class) + ); + + boolean created = service.createAVChatRoomGroup(new CreateGroupCmd() + .setOwnerAccount("2048587544039321602") + .setGroupId("1001859") + .setName("10025")); + + assertTrue(created); + } + + @Test + void createAvChatRoomGroupShouldTreatDuplicateErrorInfoAsSuccess() { + ImGroupManagerService imGroupManagerService = mock(ImGroupManagerService.class); + @SuppressWarnings("unchecked") + RcHttpClient.ResponseMono responseMono = mock(RcHttpClient.ResponseMono.class); + when(imGroupManagerService.createGroup(any())).thenReturn(responseMono); + when(responseMono.block()) + .thenReturn("{\"ErrorCode\":99999,\"ErrorInfo\":\"group id has been used!\"}"); + + ImGroupClientServiceImpl service = new ImGroupClientServiceImpl( + mock(RcMessageProperties.class), + mock(ImGroupMemberService.class), + mock(ImGroupMessageService.class), + imGroupManagerService, + mock(RoomManagerClient.class) + ); + + boolean created = service.createAVChatRoomGroup(new CreateGroupCmd() + .setOwnerAccount("2048587544039321602") + .setGroupId("1001859") + .setName("10025")); + + assertTrue(created); + } + private static final class TestableImGroupClientServiceImpl extends ImGroupClientServiceImpl { private boolean createResult; diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/gift/GiftConfigService.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/gift/GiftConfigService.java index c7a41421..b0935ecf 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/gift/GiftConfigService.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/gift/GiftConfigService.java @@ -117,14 +117,19 @@ public interface GiftConfigService extends BaseService { */ Boolean updateGift(GiftConfig giftConfigDTO); - /** - * 上下架礼物. - */ - Boolean switchDelStatus(Long id, Boolean status); - - /** - * 礼物列表. - */ + /** + * 上下架礼物. + */ + Boolean switchDelStatus(Long id, Boolean status); + + /** + * 批量追加当前平台所有礼物区域. + */ + Boolean addAllGiftRegion(String sysOrigin, String regionId); + + /** + * 礼物列表. + */ List listByTab(String sysOrigin, String giftTab); /** diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/gift/impl/GiftConfigServiceImpl.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/gift/impl/GiftConfigServiceImpl.java index efde03d0..432c6d9a 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/gift/impl/GiftConfigServiceImpl.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/gift/impl/GiftConfigServiceImpl.java @@ -15,11 +15,12 @@ import com.red.circle.other.inner.model.cmd.sys.GiftQryCmd; import com.red.circle.tool.core.collection.CollectionUtils; import com.red.circle.tool.core.num.NumUtils; import com.red.circle.tool.core.text.StringUtils; -import java.sql.Timestamp; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.sql.Timestamp; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -236,14 +237,55 @@ public class GiftConfigServiceImpl extends BaseServiceImpl listByTab(String sysOrigin, String giftTab) { + public Boolean switchDelStatus(Long id, Boolean status) { + return update().set(GiftConfig::getDel, status) + .eq(GiftConfig::getId, id) + .execute(); + } + + @Override + public Boolean addAllGiftRegion(String sysOrigin, String regionId) { + if (StringUtils.isBlank(sysOrigin) || StringUtils.isBlank(regionId)) { + return Boolean.FALSE; + } + List giftConfigs = query() + .select(GiftConfig::getId, GiftConfig::getRegions) + .eq(GiftConfig::getSysOrigin, sysOrigin) + .list(); + if (CollectionUtils.isEmpty(giftConfigs)) { + return Boolean.TRUE; + } + + List needUpdateGifts = giftConfigs.stream() + .map(giftConfig -> buildGiftRegionAppend(giftConfig, regionId)) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + return CollectionUtils.isEmpty(needUpdateGifts) || updateBatchById(needUpdateGifts); + } + + private GiftConfig buildGiftRegionAppend(GiftConfig giftConfig, String regionId) { + String nextRegions = appendRegion(giftConfig.getRegions(), regionId); + if (Objects.equals(nextRegions, giftConfig.getRegions())) { + return null; + } + return new GiftConfig() + .setId(giftConfig.getId()) + .setRegions(nextRegions); + } + + private String appendRegion(String regions, String regionId) { + if (StringUtils.isBlank(regions)) { + return regionId; + } + LinkedHashSet regionSet = Stream.of(regions.split(",")) + .map(String::trim) + .filter(StringUtils::isNotBlank) + .collect(Collectors.toCollection(LinkedHashSet::new)); + return regionSet.add(regionId) ? String.join(",", regionSet) : regions; + } + + @Override + public List listByTab(String sysOrigin, String giftTab) { return Optional.ofNullable(query() .eq(GiftConfig::getSysOrigin, sysOrigin) .eq(GiftConfig::getGiftTab, giftTab) diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/endpoint/material/gift/GiftConfigClientEndpoint.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/endpoint/material/gift/GiftConfigClientEndpoint.java index 5cf838d4..56df65c5 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/endpoint/material/gift/GiftConfigClientEndpoint.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/endpoint/material/gift/GiftConfigClientEndpoint.java @@ -84,12 +84,17 @@ public class GiftConfigClientEndpoint implements GiftConfigClientApi { } @Override - public ResultResponse switchDelStatus(Long id, Boolean status) { - return ResultResponse.success(giftConfigClientService.switchDelStatus(id, status)); - } - - @Override - public ResultResponse> listByTab(String sysOrigin, String giftTab) { + public ResultResponse switchDelStatus(Long id, Boolean status) { + return ResultResponse.success(giftConfigClientService.switchDelStatus(id, status)); + } + + @Override + public ResultResponse addAllGiftRegion(String sysOrigin, String regionId) { + return ResultResponse.success(giftConfigClientService.addAllGiftRegion(sysOrigin, regionId)); + } + + @Override + public ResultResponse> listByTab(String sysOrigin, String giftTab) { return ResultResponse.success(giftConfigClientService.listByTab(sysOrigin, giftTab)); } diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/material/gift/GiftConfigClientService.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/material/gift/GiftConfigClientService.java index 8d7e32f5..07bca206 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/material/gift/GiftConfigClientService.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/material/gift/GiftConfigClientService.java @@ -68,14 +68,19 @@ public interface GiftConfigClientService { */ Boolean saveGift(GiftConfigDTO giftConfig); - /** - * 上下架礼物. - */ - Boolean switchDelStatus(Long id, Boolean status); - - /** - * 礼物列表. - */ + /** + * 上下架礼物. + */ + Boolean switchDelStatus(Long id, Boolean status); + + /** + * 批量追加当前平台所有礼物区域. + */ + Boolean addAllGiftRegion(String sysOrigin, String regionId); + + /** + * 礼物列表. + */ List listByTab(String sysOrigin, String giftTab); /** diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/material/gift/impl/GiftConfigClientServiceImpl.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/material/gift/impl/GiftConfigClientServiceImpl.java index 44a1d0cd..f2f97d5a 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/material/gift/impl/GiftConfigClientServiceImpl.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/material/gift/impl/GiftConfigClientServiceImpl.java @@ -86,12 +86,17 @@ public class GiftConfigClientServiceImpl implements GiftConfigClientService { } @Override - public Boolean switchDelStatus(Long id, Boolean status) { - return giftConfigService.switchDelStatus(id, status); - } - - @Override - public List listByTab(String sysOrigin, String giftTab) { + public Boolean switchDelStatus(Long id, Boolean status) { + return giftConfigService.switchDelStatus(id, status); + } + + @Override + public Boolean addAllGiftRegion(String sysOrigin, String regionId) { + return giftConfigService.addAllGiftRegion(sysOrigin, regionId); + } + + @Override + public List listByTab(String sysOrigin, String giftTab) { return giftInnerConvertor.toListGiftConfigDTO(giftConfigService.listByTab(sysOrigin, giftTab)); }