公会-土耳其-公会成员收礼增加水晶
This commit is contained in:
@@ -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) {
|
||||
|
@@ -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()));
|
||||
}
|
||||
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user