新增工会数据定时统计任务
This commit is contained in:
@@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.accompany.admin.dto.stats.LaborStatsDto;
|
||||
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.vo.stats.LaborStatsVo;
|
||||
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.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -28,6 +32,9 @@ import java.util.stream.Collectors;
|
||||
@Service
|
||||
public class LaborStatsAdminService extends BaseService {
|
||||
|
||||
@Autowired
|
||||
private HallLaborStatsMapper hallLaborStatsMapper;
|
||||
|
||||
@Autowired
|
||||
LaborStatsMapper laborStatsMapper;
|
||||
@Autowired
|
||||
@@ -43,7 +50,7 @@ public class LaborStatsAdminService extends BaseService {
|
||||
public List<LaborStatsVo> laborStats(Date startTime, Date endTime, String erbanNoStr) {
|
||||
Date itTime = startTime;
|
||||
List<LaborStatsVo> data = new ArrayList<>();
|
||||
List<String> erbanNoList = Arrays.asList(erbanNoStr.split(","));
|
||||
String[] erbanNoList = erbanNoStr.split(",");
|
||||
while (DateTimeUtil.compareTime(endTime, itTime) >= 0) {
|
||||
for (String erbanNo : erbanNoList) {
|
||||
String dateStr = DateTimeUtil.convertDate(itTime, DateTimeUtil.DEFAULT_DATE_PATTERN);
|
||||
@@ -64,7 +71,51 @@ public class LaborStatsAdminService extends BaseService {
|
||||
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) {
|
||||
logger.info("startTime : {}, startTime : {}, erBanNoStr : {}, cacheKey : {}", startTime, endTime, erBanNoStr, cacheKey);
|
||||
Date dateTime = startTime;
|
||||
|
@@ -12,5 +12,16 @@ import java.util.Date;
|
||||
*/
|
||||
public interface HallLaborStatsService extends IService<HallLaborStats> {
|
||||
|
||||
/**
|
||||
* 初始化公会数据统计
|
||||
*
|
||||
* @param startTime
|
||||
* @param endTime
|
||||
*/
|
||||
void initialize(Date startTime, Date endTime);
|
||||
|
||||
/**
|
||||
* 定时任务
|
||||
*/
|
||||
void execute();
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
package com.accompany.admin.service.stats.impl;
|
||||
|
||||
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.model.stats.HallLaborStats;
|
||||
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.HallExample;
|
||||
import com.accompany.business.mybatismapper.HallMapper;
|
||||
import com.accompany.common.annotation.FieldComment;
|
||||
import com.accompany.common.constant.Constant;
|
||||
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.service.user.UsersBaseService;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
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.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author: liaozetao
|
||||
@@ -54,29 +55,84 @@ public class HallLaborStatsServiceImpl extends ServiceImpl<HallLaborStatsMapper,
|
||||
log.info("hall is empty.");
|
||||
return;
|
||||
}
|
||||
String[] ignored = {"date", "erbanNo", "roomTitle"};
|
||||
Class<LaborStatsVo> clazz = LaborStatsVo.class;
|
||||
Date dateTime = startTime;
|
||||
while (DateTimeUtil.compareTime(endTime, dateTime) >= 0) {
|
||||
for (Hall hall : halls) {
|
||||
Date currentEndTime = DateTimeUtil.addDays(dateTime, 1);
|
||||
Long ownerUid = hall.getOwnerUid();
|
||||
Users users = usersBaseService.getUsersByUid(ownerUid);
|
||||
if (users == null) {
|
||||
log.info("{} is not exists.", ownerUid);
|
||||
continue;
|
||||
}
|
||||
Long erBanNo = users.getErbanNo();
|
||||
List<LaborStatsVo> data = laborStatsAdminService.guildStatistics(dateTime, currentEndTime, String.valueOf(erBanNo), null);
|
||||
if (CollectionUtil.isEmpty(data)) {
|
||||
continue;
|
||||
}
|
||||
for (LaborStatsVo stats : data) {
|
||||
HallLaborStats hallLaborStats = new HallLaborStats();
|
||||
BeanUtils.copyProperties(stats, hallLaborStats);
|
||||
save(hallLaborStats);
|
||||
try {
|
||||
Date currentEndTime = DateTimeUtil.addDays(dateTime, 1);
|
||||
Long ownerUid = hall.getOwnerUid();
|
||||
Users users = usersBaseService.getUsersByUid(ownerUid);
|
||||
if (users == null) {
|
||||
log.info("{} is not exists.", ownerUid);
|
||||
continue;
|
||||
}
|
||||
Long erBanNo = users.getErbanNo();
|
||||
List<LaborStatsVo> data = laborStatsAdminService.guildStatistics(dateTime, currentEndTime, String.valueOf(erBanNo), null);
|
||||
if (CollectionUtil.isEmpty(data)) {
|
||||
continue;
|
||||
}
|
||||
for (LaborStatsVo stats : data) {
|
||||
boolean isSave = false;
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 每天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