新增工会数据定时统计任务
This commit is contained in:
@@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollectionUtil;
|
|||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.accompany.admin.dto.stats.LaborStatsDto;
|
import com.accompany.admin.dto.stats.LaborStatsDto;
|
||||||
import com.accompany.admin.mapper.LaborStatsMapper;
|
import com.accompany.admin.mapper.LaborStatsMapper;
|
||||||
|
import com.accompany.admin.mapper.stats.HallLaborStatsMapper;
|
||||||
|
import com.accompany.admin.model.stats.HallLaborStats;
|
||||||
import com.accompany.admin.service.base.BaseService;
|
import com.accompany.admin.service.base.BaseService;
|
||||||
import com.accompany.admin.vo.stats.LaborStatsVo;
|
import com.accompany.admin.vo.stats.LaborStatsVo;
|
||||||
import com.accompany.business.service.room.RoomService;
|
import com.accompany.business.service.room.RoomService;
|
||||||
@@ -17,7 +19,9 @@ import com.accompany.core.model.Room;
|
|||||||
import com.accompany.core.model.Users;
|
import com.accompany.core.model.Users;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.scheduling.annotation.Async;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -28,6 +32,9 @@ import java.util.stream.Collectors;
|
|||||||
@Service
|
@Service
|
||||||
public class LaborStatsAdminService extends BaseService {
|
public class LaborStatsAdminService extends BaseService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private HallLaborStatsMapper hallLaborStatsMapper;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
LaborStatsMapper laborStatsMapper;
|
LaborStatsMapper laborStatsMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -43,7 +50,7 @@ public class LaborStatsAdminService extends BaseService {
|
|||||||
public List<LaborStatsVo> laborStats(Date startTime, Date endTime, String erbanNoStr) {
|
public List<LaborStatsVo> laborStats(Date startTime, Date endTime, String erbanNoStr) {
|
||||||
Date itTime = startTime;
|
Date itTime = startTime;
|
||||||
List<LaborStatsVo> data = new ArrayList<>();
|
List<LaborStatsVo> data = new ArrayList<>();
|
||||||
List<String> erbanNoList = Arrays.asList(erbanNoStr.split(","));
|
String[] erbanNoList = erbanNoStr.split(",");
|
||||||
while (DateTimeUtil.compareTime(endTime, itTime) >= 0) {
|
while (DateTimeUtil.compareTime(endTime, itTime) >= 0) {
|
||||||
for (String erbanNo : erbanNoList) {
|
for (String erbanNo : erbanNoList) {
|
||||||
String dateStr = DateTimeUtil.convertDate(itTime, DateTimeUtil.DEFAULT_DATE_PATTERN);
|
String dateStr = DateTimeUtil.convertDate(itTime, DateTimeUtil.DEFAULT_DATE_PATTERN);
|
||||||
@@ -64,7 +71,51 @@ public class LaborStatsAdminService extends BaseService {
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Async
|
@Async
|
||||||
|
public void laborStats(Date startTime, Date endTime, String erBanNoStr, String cacheKey) {
|
||||||
|
logger.info("startTime : {}, startTime : {}, erBanNoStr : {}, cacheKey : {}", startTime, endTime, erBanNoStr, cacheKey);
|
||||||
|
Date dateTime = startTime;
|
||||||
|
List<LaborStatsVo> data = new ArrayList<>();
|
||||||
|
String[] erBanNoArray = erBanNoStr.split(StrUtil.COMMA);
|
||||||
|
Map<Long, Long> erBanNoMap = Arrays.stream(erBanNoArray).map(v -> usersService.getUserByErbanNo(Long.valueOf(v))).filter(Objects::nonNull).collect(Collectors.toMap(Users::getErbanNo, Users::getUid, (v1, v2) -> v1));
|
||||||
|
List<HallLaborStats> hallLaborStats = hallLaborStatsMapper.selectList(Wrappers.<HallLaborStats>lambdaQuery()
|
||||||
|
.eq(HallLaborStats::getErbanNo, erBanNoArray)
|
||||||
|
.le(HallLaborStats::getDate, startTime)
|
||||||
|
.ge(HallLaborStats::getDate, endTime));
|
||||||
|
while (DateTimeUtil.compareTime(endTime, dateTime) >= 0) {
|
||||||
|
for (String erBanNo : erBanNoArray) {
|
||||||
|
String dateStr = DateTimeUtil.convertDate(dateTime, DateTimeUtil.DEFAULT_DATE_PATTERN);
|
||||||
|
Long erBanNoToLong = Long.valueOf(erBanNoStr);
|
||||||
|
Long roomUid = erBanNoMap.get(erBanNoToLong);
|
||||||
|
if (roomUid == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Room room = roomService.getRoomByUid(roomUid);
|
||||||
|
if (room == null) {
|
||||||
|
throw new ServiceException("厅不存在,厅号:" + erBanNo);
|
||||||
|
}
|
||||||
|
String roomTitle = room.getTitle();
|
||||||
|
LaborStatsVo stats = new LaborStatsVo();
|
||||||
|
stats.setDate(dateStr);
|
||||||
|
stats.setErbanNo(erBanNoToLong);
|
||||||
|
stats.setRoomTitle(roomTitle);
|
||||||
|
if (CollectionUtil.isNotEmpty(hallLaborStats)) {
|
||||||
|
hallLaborStats.stream()
|
||||||
|
.filter(v -> dateStr != null && dateStr.equals(v.getDate()) && erBanNoToLong.equals(v.getErbanNo()))
|
||||||
|
.findAny()
|
||||||
|
.ifPresent(laborStats -> BeanUtils.copyProperties(laborStats, stats));
|
||||||
|
}
|
||||||
|
data.add(stats);
|
||||||
|
}
|
||||||
|
dateTime = DateTimeUtil.addDays(dateTime, 1);
|
||||||
|
}
|
||||||
|
if (CollectionUtils.isEmpty(data)) {
|
||||||
|
data = null;
|
||||||
|
}
|
||||||
|
jedisService.setnx(cacheKey, JSON.toJSONString(data), OVERDUE_TIME);
|
||||||
|
logger.info("异步执行:laborStatsV2 完成:" + cacheKey);
|
||||||
|
}
|
||||||
|
|
||||||
public List<LaborStatsVo> guildStatistics(Date startTime, Date endTime, String erBanNoStr, String cacheKey) {
|
public List<LaborStatsVo> guildStatistics(Date startTime, Date endTime, String erBanNoStr, String cacheKey) {
|
||||||
logger.info("startTime : {}, startTime : {}, erBanNoStr : {}, cacheKey : {}", startTime, endTime, erBanNoStr, cacheKey);
|
logger.info("startTime : {}, startTime : {}, erBanNoStr : {}, cacheKey : {}", startTime, endTime, erBanNoStr, cacheKey);
|
||||||
Date dateTime = startTime;
|
Date dateTime = startTime;
|
||||||
|
@@ -12,5 +12,16 @@ import java.util.Date;
|
|||||||
*/
|
*/
|
||||||
public interface HallLaborStatsService extends IService<HallLaborStats> {
|
public interface HallLaborStatsService extends IService<HallLaborStats> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化公会数据统计
|
||||||
|
*
|
||||||
|
* @param startTime
|
||||||
|
* @param endTime
|
||||||
|
*/
|
||||||
void initialize(Date startTime, Date endTime);
|
void initialize(Date startTime, Date endTime);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 定时任务
|
||||||
|
*/
|
||||||
|
void execute();
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
package com.accompany.admin.service.stats.impl;
|
package com.accompany.admin.service.stats.impl;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import com.accompany.admin.dto.stats.LaborStatsDto;
|
import cn.hutool.core.date.DatePattern;
|
||||||
import com.accompany.admin.mapper.stats.HallLaborStatsMapper;
|
import com.accompany.admin.mapper.stats.HallLaborStatsMapper;
|
||||||
import com.accompany.admin.model.stats.HallLaborStats;
|
import com.accompany.admin.model.stats.HallLaborStats;
|
||||||
import com.accompany.admin.service.statistic.LaborStatsAdminService;
|
import com.accompany.admin.service.statistic.LaborStatsAdminService;
|
||||||
@@ -10,23 +10,24 @@ import com.accompany.admin.vo.stats.LaborStatsVo;
|
|||||||
import com.accompany.business.model.Hall;
|
import com.accompany.business.model.Hall;
|
||||||
import com.accompany.business.model.HallExample;
|
import com.accompany.business.model.HallExample;
|
||||||
import com.accompany.business.mybatismapper.HallMapper;
|
import com.accompany.business.mybatismapper.HallMapper;
|
||||||
|
import com.accompany.common.annotation.FieldComment;
|
||||||
import com.accompany.common.constant.Constant;
|
import com.accompany.common.constant.Constant;
|
||||||
import com.accompany.common.utils.DateTimeUtil;
|
import com.accompany.common.utils.DateTimeUtil;
|
||||||
import com.accompany.core.exception.ServiceException;
|
|
||||||
import com.accompany.core.model.Room;
|
|
||||||
import com.accompany.core.model.Users;
|
import com.accompany.core.model.Users;
|
||||||
import com.accompany.core.service.user.UsersBaseService;
|
import com.accompany.core.service.user.UsersBaseService;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author: liaozetao
|
* @author: liaozetao
|
||||||
@@ -54,29 +55,84 @@ public class HallLaborStatsServiceImpl extends ServiceImpl<HallLaborStatsMapper,
|
|||||||
log.info("hall is empty.");
|
log.info("hall is empty.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
String[] ignored = {"date", "erbanNo", "roomTitle"};
|
||||||
|
Class<LaborStatsVo> clazz = LaborStatsVo.class;
|
||||||
Date dateTime = startTime;
|
Date dateTime = startTime;
|
||||||
while (DateTimeUtil.compareTime(endTime, dateTime) >= 0) {
|
while (DateTimeUtil.compareTime(endTime, dateTime) >= 0) {
|
||||||
for (Hall hall : halls) {
|
for (Hall hall : halls) {
|
||||||
Date currentEndTime = DateTimeUtil.addDays(dateTime, 1);
|
try {
|
||||||
Long ownerUid = hall.getOwnerUid();
|
Date currentEndTime = DateTimeUtil.addDays(dateTime, 1);
|
||||||
Users users = usersBaseService.getUsersByUid(ownerUid);
|
Long ownerUid = hall.getOwnerUid();
|
||||||
if (users == null) {
|
Users users = usersBaseService.getUsersByUid(ownerUid);
|
||||||
log.info("{} is not exists.", ownerUid);
|
if (users == null) {
|
||||||
continue;
|
log.info("{} is not exists.", ownerUid);
|
||||||
}
|
continue;
|
||||||
Long erBanNo = users.getErbanNo();
|
}
|
||||||
List<LaborStatsVo> data = laborStatsAdminService.guildStatistics(dateTime, currentEndTime, String.valueOf(erBanNo), null);
|
Long erBanNo = users.getErbanNo();
|
||||||
if (CollectionUtil.isEmpty(data)) {
|
List<LaborStatsVo> data = laborStatsAdminService.guildStatistics(dateTime, currentEndTime, String.valueOf(erBanNo), null);
|
||||||
continue;
|
if (CollectionUtil.isEmpty(data)) {
|
||||||
}
|
continue;
|
||||||
for (LaborStatsVo stats : data) {
|
}
|
||||||
HallLaborStats hallLaborStats = new HallLaborStats();
|
for (LaborStatsVo stats : data) {
|
||||||
BeanUtils.copyProperties(stats, hallLaborStats);
|
boolean isSave = false;
|
||||||
save(hallLaborStats);
|
for (Field declaredField : clazz.getDeclaredFields()) {
|
||||||
|
String fieldName = declaredField.getName();
|
||||||
|
if (Arrays.asList(ignored).contains(fieldName)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
declaredField.setAccessible(true);
|
||||||
|
Object obj = declaredField.get(stats);
|
||||||
|
if (obj != null) {
|
||||||
|
if (Double.parseDouble(obj.toString()) > 0) {
|
||||||
|
isSave = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isSave) {
|
||||||
|
log.info("save labor stats : {}", JSONObject.toJSONString(stats));
|
||||||
|
HallLaborStats hallLaborStats = new HallLaborStats();
|
||||||
|
BeanUtils.copyProperties(stats, hallLaborStats);
|
||||||
|
List<HallLaborStats> laborStats = list(Wrappers.<HallLaborStats>lambdaQuery()
|
||||||
|
.eq(HallLaborStats::getDate, stats.getDate())
|
||||||
|
.eq(HallLaborStats::getErbanNo, stats.getErbanNo()));
|
||||||
|
if (CollectionUtil.isEmpty(laborStats)) {
|
||||||
|
save(hallLaborStats);
|
||||||
|
} else {
|
||||||
|
update(Wrappers.<HallLaborStats>lambdaUpdate()
|
||||||
|
.set(HallLaborStats::getFirstInRoomRetained, stats.getFirstInRoomRetained())
|
||||||
|
.eq(HallLaborStats::getDate, stats.getDate())
|
||||||
|
.eq(HallLaborStats::getErbanNo, stats.getErbanNo()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dateTime = DateTimeUtil.addDays(dateTime, 1);
|
dateTime = DateTimeUtil.addDays(dateTime, 1);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 每天4点执行公会数据归档
|
||||||
|
*/
|
||||||
|
@Scheduled(cron = "0 0 4 * * ?")
|
||||||
|
@Override
|
||||||
|
public void execute() {
|
||||||
|
log.info("==== 执行公会数据生成 start ====");
|
||||||
|
try {
|
||||||
|
Date now = new Date();
|
||||||
|
Date dateTime = DateTimeUtil.addDays(new Date(), -2);
|
||||||
|
String startDate = DateTimeUtil.convertDate(dateTime, DatePattern.NORM_DATE_PATTERN);
|
||||||
|
String endDate = DateTimeUtil.convertDate(now, DatePattern.NORM_DATE_PATTERN);
|
||||||
|
Date startTime = DateTimeUtil.convertStrToDate(startDate, DateTimeUtil.DEFAULT_DATE_PATTERN);
|
||||||
|
Date endTime = DateTimeUtil.convertStrToDate(endDate, DateTimeUtil.DEFAULT_DATE_PATTERN);
|
||||||
|
log.info("startDate : {}, endTime : {}", startDate, endDate);
|
||||||
|
initialize(startTime, endTime);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
|
}
|
||||||
|
log.info("==== 执行公会数据生成 end ====");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user