lucky24-记录-增加分区id

This commit is contained in:
khalil
2024-11-18 16:44:55 +08:00
parent 317d5a43e0
commit ed6159a50e
12 changed files with 151 additions and 93 deletions

View File

@@ -1,22 +0,0 @@
package com.accompany.admin.mapper.lucky;
import com.accompany.admin.vo.Lucky24PersonalStatAdminVo;
import com.accompany.admin.vo.Lucky24PlatformStatAdminVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
@Mapper
public interface Lucky24RecordAdminMapper {
List<Lucky24PlatformStatAdminVo> listPlatform(@Param("partitionId") Integer partitionId, @Param("startTime") Date startTime, @Param("endTime") Date endTime,
@Param("zoneIdHour") long zoneIdHour);
Page<Lucky24PersonalStatAdminVo> pagePersonal(Page<Lucky24PersonalStatAdminVo> page,
@Param("partitionId") Integer partitionId, @Param("uid") Long uid,
@Param("startTime") Date startTime, @Param("endTime") Date endTime,
@Param("zoneIdHour") long zoneIdHour);
}

View File

@@ -1,11 +1,11 @@
package com.accompany.admin.service.lucky;
import cn.hippo4j.common.toolkit.CollectionUtil;
import com.accompany.admin.mapper.lucky.Lucky24RecordAdminMapper;
import com.accompany.admin.service.system.SysConfAdminService;
import com.accompany.admin.vo.Lucky24ConfigAdminVo;
import com.accompany.admin.vo.Lucky24PersonalStatAdminVo;
import com.accompany.admin.vo.Lucky24PlatformStatAdminVo;
import com.accompany.business.mybatismapper.lucky.Lucky24RecordMapper;
import com.accompany.business.vo.luckybag.Lucky24PersonalStatVo;
import com.accompany.business.vo.luckybag.Lucky24PlatformStatVo;
import com.accompany.business.dto.lucky.Lucky24GiftConfig;
import com.accompany.business.model.lucky.Lucky24Pool;
import com.accompany.business.mybatismapper.lucky.Lucky24PoolMapper;
@@ -46,7 +46,7 @@ public class Lucky24PoolAdminService {
@Autowired
private Lucky24StockService stockService;
@Autowired
private Lucky24RecordAdminMapper recordAdminMapper;
private Lucky24RecordMapper recordMapper;
@Autowired
private UsersService usersService;
@Autowired
@@ -149,7 +149,7 @@ public class Lucky24PoolAdminService {
sysConfAdminService.saveOrUpdate(sysConf);
}
public List<Lucky24PlatformStatAdminVo> listPlatform(Integer partitionId, String startDate, String endDate) {
public List<Lucky24PlatformStatVo> listPlatform(Integer partitionId, String startDate, String endDate) {
PartitionInfo partitionInfo = partitionInfoService.getById(partitionId);
Date startTime = DateTimeUtil.getBeginTimeOfDay(DateTimeUtil.convertStrToDate(startDate, DateTimeUtil.DEFAULT_DATE_PATTERN));
ZonedDateTime zonedStartTime = startTime.toInstant().atZone(ZoneId.of(partitionInfo.getZoneId()));
@@ -159,17 +159,17 @@ public class Lucky24PoolAdminService {
Date endTime = DateTimeUtil.getEndTimeOfDay(DateTimeUtil.convertStrToDate(endDate, DateTimeUtil.DEFAULT_DATE_PATTERN));
ZonedDateTime zonedEndTime = endTime.toInstant().atZone(ZoneId.of(partitionInfo.getZoneId()));
Date systemEndTime = Date.from(zonedEndTime.withZoneSameLocal(ZoneId.systemDefault()).toInstant());
List<Lucky24PlatformStatAdminVo> list = recordAdminMapper.listPlatform(partitionId, systemStartTime, systemEndTime, zoneIdHour);
for (Lucky24PlatformStatAdminVo vo: list) {
List<Lucky24PlatformStatVo> list = recordMapper.listPlatform(partitionId, systemStartTime, systemEndTime, zoneIdHour);
for (Lucky24PlatformStatVo vo: list) {
vo.setStock(stockService.addStock(partitionId, BigDecimal.ZERO));
}
return list;
}
public Page<Lucky24PersonalStatAdminVo> pagePersonal(Integer partitionId, Long erbanNo,
String startDate, String endDate,
int pageNo, int pageSize) {
Page<Lucky24PersonalStatAdminVo> page = new Page<>(pageNo, pageSize);
public Page<Lucky24PersonalStatVo> pagePersonal(Integer partitionId, Long erbanNo,
String startDate, String endDate,
int pageNo, int pageSize) {
Page<Lucky24PersonalStatVo> page = new Page<>(pageNo, pageSize);
Long uid = null;
if (null != erbanNo){
@@ -189,7 +189,7 @@ public class Lucky24PoolAdminService {
Date endTime = DateTimeUtil.getEndTimeOfDay(DateTimeUtil.convertStrToDate(endDate, DateTimeUtil.DEFAULT_DATE_PATTERN));
ZonedDateTime zonedEndTime = endTime.toInstant().atZone(ZoneId.of(partitionInfo.getZoneId()));
Date systemEndTime = Date.from(zonedEndTime.withZoneSameLocal(ZoneId.systemDefault()).toInstant());
recordAdminMapper.pagePersonal(page, partitionId, uid, systemStartTime, systemEndTime, zoneIdHour);
recordMapper.pagePersonal(page, partitionId, uid, systemStartTime, systemEndTime, zoneIdHour);
return page;
}

View File

@@ -1,43 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.accompany.admin.mapper.lucky.Lucky24RecordAdminMapper">
<select id="listPlatform" resultType="com.accompany.admin.vo.Lucky24PlatformStatAdminVo">
select date(date_add(r.create_time, INTERVAL #{zoneIdHour} HOUR)) `date`,
sum(gift_num * gift_gold_price) `totalInput`,
sum(win_gold_num) `totalOutput`,
sum(win_gold_num) / sum(gift_num * gift_gold_price) `productionRatio`,
count(*) `num`, count(distinct r.uid) `count`,
count((case when win_gold_num > 0 then r.uid else null end)) `winNum`,
count(distinct (case when win_gold_num > 0 then r.uid else null end)) `winCount`,
ifnull(count((case when win_gold_num > 0 then r.uid else null end)) / count(*),0) `winRate`
from lucky_24_record r
left join users u on r. uid = u.uid
where r.create_time between #{startTime} and #{endTime}
and u.partition_id = #{partitionId}
group by `date`
</select>
<select id="pagePersonal" resultType="com.accompany.admin.vo.Lucky24PersonalStatAdminVo">
select date(date_add(r.create_time, INTERVAL #{zoneIdHour} HOUR)) `date`,
r.uid, u.erban_no `erbanNo`,
sum(gift_num * gift_gold_price) `totalInput`,
sum(win_gold_num) `totalOutput`,
sum(gift_num * gift_gold_price) - sum(win_gold_num) `production`,
sum(win_gold_num) / sum(gift_num * gift_gold_price) `productionRatio`,
sum(gift_num * gift_gold_price) / count(*) `avgInput`,
count(*) `num`,
count((case when win_gold_num > 0 then r.uid else null end)) `winNum`,
ifnull(count((case when win_gold_num > 0 then r.uid else null end)) / count(*),0) `winRate`
from lucky_24_record r
left join users u on r. uid = u.uid
where r.create_time between #{startTime} and #{endTime}
<if test="null != uid">
and u.uid = #{uid}
</if>
and u.partition_id = #{partitionId}
group by `date`, r.uid
order by `date`, `totalInput`
</select>
</mapper>

View File

@@ -1,9 +1,8 @@
package com.accompany.admin.controller.lucky;
import com.accompany.admin.service.lucky.Lucky24PoolAdminService;
import com.accompany.admin.vo.Lucky24ConfigAdminVo;
import com.accompany.admin.vo.Lucky24PersonalStatAdminVo;
import com.accompany.admin.vo.Lucky24PlatformStatAdminVo;
import com.accompany.business.vo.luckybag.Lucky24PersonalStatVo;
import com.accompany.business.vo.luckybag.Lucky24PlatformStatVo;
import com.accompany.common.result.BusiResult;
import com.accompany.common.result.PageResult;
import com.accompany.common.status.BusiStatus;
@@ -19,7 +18,6 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Collections;
import java.util.List;
@Api(tags = "幸运24")
@@ -37,11 +35,11 @@ public class Lucky24RecordAdminController {
@ApiImplicitParam(value = "endDate", name = "结束日期", required = true),
})
@GetMapping("/platform")
public BusiResult<List<Lucky24PlatformStatAdminVo>> platform(Integer partitionId, String startDate, String endDate) {
public BusiResult<List<Lucky24PlatformStatVo>> platform(Integer partitionId, String startDate, String endDate) {
if (null == partitionId || !StringUtils.hasText(startDate) || !StringUtils.hasText(endDate)) {
throw new ServiceException(BusiStatus.PARAMERROR);
}
List<Lucky24PlatformStatAdminVo> platformStatList = service.listPlatform(partitionId, startDate, endDate);
List<Lucky24PlatformStatVo> platformStatList = service.listPlatform(partitionId, startDate, endDate);
return BusiResult.success(platformStatList);
}
@@ -55,13 +53,13 @@ public class Lucky24RecordAdminController {
@ApiImplicitParam(value = "pageSize", name = "页长", required = true),
})
@GetMapping("/personal")
public BusiResult<PageResult<Lucky24PersonalStatAdminVo>> personal(Integer partitionId, Long erbanNo,
String startDate, String endDate,
int pageNo, int pageSize) {
public BusiResult<PageResult<Lucky24PersonalStatVo>> personal(Integer partitionId, Long erbanNo,
String startDate, String endDate,
int pageNo, int pageSize) {
if (null == partitionId || !StringUtils.hasText(startDate) || !StringUtils.hasText(endDate)) {
throw new ServiceException(BusiStatus.PARAMERROR);
}
Page<Lucky24PersonalStatAdminVo> page = service.pagePersonal(partitionId, erbanNo, startDate, endDate, pageNo, pageSize);
Page<Lucky24PersonalStatVo> page = service.pagePersonal(partitionId, erbanNo, startDate, endDate, pageNo, pageSize);
return BusiResult.success(new PageResult<>(page));
}

View File

@@ -13,6 +13,7 @@ public class Lucky24Record {
@TableId(type = IdType.AUTO)
private Long id;
private Integer partitionId;
private Long uid;
private Long receiverUid;
private Integer giftId;

View File

@@ -1,4 +1,4 @@
package com.accompany.admin.vo;
package com.accompany.business.vo.luckybag;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -8,7 +8,7 @@ import java.math.BigDecimal;
@Data
@ApiModel
public class Lucky24PersonalStatAdminVo {
public class Lucky24PersonalStatVo {
@ApiModelProperty("日期")
private String date;

View File

@@ -1,4 +1,4 @@
package com.accompany.admin.vo;
package com.accompany.business.vo.luckybag;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -8,7 +8,7 @@ import java.math.BigDecimal;
@Data
@ApiModel
public class Lucky24PlatformStatAdminVo {
public class Lucky24PlatformStatVo {
@ApiModelProperty("日期")
private String date;

View File

@@ -1,7 +1,23 @@
package com.accompany.business.mybatismapper.lucky;
import com.accompany.business.model.lucky.Lucky24Record;
import com.accompany.business.vo.luckybag.Lucky24PersonalStatVo;
import com.accompany.business.vo.luckybag.Lucky24PlatformStatVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
public interface Lucky24RecordMapper extends BaseMapper<Lucky24Record> {
List<Lucky24PlatformStatVo> listPlatform(@Param("partitionId") Integer partitionId, @Param("startTime") Date startTime, @Param("endTime") Date endTime,
@Param("zoneIdHour") long zoneIdHour);
Page<Lucky24PersonalStatVo> pagePersonal(Page<Lucky24PersonalStatVo> page,
@Param("partitionId") Integer partitionId, @Param("uid") Long uid,
@Param("startTime") Date startTime, @Param("endTime") Date endTime,
@Param("zoneIdHour") long zoneIdHour);
}

View File

@@ -88,7 +88,7 @@ public class Lucky24GiftSendService {
}
long winGoldNum = afterMultiple * everyoneGoldNum;
userMetaService.updateUserMeta(senderUid, curTimes, everyoneGoldNum, winGoldNum);
recordService.saveRecord(senderUid, gift, giftNum, receiverUid, drawResult.getPoolId(),
recordService.saveRecord(senderUid, sender.getPartitionId(), gift, giftNum, receiverUid, drawResult.getPoolId(),
null != supplementMultiple || Boolean.TRUE.equals(drawResult.getIsSupplement()),
drawMultiple, afterMultiple, sendGiftTime);

View File

@@ -3,12 +3,14 @@ package com.accompany.business.service.lucky;
import com.accompany.business.model.Gift;
import com.accompany.business.model.lucky.Lucky24Record;
import com.accompany.business.mybatismapper.lucky.Lucky24RecordMapper;
import com.accompany.business.vo.luckybag.Lucky24PlatformStatVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
@Slf4j
@Service
@@ -18,10 +20,11 @@ public class Lucky24RecordService {
private Lucky24RecordMapper mapper;
@Async
public void saveRecord(long senderUid, Gift gift, int giftNum, long receiverUid, int poolId,
public void saveRecord(long senderUid, int partitionId, Gift gift, int giftNum, long receiverUid, int poolId,
boolean isSupplement, long drawMultiple, long afterMultiple, Date sendGiftTime) {
Lucky24Record record = new Lucky24Record();
record.setUid(senderUid);
record.setPartitionId(partitionId);
record.setReceiverUid(receiverUid);
record.setGiftId(gift.getGiftId());
record.setGiftNum(giftNum);
@@ -35,4 +38,7 @@ public class Lucky24RecordService {
mapper.insert(record);
}
public void statDate(Integer partitionId, String dateStr, Date startTime, Date endTime, long zoneIdHour) {
List<Lucky24PlatformStatVo> list = mapper.listPlatform(partitionId, startTime, endTime, zoneIdHour);
}
}

View File

@@ -2,4 +2,40 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.accompany.business.mybatismapper.lucky.Lucky24RecordMapper">
<select id="listPlatform" resultType="com.accompany.business.vo.luckybag.Lucky24PlatformStatVo">
select date(date_add(r.create_time, INTERVAL #{zoneIdHour} HOUR)) `date`,
sum(gift_num * gift_gold_price) `totalInput`,
sum(win_gold_num) `totalOutput`,
sum(win_gold_num) / sum(gift_num * gift_gold_price) `productionRatio`,
count(*) `num`, count(distinct r.uid) `count`,
count((case when win_gold_num > 0 then r.uid else null end)) `winNum`,
count(distinct (case when win_gold_num > 0 then r.uid else null end)) `winCount`,
ifnull(count((case when win_gold_num > 0 then r.uid else null end)) / count(*),0) `winRate`
from lucky_24_record r
where r.create_time between #{startTime} and #{endTime}
and r.partition_id = #{partitionId}
group by `date`
</select>
<select id="pagePersonal" resultType="com.accompany.business.vo.luckybag.Lucky24PersonalStatVo">
select date(date_add(r.create_time, INTERVAL #{zoneIdHour} HOUR)) `date`,
r.uid, u.erban_no `erbanNo`,
sum(gift_num * gift_gold_price) `totalInput`,
sum(win_gold_num) `totalOutput`,
sum(gift_num * gift_gold_price) - sum(win_gold_num) `production`,
sum(win_gold_num) / sum(gift_num * gift_gold_price) `productionRatio`,
sum(gift_num * gift_gold_price) / count(*) `avgInput`,
count(*) `num`,
count((case when win_gold_num > 0 then r.uid else null end)) `winNum`,
ifnull(count((case when win_gold_num > 0 then r.uid else null end)) / count(*),0) `winRate`
from lucky_24_record r
where r.create_time between #{startTime} and #{endTime}
and r.partition_id = #{partitionId}
<if test="null != uid">
and r.uid = #{uid}
</if>
group by `date`, r.uid
order by `date`, `totalInput`
</select>
</mapper>

View File

@@ -0,0 +1,66 @@
package com.accompany.scheduler.task.luckyBag;
import com.accompany.business.service.lucky.Lucky24RecordService;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.model.PartitionInfo;
import com.accompany.core.service.partition.PartitionInfoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.Duration;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ThreadPoolExecutor;
@Component
@Slf4j
public class Lucky24Task {
@Autowired
private PartitionInfoService partitionInfoService;
@Autowired
private Lucky24RecordService service;
@Resource(name = "bizExecutor")
private ThreadPoolExecutor bizExecutor;
@Scheduled(cron = "0 2 * * * ? ")
public void lucky24RecordStat() {
Date now = new Date();
List<PartitionInfo> partitionInfoList = partitionInfoService.listAll();
for (PartitionInfo partitionInfo : partitionInfoList) {
ZonedDateTime zdt = DateTimeUtil.convertWithZoneId(now, partitionInfo.getZoneId());
ZonedDateTime hourAgo = zdt.minusHours(1L);
if (zdt.getDayOfYear() == hourAgo.getDayOfYear()){
continue;
}
bizExecutor.execute(() -> {
String dateStr = zdt.format(DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_PATTERN));
// 获取当天的第一秒
ZonedDateTime startOfDay = zdt.withHour(0)
.withMinute(0)
.withSecond(0)
.withNano(0);
Date startTime = DateTimeUtil.converLocalDateTimeToDate(startOfDay.withZoneSameInstant(ZoneId.systemDefault()).toLocalDateTime());
long zoneIdHour = Duration.between(now.toInstant(), zdt.toInstant()).toHours();
// 获取当天的最后一秒
ZonedDateTime endOfDay = zdt.withHour(23)
.withMinute(59)
.withSecond(59)
.withNano(999999999);
Date endTime = DateTimeUtil.converLocalDateTimeToDate(endOfDay.withZoneSameInstant(ZoneId.systemDefault()).toLocalDateTime());
service.statDate(partitionInfo.getId(), dateStr, startTime, endTime, zoneIdHour);
});
}
}
}