公会-土耳其-公会成员收礼增加水晶

This commit is contained in:
2025-08-20 12:24:17 +08:00
parent e832871488
commit b81d267f14
3 changed files with 123 additions and 0 deletions

View File

@@ -271,6 +271,9 @@ public enum BillObjTypeEnum {
GUILD_POLICY2_SUB_GUILD_USD( 180, "土耳其公会结算扣除薪资", BillTypeEnum.OUT, CurrencyEnum.GUILD_USD, BillDomainTypeEnum.GUILD_POLICY2),
GUILD_POLICY2_SUB_GOLDS( 181, "土耳其公会结算扣除钻石", BillTypeEnum.OUT, CurrencyEnum.GOLD, BillDomainTypeEnum.GUILD_POLICY2),
LUCKY_GIFT_INCOME_ALLOT( 182, "幸运礼物价值分成", BillTypeEnum.IN, CurrencyEnum.GUILD_CRYSTAL, BillDomainTypeEnum.GUILD_POLICY2),
NORMAL_GIFT_INCOME_ALLOT( 183, "普通礼物价值分成", BillTypeEnum.IN, CurrencyEnum.GUILD_CRYSTAL, BillDomainTypeEnum.GUILD_POLICY2),
;
BillObjTypeEnum(int value, String desc, BillTypeEnum type, CurrencyEnum currency, BillDomainTypeEnum domain) {

View File

@@ -0,0 +1,53 @@
package com.accompany.business.event.listener;
import com.accompany.business.event.GiftMessageEvent;
import com.accompany.business.message.GiftMessage;
import com.accompany.business.model.guild.GuildMember;
import com.accompany.business.service.guild.GuildCrystalService;
import com.accompany.business.service.guild.GuildMemberService;
import com.accompany.business.service.user.UsersService;
import com.accompany.common.constant.Constant;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.model.Users;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class GuildMemberCrystalListener implements ApplicationListener<GiftMessageEvent> {
@Autowired
private UsersService usersService;
@Autowired
private GuildMemberService guildMemberService;
@Autowired
private GuildCrystalService guildCrystalService;
@Async
@Override
public void onApplicationEvent(GiftMessageEvent event) {
GiftMessage message = (GiftMessage) event.getSource();
Long receiverUid = message.getRecvUid();
Users receiver = usersService.getNotNullUsersByUid(receiverUid);
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(receiver.getPartitionId());
if (Constant.ClanMode.GUILD_POLICY2.equals(partitionEnum.getClanMode())) {
return;
}
GuildMember guildMember = guildMemberService.getVaildGuildMemberByUid(receiverUid);
if (null == guildMember) {
return;
}
guildCrystalService.addCrystalByGift(message.getSendUid(), message.getRecvUid(), guildMember,
message.getRoomUid(),
message.getGiftId(), message.getGiftNum(), message.getRealGoldNum(),
message.getMessId(), new Date(message.getMessTime()));
}
}

View File

@@ -0,0 +1,67 @@
package com.accompany.business.service.guild;
import com.accompany.business.model.Gift;
import com.accompany.business.model.guild.GuildMember;
import com.accompany.business.service.gift.GiftService;
import com.accompany.business.service.purse.UserPurseService;
import com.accompany.business.service.record.BillRecordService;
import com.accompany.common.constant.GiftTypeEnum;
import com.accompany.core.enumeration.BillObjTypeEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Date;
@Service
public class GuildCrystalService {
@Autowired
private GiftService giftService;
@Autowired
private UserPurseService userPurseService;
@Autowired
private BillRecordService billRecordService;
public void addCrystalByGift(Long sendUid,
Long receiverUid, GuildMember guildMember,
Long roomUid,
Integer giftId, Integer giftNum, Long realGoldNum,
String messId, Date createTime) {
Gift gift = giftService.getGiftById(giftId);
if (null == gift){
return;
}
GiftTypeEnum giftTypeEnum = GiftTypeEnum.getByType(gift.getGiftType());
BigDecimal guildCrystalRatio = getGuildCrystalRatioByGiftType(giftTypeEnum);
if (BigDecimal.ZERO.compareTo(guildCrystalRatio) >= 0){
return;
}
BigDecimal guildCrystalNum = BigDecimal.valueOf(giftNum).multiply(BigDecimal.valueOf(gift.getGoldPrice())).multiply(guildCrystalRatio);
if (BigDecimal.ZERO.compareTo(guildCrystalNum) >= 0){
return;
}
BillObjTypeEnum objTypeEnum = GiftTypeEnum.LUCKY_24.equals(giftTypeEnum) || GiftTypeEnum.LUCKY_25.equals(giftTypeEnum)?
BillObjTypeEnum.LUCKY_GIFT_INCOME_ALLOT: BillObjTypeEnum.NORMAL_GIFT_INCOME_ALLOT;
userPurseService.addGuildCrystal(receiverUid, guildCrystalNum.doubleValue(), objTypeEnum, (userPurse -> {
billRecordService.insertGiftSendBillRecord(sendUid, receiverUid, roomUid, messId, objTypeEnum, guildCrystalNum.doubleValue(), giftId, giftNum, realGoldNum, createTime, userPurse);
}));
}
private BigDecimal getGuildCrystalRatioByGiftType(GiftTypeEnum giftTypeEnum) {
//todo 抽取配置
switch (giftTypeEnum){
case LUCKY_24:
case LUCKY_25:
return BigDecimal.valueOf(0.03d);
case BRAVO:
return BigDecimal.ZERO;
default:
return BigDecimal.valueOf(0.3d);
}
}
}