lucky24-记录-增加分区id
This commit is contained in:
@@ -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);
|
||||
}
|
@@ -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;
|
||||
}
|
||||
|
@@ -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>
|
@@ -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));
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
@@ -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;
|
@@ -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);
|
||||
|
||||
}
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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>
|
||||
|
@@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user