幸运活动数字-增加用户获奖的全平台通知
This commit is contained in:
@@ -303,6 +303,8 @@ public enum I18nAlertEnum {
|
||||
|
||||
USER_EVENT_SHARE_TEXT("快来加入我们一起聊天吧!{0}"),
|
||||
GOLD_NAME("GOLD"),
|
||||
MEDAL_EXPIRE_MSG("您的[{0}]已过期,已自动摘下"),
|
||||
LUCKY_NUMBER_HAS_JACKPOT_SYS("恭喜 {0} 猜中本期Moli百万幸运数字:{1},一举斩获 {2} 金币大奖! \uD83C\uDFC6"),
|
||||
|
||||
;
|
||||
|
||||
|
@@ -0,0 +1,18 @@
|
||||
package com.accompany.business.vo.activity;
|
||||
|
||||
import com.accompany.business.vo.SimpleUserVo;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class LuckyNumberActOutputVo extends SimpleUserVo {
|
||||
@ApiModelProperty("日期")
|
||||
private String date;
|
||||
@ApiModelProperty("幸运数字")
|
||||
private Integer luckyNumber;
|
||||
@ApiModelProperty("用户奖励")
|
||||
private BigDecimal jackpot;
|
||||
|
||||
}
|
@@ -17,4 +17,8 @@ public class LuckyNumberActRoundHistoryVo {
|
||||
@ApiModelProperty(value = "结束时间")
|
||||
private String endTime;
|
||||
|
||||
private String avatar;
|
||||
private Long erbanNo;
|
||||
private String nick;
|
||||
|
||||
}
|
||||
|
@@ -43,6 +43,13 @@ public class LuckyNumberActPlayerRecordService extends ServiceImpl<LuckyNumberAc
|
||||
.orderByDesc(LuckyNumberActInputRecord::getDate));
|
||||
}
|
||||
|
||||
public void pageHistoryOutput(Page<LuckyNumberActInputRecord> page, Integer partitionId) {
|
||||
this.baseMapper.selectPage(page, Wrappers.<LuckyNumberActInputRecord>lambdaQuery()
|
||||
.eq(LuckyNumberActInputRecord::getPartitionId, partitionId)
|
||||
.gt(LuckyNumberActInputRecord::getOutput, 0)
|
||||
.orderByDesc(LuckyNumberActInputRecord::getDate));
|
||||
}
|
||||
|
||||
public BigDecimal getJackpot(String date, Long uid, Integer partitionId) {
|
||||
LuckyNumberActInputRecord inputRecord = getOne(Wrappers.<LuckyNumberActInputRecord>lambdaQuery()
|
||||
.eq(LuckyNumberActInputRecord::getDate, date)
|
||||
|
@@ -32,6 +32,12 @@ public class LuckyNumberActRoundService extends ServiceImpl<LuckyNumberActRoundM
|
||||
.eq(LuckyNumberActRound::getPartitionId, partitionId));
|
||||
}
|
||||
|
||||
public List<LuckyNumberActRound> getByDates(List<String> dates, Integer partitionId) {
|
||||
return baseMapper.selectList(Wrappers.<LuckyNumberActRound>lambdaQuery()
|
||||
.in(LuckyNumberActRound::getDate, dates)
|
||||
.eq(LuckyNumberActRound::getPartitionId, partitionId));
|
||||
}
|
||||
|
||||
public LuckyNumberActRound getOrDefault(String date, Integer partitionId) {
|
||||
return getOrDefault(date, partitionId, false);
|
||||
}
|
||||
|
@@ -9,15 +9,14 @@ import com.accompany.business.dto.activity.LuckyNumberActConfig;
|
||||
import com.accompany.business.model.activity.LuckyNumberActInputRecord;
|
||||
import com.accompany.business.model.activity.LuckyNumberActRound;
|
||||
import com.accompany.business.model.activity.h5.ActivityH5AwardRecord;
|
||||
import com.accompany.business.param.neteasepush.NeteaseSendMsgBatchParam;
|
||||
import com.accompany.business.service.SendSysMsgService;
|
||||
import com.accompany.business.service.activity.h5.ActivityH5AwardRecordService;
|
||||
import com.accompany.business.service.purse.UserPurseService;
|
||||
import com.accompany.business.service.record.BillRecordService;
|
||||
import com.accompany.business.service.user.UsersService;
|
||||
import com.accompany.business.vo.activity.LuckyNumberActRoundHistoryDetailVo;
|
||||
import com.accompany.business.vo.activity.LuckyNumberActRoundHistoryVo;
|
||||
import com.accompany.business.vo.activity.LuckyNumberActRoundInputVo;
|
||||
import com.accompany.business.vo.activity.LuckyNumberActRoundVo;
|
||||
import com.accompany.business.vo.activity.*;
|
||||
import com.accompany.common.config.SystemConfig;
|
||||
import com.accompany.common.config.WebSecurityConfig;
|
||||
import com.accompany.common.constant.Constant;
|
||||
import com.accompany.common.push.MarkdownMessage;
|
||||
@@ -29,10 +28,12 @@ import com.accompany.core.enumeration.I18nAlertEnum;
|
||||
import com.accompany.core.enumeration.PartitionEnum;
|
||||
import com.accompany.core.exception.ServiceException;
|
||||
import com.accompany.core.model.Users;
|
||||
import com.accompany.core.mybatismapper.AccountLoginRecordMapperExpand;
|
||||
import com.accompany.core.service.SysConfService;
|
||||
import com.accompany.core.service.message.MessageRobotPushService;
|
||||
import com.accompany.core.util.I18NMessageSourceUtil;
|
||||
import com.accompany.core.vo.UserVo;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
@@ -51,6 +52,8 @@ import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.accompany.business.service.SendSysMsgService.MSG_TYPE_FOR_TEXT;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class LuckyNumberActService {
|
||||
@@ -75,6 +78,8 @@ public class LuckyNumberActService {
|
||||
private MessageRobotPushService messageRobotPushService;
|
||||
@Autowired
|
||||
private WebSecurityConfig webSecurityConfig;
|
||||
@Autowired
|
||||
private AccountLoginRecordMapperExpand accountLoginRecordMapperExpand;
|
||||
|
||||
public LuckyNumberActRoundVo getRoundVo(Long uid) {
|
||||
Users u = usersService.getNotNullUsersByUid(uid);
|
||||
@@ -135,6 +140,41 @@ public class LuckyNumberActService {
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public List<LuckyNumberActOutputVo> listHistoryOutput(Long uid) {
|
||||
Users u = usersService.getNotNullUsersByUid(uid);
|
||||
|
||||
Page<LuckyNumberActInputRecord> page = new Page<>(1, 3, false);
|
||||
Integer partitionId = u.getPartitionId();
|
||||
playerRecordService.pageHistoryOutput(page, partitionId);
|
||||
|
||||
List<LuckyNumberActInputRecord> records = page.getRecords();
|
||||
if (CollectionUtils.isEmpty(records)){
|
||||
return Collections.emptyList();
|
||||
}
|
||||
Set<Long> uids = new HashSet<>();
|
||||
Set<String> dateStrs = new HashSet<>();
|
||||
for (LuckyNumberActInputRecord record : records) {
|
||||
uids.add(record.getUid());
|
||||
dateStrs.add(record.getDate());
|
||||
}
|
||||
Map<Long, Users> usersMap = usersService.getUsersMapByUids(new ArrayList<>(uids));
|
||||
List<LuckyNumberActRound> roundByDates = roundService.getByDates(new ArrayList<>(dateStrs), partitionId);
|
||||
Map<String, LuckyNumberActRound> roundMap = roundByDates.stream().collect(Collectors.toMap(LuckyNumberActRound::getDate, x -> x));
|
||||
|
||||
return records.stream().map(record -> {
|
||||
LuckyNumberActOutputVo vo = new LuckyNumberActOutputVo();
|
||||
Users users = usersMap.get(record.getUid());
|
||||
vo.setUid(record.getUid());
|
||||
vo.setErbanNo(users.getErbanNo());
|
||||
vo.setAvatar(users.getAvatar());
|
||||
vo.setNick(users.getNick());
|
||||
vo.setDate(record.getDate());
|
||||
LuckyNumberActRound round = roundMap.get(record.getDate());
|
||||
vo.setLuckyNumber(round.getLuckyNumber());
|
||||
return vo;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public List<LuckyNumberActRoundInputVo> listHistoryInput(Long uid) {
|
||||
Users u = usersService.getNotNullUsersByUid(uid);
|
||||
|
||||
@@ -207,6 +247,42 @@ public class LuckyNumberActService {
|
||||
roundService.updateJackpot(roundDate, u.getPartitionId(), input);
|
||||
}
|
||||
|
||||
public void batchInput(Long uid, List<Integer> numbers){
|
||||
for (Integer number : numbers) {
|
||||
if (number < 0 || number >= 100){
|
||||
throw new ServiceException(BusiStatus.PARAMERROR);
|
||||
}
|
||||
}
|
||||
Users u = usersService.getNotNullUsersByUid(uid);
|
||||
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(u.getPartitionId());
|
||||
ZonedDateTime now = DateTimeUtil.getDateTimeByZoneId(partitionEnum.getZoneId());
|
||||
|
||||
LuckyNumberActConfig config = getConfig();
|
||||
LocalDate today = LocalDate.now();
|
||||
ZoneId zoneId = ZoneId.of(partitionEnum.getZoneId());
|
||||
ZonedDateTime roundWaitTime = LocalDateTime.of(today, config.getRoundWaitTime()).atZone(zoneId);
|
||||
|
||||
if (now.compareTo(roundWaitTime) >= 0){
|
||||
throw new ServiceException(BusiStatus.NOT_IN_ACT_TIME_RANGE);
|
||||
}
|
||||
|
||||
String roundDate = now.format(DateTimeUtil.dateFormatter);
|
||||
|
||||
double price = config.getPrice().doubleValue() * numbers.size();
|
||||
|
||||
userPurseService.subDiamond(uid, price, BillObjTypeEnum.LUCKY_NUM_JACKPOT_INPUT_GOLD, (userPurse) -> {
|
||||
String objId = String.join("_", roundDate, uid.toString(), u.getPartitionId().toString(), JSONObject.toJSONString(numbers));
|
||||
billRecordService.insertGeneralBillRecord(uid, objId, BillObjTypeEnum.LUCKY_NUM_JACKPOT_INPUT_GOLD, price, userPurse);
|
||||
});
|
||||
|
||||
BigDecimal input = config.getPrice().multiply(config.getJackpotRatio()).multiply(BigDecimal.valueOf(numbers.size())).setScale(2, RoundingMode.HALF_DOWN);
|
||||
for (Integer number : numbers) {
|
||||
playerRecordService.saveRecord(roundDate, uid, u.getPartitionId(), input, number);
|
||||
}
|
||||
|
||||
roundService.updateJackpot(roundDate, u.getPartitionId(), input);
|
||||
}
|
||||
|
||||
public void getJackpot(Long uid, String date) {
|
||||
Users u = usersService.getNotNullUsersByUid(uid);
|
||||
BigDecimal jackpot = playerRecordService.getJackpot(date, uid, u.getPartitionId());
|
||||
@@ -420,11 +496,29 @@ public class LuckyNumberActService {
|
||||
.eq(LuckyNumberActInputRecord::getLuckyStatus, Constant.StatusV2.valid));
|
||||
|
||||
String tip = I18NMessageSourceUtil.getMessage(I18nAlertEnum.LUCKY_NUMBER_HAS_JACKPOT_TIP, partitionId);
|
||||
List<String> sysTip = new ArrayList<>();
|
||||
for (LuckyNumberActInputRecord record : luckyPlayerRecordList){
|
||||
sendSysMsgService.sendPersonTextMsg(record.getUid(), tip);
|
||||
Users users = usersService.getUsersByUid(record.getUid());
|
||||
sysTip.add(I18NMessageSourceUtil.getMessage(I18nAlertEnum.LUCKY_NUMBER_HAS_JACKPOT_SYS, new Object[]{users.getNick(), round.getLuckyNumber(), record.getOutput()}, partitionId));
|
||||
}
|
||||
|
||||
sendLastRoundTip(date, partitionId);
|
||||
|
||||
for (String msg : sysTip) {
|
||||
int page = 1;
|
||||
int batchSize = 500;
|
||||
for (List<Long> uidList = accountLoginRecordMapperExpand.getUidByRecent60Day(null, null, null, partitionId, 0, batchSize);
|
||||
uidList != null && !uidList.isEmpty();
|
||||
uidList = accountLoginRecordMapperExpand.getUidByRecent60Day(null, null, null, partitionId, (++page - 1) * batchSize, batchSize)) {
|
||||
NeteaseSendMsgBatchParam neteaseSendMsgBatchParam = new NeteaseSendMsgBatchParam();
|
||||
neteaseSendMsgBatchParam.setToAccids(uidList.stream().map(String::valueOf).collect(Collectors.toList()));
|
||||
neteaseSendMsgBatchParam.setFromAccid(SystemConfig.systemMessageUid);
|
||||
neteaseSendMsgBatchParam.setContent(msg);
|
||||
neteaseSendMsgBatchParam.setType(MSG_TYPE_FOR_TEXT);
|
||||
sendSysMsgService.sendBatchMsgMsg(neteaseSendMsgBatchParam);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void sendLastRoundTip(String date, Integer partitionId){
|
||||
|
@@ -1,10 +1,8 @@
|
||||
package com.accompany.business.controller.activity;
|
||||
|
||||
import cn.hippo4j.common.toolkit.CollectionUtil;
|
||||
import com.accompany.business.service.activity.LuckyNumberActService;
|
||||
import com.accompany.business.vo.activity.LuckyNumberActRoundHistoryDetailVo;
|
||||
import com.accompany.business.vo.activity.LuckyNumberActRoundHistoryVo;
|
||||
import com.accompany.business.vo.activity.LuckyNumberActRoundInputVo;
|
||||
import com.accompany.business.vo.activity.LuckyNumberActRoundVo;
|
||||
import com.accompany.business.vo.activity.*;
|
||||
import com.accompany.common.annotation.Authorization;
|
||||
import com.accompany.common.result.BusiResult;
|
||||
import com.accompany.common.status.BusiStatus;
|
||||
@@ -51,6 +49,15 @@ public class LuckyNumberActController {
|
||||
return BusiResult.success(roundList);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "历史获奖数据")
|
||||
@Authorization
|
||||
@PostMapping(value = "/listHistoryOutput")
|
||||
public BusiResult<List<LuckyNumberActOutputVo>> listHistoryOutput(){
|
||||
Long uid = UidContextHolder.get();
|
||||
List<LuckyNumberActOutputVo> roundList = actService.listHistoryOutput(uid);
|
||||
return BusiResult.success(roundList);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "投入")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "number", value = "数字", required = true)
|
||||
@@ -67,6 +74,23 @@ public class LuckyNumberActController {
|
||||
return BusiResult.success();
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation(value = "投入")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "number", value = "数字", required = true)
|
||||
})
|
||||
@Authorization
|
||||
@PostMapping(value = "/batchInput")
|
||||
public BusiResult<Void> batchInput(List<Integer> numbers){
|
||||
if (CollectionUtil.isEmpty(numbers)){
|
||||
throw new ServiceException(BusiStatus.PARAMERROR);
|
||||
}
|
||||
|
||||
Long uid = UidContextHolder.get();
|
||||
actService.batchInput(uid, numbers);
|
||||
return BusiResult.success();
|
||||
}
|
||||
|
||||
@ApiOperation(value = "我的历史")
|
||||
@Authorization
|
||||
@PostMapping(value = "/listHistoryInput")
|
||||
|
Reference in New Issue
Block a user