幸运数字-历史轮次
This commit is contained in:
@@ -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");
|
||||
|
@@ -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;
|
||||
|
||||
}
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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;
|
||||
|
||||
}
|
@@ -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);
|
||||
}
|
||||
|
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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() {
|
||||
|
@@ -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>
|
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user