金币兑换钻石-公会金币结算-结算状态

This commit is contained in:
2022-11-20 02:05:36 +08:00
parent e3dd88d1fb
commit f14126a194
9 changed files with 133 additions and 1 deletions

View File

@@ -1,7 +1,12 @@
package com.accompany.scheduler.task;
import com.accompany.business.model.HallMember;
import com.accompany.business.model.UserPurse;
import com.accompany.business.model.clan.Clan;
import com.accompany.business.mybatismapper.UserPurseMapper;
import com.accompany.business.service.clan.ClanHallService;
import com.accompany.business.service.clan.ClanService;
import com.accompany.business.service.hall.HallService;
import com.accompany.business.service.purse.UserPurseService;
import com.accompany.business.service.record.BillRecordService;
import com.accompany.common.redis.RedisKey;
@@ -21,6 +26,7 @@ import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.List;
import java.util.stream.Collectors;
/**
* Created By LeeNana on 2020/3/11.
@@ -28,7 +34,7 @@ import java.util.List;
*/
// @Component
@Slf4j
public class UserPurseTask extends BaseTask {
public class ActivitiesCoupleTask extends BaseTask {
@Autowired
private UserPurseService userPurseService;
@Autowired

View File

@@ -0,0 +1,86 @@
package com.accompany.scheduler.task;
import com.accompany.business.model.HallMember;
import com.accompany.business.model.clan.Clan;
import com.accompany.business.mybatismapper.UserPurseMapper;
import com.accompany.business.service.clan.ClanService;
import com.accompany.business.service.purse.UserPurseService;
import com.accompany.business.service.record.BillRecordService;
import com.accompany.core.enumeration.BillObjTypeEnum;
import com.accompany.core.enumeration.ExchangeTypeEnum;
import com.accompany.scheduler.base.BaseTask;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@Slf4j
public class ClanGoldSettlementTask extends BaseTask {
@Autowired
private UserPurseService userPurseService;
@Autowired
private UserPurseMapper userPurseMapper;
@Autowired
private BillRecordService billRecordService;
@Autowired
private ClanService clanService;
/**
* 公会金币结算
* 周一凌晨3点
* */
@Scheduled(cron = "0 0 3 ? * MON")
public void clanGoldSettlement() throws InterruptedException {
log.info("clanGoldSettlement() start..........");
List<Clan> clanList = clanService.listValidClan();
if (CollectionUtils.isEmpty(clanList)){
return;
}
List<Long> clanIds = clanList.stream().map(Clan::getId).collect(Collectors.toList());
List<HallMember> hallMemberList = clanService.listValidHallMemberInClanIds(clanIds);
if (CollectionUtils.isEmpty(hallMemberList)){
return;
}
Map<Long, Long> clanElderMap = clanList.stream().collect(Collectors.toMap(Clan::getId, Clan::getClanElderUid));
Set<Long> clanElderUidSet = clanElderMap.keySet();
List<Long> memberUids = hallMemberList.stream().map(HallMember::getUid)
.filter(uid -> !clanElderUidSet.contains(uid)).collect(Collectors.toList());
Map<Long, Double> memberGoldsMap = memberUids.stream().collect(Collectors.toMap(uid->uid, uid->0d));
//为了userPureseService.subGolds那个校验
//先把他们设置为结算状态
Map<Long, Double> settlementGoldsMap = userPurseService.getClanGoldSettlementMap();
settlementGoldsMap.putAll(memberGoldsMap);
//冷却3秒等所有抢到lock准备subGolds都差不多执行完再结算
Thread.sleep(3 * 1000);
//获取需要结算的金币map
memberGoldsMap = userPurseMapper.selectGoldsByUids(memberUids);
//再put一次带金币数的以防万一好扩展
settlementGoldsMap.putAll(memberGoldsMap);
//todo settlemenBatchtId = clanId + 时间戳
//todo settlementRecord = { id自增 settlementBatchId, clanId, roleType(1=会长2=喽啰) uid, golds, fee, actualGolds, createTime}
//todo 批量扣成员金币
//todo insert批量扣settlementRecord
//todo insert billRecord
//todo 加到各自会长
//todo insert批量加settlementRecord
//todo insert billRecord
//清空结算状态
settlementGoldsMap.clear();
log.info("clanGoldSettlement() finish..........");
}
}