金币兑换钻石-公会金币结算-结算状态
This commit is contained in:
@@ -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
|
@@ -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..........");
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user