幸运数字-历史轮次

This commit is contained in:
khalil
2025-04-29 12:11:39 +08:00
parent a2046dea52
commit cc274dedc6
10 changed files with 120 additions and 26 deletions

View File

@@ -49,6 +49,7 @@ public class DateTimeUtil {
public static final String UTC_DEFAULT_DATETIME_PATTERN = "yyyy-MM-dd'T'HH:mm:ss";
public static final String MONTH_DATE_PATTERN = "MMdd";
public static final String MONTH_WITHOUT_ZERO_DATE_PATTERN = "M.d";
public static final String ZONE_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss z";
//一小时的秒数
private static final int HOUR_SECOND = 60 * 60;
@@ -59,6 +60,8 @@ public class DateTimeUtil {
public static final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_PATTERN);
public static final DateTimeFormatter datetimeFormatter = DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATETIME_PATTERN);
public static final DateTimeFormatter dateHourFormatter = DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_MINUTE_PATTERN);
public static final DateTimeFormatter zoneDatetimeFormatter = DateTimeFormatter.ofPattern(DateTimeUtil.ZONE_DATETIME_PATTERN);
public static final DateTimeFormatter hoursFormatter = DateTimeFormatter.ofPattern(DateTimeUtil.DATE_HOUR_PATTERN);
public static final DateTimeFormatter yyyyMMdd = DateTimeFormatter.ofPattern("yyyyMMdd");

View File

@@ -1,24 +1,26 @@
package com.accompany.business.model.activity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.accompany.core.mybatis.typehandler.IntegerListTypeHandler;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
@TableName(autoResultMap = true)
public class LuckyNumberActInputRecord {
@TableId(type = IdType.AUTO)
private Long id;
private String date;
private Long uid;
private Integer partitionId;
private BigDecimal price;
private BigDecimal jackpotRatio;
private BigDecimal input;
private Integer number;
@TableField(typeHandler = IntegerListTypeHandler.class)
private List<Integer> numberList;
private Byte luckyStatus;
private Date createTime;
private Date updateTime;
}

View File

@@ -13,6 +13,7 @@ public class LuckyNumberActRound {
private Integer playerNum;
private BigDecimal jackpot;
private Integer luckyNumber;
private String endTime;
private Date createTime;
private Date updateTime;

View File

@@ -0,0 +1,23 @@
package com.accompany.business.vo.activity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
@ApiModel
public class LuckyNumberActRoundVo {
@ApiModelProperty(value = "日期")
private String date;
@ApiModelProperty(value = "分区id")
private Integer partitionId;
@ApiModelProperty(value = "幸运号码")
private Integer luckyNumber;
@ApiModelProperty(value = "结束时间")
private String endTime;
}

View File

@@ -2,6 +2,11 @@ package com.accompany.business.mybatismapper.activity;
import com.accompany.business.model.activity.LuckyNumberActInputRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
public interface LuckyNumberActInputRecordMapper extends BaseMapper<LuckyNumberActInputRecord> {
void saveRecord(@Param("date") String date, @Param("uid") Long uid, @Param("partitionId") Integer partitionId,
@Param("input") BigDecimal input, @Param("number") Integer number);
}

View File

@@ -9,6 +9,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@@ -17,26 +18,19 @@ import java.util.stream.Collectors;
@Service
public class LuckyNumberActPlayerRecordService extends ServiceImpl<LuckyNumberActInputRecordMapper, LuckyNumberActInputRecord> {
public void saveRecord(String date, Long uid, Integer partitionId, Integer number, BigDecimal price, BigDecimal jackpotRatio, BigDecimal input) {
LuckyNumberActInputRecord record = new LuckyNumberActInputRecord();
record.setDate(date);
record.setUid(uid);
record.setPartitionId(partitionId);
record.setNumber(number);
record.setPrice(price);
record.setJackpotRatio(jackpotRatio);
record.setInput(input);
record.setCreateTime(new Date());
save(record);
public void saveRecord(String date, Long uid, Integer partitionId, BigDecimal input, Integer number) {
this.baseMapper.saveRecord(date, uid, partitionId, input, number);
}
public List<Integer> listInputNumber(String date, Long uid, Integer partitionId) {
List<LuckyNumberActInputRecord> recordList = list(Wrappers.<LuckyNumberActInputRecord>lambdaQuery()
.select(LuckyNumberActInputRecord::getNumber)
LuckyNumberActInputRecord inputRecord = getOne(Wrappers.<LuckyNumberActInputRecord>lambdaQuery()
.select(LuckyNumberActInputRecord::getNumberList)
.eq(LuckyNumberActInputRecord::getDate, date)
.eq(LuckyNumberActInputRecord::getUid, uid)
.eq(LuckyNumberActInputRecord::getPartitionId, partitionId));
return recordList.stream().map(LuckyNumberActInputRecord::getNumber).collect(Collectors.toList());
.eq(LuckyNumberActInputRecord::getPartitionId, partitionId), false);
return null == inputRecord?
Collections.emptyList():
inputRecord.getNumberList();
}
}

View File

@@ -4,16 +4,25 @@ package com.accompany.business.service.activity;
import com.accompany.business.model.activity.LuckyNumberActRound;
import com.accompany.business.mybatismapper.activity.LuckyNumberActRoundMapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List;
@Slf4j
@Service
public class LuckyNumberActRoundService extends ServiceImpl<LuckyNumberActRoundMapper, LuckyNumberActRound> {
public void pageHistory(Page<LuckyNumberActRound> page, Integer partitionId) {
baseMapper.selectPage(page, Wrappers.<LuckyNumberActRound>lambdaQuery()
.eq(LuckyNumberActRound::getPartitionId, partitionId)
.isNotNull(LuckyNumberActRound::getLuckyNumber)
.orderByDesc(LuckyNumberActRound::getDate));
}
public LuckyNumberActRound getByDate(String date, Integer partitionId) {
return baseMapper.selectOne(Wrappers.<LuckyNumberActRound>lambdaQuery()
.eq(LuckyNumberActRound::getDate, date)
@@ -38,4 +47,5 @@ public class LuckyNumberActRoundService extends ServiceImpl<LuckyNumberActRoundM
public void updateJackpot(String roundId, Integer partitionId, BigDecimal input) {
baseMapper.updateJackpot(roundId, partitionId, input);
}
}

View File

@@ -4,7 +4,9 @@ package com.accompany.business.service.activity;
import com.accompany.business.dto.activity.LuckyNumberActConfig;
import com.accompany.business.model.activity.LuckyNumberActRound;
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.LuckyNumberActRoundVo;
import com.accompany.business.vo.activity.LuckyNumberActVo;
import com.accompany.common.constant.Constant;
import com.accompany.common.status.BusiStatus;
@@ -15,15 +17,19 @@ import com.accompany.core.exception.ServiceException;
import com.accompany.core.model.Users;
import com.accompany.core.service.SysConfService;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.*;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Service
@@ -36,6 +42,8 @@ public class LuckyNumberActService {
@Autowired
private UserPurseService userPurseService;
@Autowired
private BillRecordService billRecordService;
@Autowired
private LuckyNumberActRoundService roundService;
@Autowired
private LuckyNumberActPlayerRecordService playerRecordService;
@@ -93,14 +101,41 @@ public class LuckyNumberActService {
throw new ServiceException(BusiStatus.NOT_IN_ACT_TIME_RANGE);
}
String roundId = now.compareTo(roundWaitTime) < 0 ? now.format(DateTimeUtil.dateFormatter) : now.plusDays(1L).format(DateTimeUtil.dateFormatter);
String roundDate = now.compareTo(roundWaitTime) < 0 ? now.format(DateTimeUtil.dateFormatter) : now.plusDays(1L).format(DateTimeUtil.dateFormatter);
userPurseService.subDiamond(uid, config.getPrice().doubleValue(), BillObjTypeEnum.ACTIVITY_DIAMOND_OUT);
double price = config.getPrice().doubleValue();
userPurseService.subDiamond(uid, price, BillObjTypeEnum.LUCKY_NUM_JACKPOT_INPUT_GOLD, (userPurse) -> {
String objId = String.join("_", roundDate, number.toString());
billRecordService.insertGeneralBillRecord(uid, objId, BillObjTypeEnum.LUCKY_NUM_JACKPOT_INPUT_GOLD, price, userPurse);
});
BigDecimal input = config.getPrice().multiply(config.getJackpotRatio()).setScale(2, RoundingMode.HALF_DOWN);
playerRecordService.saveRecord(roundId, uid, u.getPartitionId(), number, config.getPrice(), config.getJackpotRatio(), input);
playerRecordService.saveRecord(roundDate, uid, u.getPartitionId(), input, number);
roundService.updateJackpot(roundId, u.getPartitionId(), input);
roundService.updateJackpot(roundDate, u.getPartitionId(), input);
}
public List<LuckyNumberActRoundVo> listHistory(Long uid) {
Users u = usersService.getNotNullUsersByUid(uid);
Page<LuckyNumberActRound> page = new Page<>(1, 15);
roundService.pageHistory(page, u.getPartitionId());
if (CollectionUtils.isEmpty(page.getRecords())){
return Collections.emptyList();
}
return page.getRecords().stream().map(round -> {
LuckyNumberActRoundVo vo = new LuckyNumberActRoundVo();
vo.setDate(round.getDate());
vo.setPartitionId(round.getPartitionId());
vo.setLuckyNumber(round.getLuckyNumber());
ZonedDateTime zdt = ZonedDateTime.parse(round.getEndTime(), DateTimeUtil.zoneDatetimeFormatter);
vo.setEndTime(zdt.format(DateTimeUtil.dateHourFormatter));
return vo;
}).collect(Collectors.toList());
}
private LuckyNumberActConfig getConfig() {

View File

@@ -2,4 +2,13 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.accompany.business.mybatismapper.activity.LuckyNumberActInputRecordMapper">
<update id="saveRecord">
insert into lucky_number_act_input_record(date, uid, partition_id, `input`, number_list, lucky_status, create_time, update_time)
values(#{date}, #{uid}, #{partitionId}, #{input}, JSON_ARRAY(#{number}), 0, now(), now())
on duplicate key update
`input` = input + values(`input`),
number_list = JSON_ARRAY_APPEND(number_list, '$', #{number}),
update_time = values(update_time)
</update>
</mapper>

View File

@@ -1,6 +1,7 @@
package com.accompany.business.controller.activity;
import com.accompany.business.service.activity.LuckyNumberActService;
import com.accompany.business.vo.activity.LuckyNumberActRoundVo;
import com.accompany.business.vo.activity.LuckyNumberActVo;
import com.accompany.common.annotation.Authorization;
import com.accompany.common.result.BusiResult;
@@ -16,6 +17,8 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Api(tags = "幸运数字活动",value = "幸运数字活动")
@Slf4j
@RestController
@@ -47,4 +50,13 @@ public class LuckyNumberActController {
return BusiResult.success();
}
@ApiOperation(value = "历史轮次")
@Authorization
@PostMapping(value = "/listHistory")
public BusiResult<List<LuckyNumberActRoundVo>> listHistory(){
Long uid = UidContextHolder.get();
List<LuckyNumberActRoundVo> roundList = actService.listHistory(uid);
return BusiResult.success(roundList);
}
}