公会单独绑定国家,薪资账户屏蔽usd小于最低档位

(cherry picked from commit cf7304f2cb)
This commit is contained in:
2025-08-21 15:12:22 +08:00
parent deb3159d29
commit cebc3f1453
8 changed files with 116 additions and 18 deletions

View File

@@ -19,9 +19,16 @@ public class GuildAdminVo {
@ApiModelProperty("公会长昵称")
@ExcelProperty("公会长昵称")
private String ownerNick;
@ExcelIgnore
private Integer partitionId;
@ApiModelProperty("公会长分区")
@ExcelProperty("公会长分区")
private String ownerPartitionName;
@ExcelIgnore
private Integer regionId;
@ApiModelProperty("公会地区")
@ExcelProperty("公会地区")
private String regionName;
@ApiModelProperty("公会长地区")
@ExcelProperty("公会长地区")
private String ownerRegionName;

View File

@@ -169,7 +169,7 @@ public class GuildManageAdminService {
guild.setAvatar(u.getAvatar());
}
guild.setOperatorId(operatorId);
guild.setRegionId(u.getRegionId());
guildService.save(guild);
applicationContext.publishEvent(new NewGuildEvent(new NewGuildMessage(u.getPartitionId(), guild.getId(), u.getUid(), now)));
@@ -197,7 +197,7 @@ public class GuildManageAdminService {
public void updateGuild(Integer id, String name,
String avatar, String backgroundUrl, Integer memberNumLimit,
String guildContactType, String guildContact, Long inviteErbanNo,
int adminId, Integer operatorId){
int adminId, Integer operatorId, Integer regionId){
if (null != memberNumLimit && 1 >= memberNumLimit){
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
@@ -225,6 +225,7 @@ public class GuildManageAdminService {
.set(StringUtils.isNotBlank(guildContactType), Guild::getGuildContactType, guildContactType)
.set(StringUtils.isNotBlank(guildContact), Guild::getGuildContact, guildContact)
.set(inviteUid != null, Guild::getInviteUid, inviteUid)
.set(regionId != null, Guild::getRegionId, regionId)
.set(null != memberNumLimit, Guild::getMemberNumLimit, memberNumLimit)
.set(Guild::getOperatorId, operatorId)
.update();
@@ -301,11 +302,6 @@ public class GuildManageAdminService {
regionGuildIdSet.add(guildId);
}
LambdaQueryWrapper<Guild> queryWrapper = Wrappers.<Guild>lambdaQuery()
.in(!CollectionUtils.isEmpty(regionGuildIdSet), Guild::getId, regionGuildIdSet)
.eq(Guild::getPartitionId, partitionId)
.orderByDesc(Guild::getEnable, Guild::getId);
Long ownerUid = null;
if (null != erbanNo){
Users u = usersService.getUserByErbanNo(erbanNo);
@@ -394,7 +390,12 @@ public class GuildManageAdminService {
vo.setOwnerErbanNo(u.getErbanNo());
vo.setOwnerNick(u.getNick());
vo.setOwnerPartitionName(partitionNameMap.get(u.getPartitionId()));
vo.setOwnerRegionName(regionNameMap.get(u.getRegionId()));
vo.setOwnerRegionName(regionNameMap.get(guild.getRegionId()));
}
vo.setPartitionId(guild.getPartitionId());
vo.setRegionId(guild.getRegionId());
if (guild.getRegionId() != null) {
vo.setRegionName(regionNameMap.get(guild.getRegionId()));
}
vo.setMemberNum(memberNumMap.getOrDefault(guild.getId(), 0L));

View File

@@ -75,12 +75,12 @@ public class GuildManageAdminController extends BaseController {
public BusiResult<Void> updateGuild(Integer id, String name,
String avatar, String backgroundUrl, Integer memberNumLimit,
String guildContactType, String guildContact, Long inviteErbanNo,
Integer operatorId){
Integer operatorId, Integer regionId){
if (null == id || null == memberNumLimit){
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
Integer adminId = getAdminId();
service.updateGuild(id, name, avatar, backgroundUrl, memberNumLimit, guildContactType, guildContact, inviteErbanNo, adminId, operatorId);
service.updateGuild(id, name, avatar, backgroundUrl, memberNumLimit, guildContactType, guildContact, inviteErbanNo, adminId, operatorId, regionId);
adminLogService.insertLog(adminId,getClass().getCanonicalName(),
"update guild","params===>>id:"+id+",name:"+name+",backgroundUrl:"+backgroundUrl+",memberNumLimit:"+memberNumLimit);
return BusiResult.success();

View File

@@ -1392,6 +1392,8 @@ public class Constant {
public static final String GAME_USD_TO_RECHARGE_USER_LIMIT = "game_usd_to_recharge_user_limit";
public static final String MINI_GAME_SUD_LUDO_CONFIG = "mini_game_sud_ludo_config";
public static final String GUILD_USD_PROD_TAB_SHOW_CONFIG = "guild_usd_prod_tab_show_config";
}
public static class WithDrawStatus {

View File

@@ -41,4 +41,6 @@ public class Guild {
private String inviteCheck;
private Integer operatorId;
private Integer regionId;
}

View File

@@ -0,0 +1,22 @@
package com.accompany.business.vo.guild;
import lombok.Data;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Data
public class GuildUsdProdTabShowConfigVo {
private String tabKey;
private Integer type;
private List<Integer> limitRegionIds;
private Map<Integer, List<GuildUsdProdTabShowConfigVo>> partitionMap = new HashMap<>();
public List<GuildUsdProdTabShowConfigVo> getByPartitionId(int partitionId) {
return partitionMap.getOrDefault(partitionId, Collections.emptyList());
}
}

View File

@@ -14,23 +14,26 @@ import com.accompany.common.status.BusiStatus;
import com.accompany.core.exception.ServiceException;
import com.accompany.core.model.PartitionInfo;
import com.accompany.core.model.Users;
import com.accompany.core.service.SysConfService;
import com.accompany.core.service.partition.PartitionInfoService;
import com.accompany.payment.service.RechargeUserService;
import com.accompany.payment.vo.RechargeUserVo;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import static com.accompany.common.constant.Constant.SysConfId.GUILD_USD_PROD_TAB_SHOW_CONFIG;
@Slf4j
@Service
public class GuildUsdChannelService {
@@ -57,6 +60,8 @@ public class GuildUsdChannelService {
private GuildUsdWithdrawAccountService guildUsdWithdrawAccountService;
@Autowired
private GuildUsdToRechargeUserLimitService guildUsdToRechargeUserLimitService;
@Autowired
private SysConfService sysConfService;
public GuildMemberDiamondWithdrawVo getDiamondWithDrawVo(Long uid) {
GuildMember guildMember = guildMemberService.getVaildGuildMemberByUid(uid);
@@ -86,6 +91,9 @@ public class GuildUsdChannelService {
vo.setGuildId(guild.getId());
vo.setUid(uid);
UserPurse userPurse = userPurseService.queryUserPurse(uid);
vo.setGuildUsdNum(userPurse.getGuildUsd());
CountDownLatch cdl = new CountDownLatch(3);
bizExecutor.execute(()->{
@@ -93,9 +101,6 @@ public class GuildUsdChannelService {
SimpleUserVo guildOwner = usersService.getSimpleUserByUid(guild.getOwnerUid());
vo.setGuildOwner(guildOwner);
UserPurse userPurse = userPurseService.queryUserPurse(uid);
vo.setGuildUsdNum(userPurse.getGuildUsd());
List<GuildMemberUsdWithdrawAccountVo> withdrawAccount = guildUsdWithdrawAccountService.listUserAccountVo(uid);
vo.setWithdrawAccountList(withdrawAccount);
} catch (Exception e){
@@ -126,6 +131,8 @@ public class GuildUsdChannelService {
bizExecutor.execute(()->{
try {
List<GuildUsdProdTabVo> tabVoList = buildTabByRoleType(uid, guildMember.getPartitionId(), guildMember.getRoleType());
fitlerTabPro(vo.getGuildUsdNum(), guild, tabVoList);
vo.setTypeTab(tabVoList);
} catch (Exception e){
log.error("[getUsdOperateTabVo] tabVoList 获取异常", e);
@@ -209,4 +216,61 @@ public class GuildUsdChannelService {
return rechargeUserVoList.stream().sorted(Comparator.comparing(RechargeUserVo::getStarLevelSeq).reversed())
.collect(Collectors.toList());
}
private List<GuildUsdProdTabShowConfigVo> getTabShowConfig(Integer partitionId) {
String sysConfValueById = sysConfService.getSysConfValueById(GUILD_USD_PROD_TAB_SHOW_CONFIG);
if (StringUtils.isNotEmpty(sysConfValueById)) {
GuildUsdProdTabShowConfigVo configVo = JSONObject.parseObject(sysConfValueById, GuildUsdProdTabShowConfigVo.class);
return configVo.getByPartitionId(partitionId);
}
return Collections.emptyList();
}
/**
* 屏蔽对应类型对应国家下钱包usd小于最低档位的转账方式
* @param guildUsdNum
* @param guild
* @param tabVoList
*/
private void fitlerTabPro(Double guildUsdNum, Guild guild, List<GuildUsdProdTabVo> tabVoList) {
if (CollectionUtils.isEmpty(tabVoList) || guild.getRegionId() == null) {
return;
}
List<GuildUsdProdTabShowConfigVo> tabShowConfig = getTabShowConfig(guild.getPartitionId());
if (CollectionUtils.isEmpty(tabShowConfig)) {
return;
}
for (GuildUsdProdTabVo tabVo : tabVoList) {
List<GuildUsdProdChannelVo> channelList = tabVo.getChannelList();
if (CollectionUtils.isEmpty(channelList)) {
continue;
}
for (GuildUsdProdTabShowConfigVo configVo : tabShowConfig) {
if (!tabVo.getTabKey().equals(configVo.getTabKey())) {
continue;
}
List<Integer> limitRegionIds = configVo.getLimitRegionIds();
if (CollectionUtils.isEmpty(limitRegionIds) || !limitRegionIds.contains(guild.getRegionId())) {
continue;
}
Iterator<GuildUsdProdChannelVo> iterator = channelList.iterator();
while (iterator.hasNext()) {
GuildUsdProdChannelVo next = iterator.next();
List<GuildUsdProd> prodList = next.getProdList();
if (next.getType() != configVo.getType().intValue() || CollectionUtils.isEmpty(prodList)) {
continue;
}
GuildUsdProd usdProd = prodList.get(0);
if (guildUsdNum < usdProd.getGuildUsdNum().doubleValue()){
iterator.remove();
}
}
}
}
}
}

View File

@@ -40,10 +40,10 @@
</select>
<select id="listGuildOwnerByPartitionIdRegionId" resultType="com.accompany.business.model.guild.GuildMember">
select guild_id, gm.uid, role_type, gm.create_time, gm.update_time, enable from guild_member gm
inner join users u on gm.uid = u.uid
select gm.guild_id, gm.uid, role_type, gm.create_time, gm.update_time, enable from guild_member gm
inner join guild g on gm.guild_id = g.id
where gm.role_type = 1 and gm.partition_id = #{partitionId}
and u.region_id = #{regionId}
and g.region_id = #{regionId}
</select>
</mapper>