parent
6d631563c6
commit
a138e16b40
@ -0,0 +1,22 @@
|
|||||||
|
package cn.teammodel.admin.controller;
|
||||||
|
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 管理员首页
|
||||||
|
* @author winter
|
||||||
|
* @create 2023-12-06 14:37
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("admin/index")
|
||||||
|
public class IndexController {
|
||||||
|
|
||||||
|
|
||||||
|
@RequestMapping("/")
|
||||||
|
public String index(){
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package cn.teammodel.admin.service;
|
||||||
|
|
||||||
|
import cn.teammodel.model.vo.admin.IndexData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author winter
|
||||||
|
* @create 2023-12-06 14:45
|
||||||
|
*/
|
||||||
|
public interface AdminAppraiseService {
|
||||||
|
IndexData getIndexData(String period, String academicYearId);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,90 @@
|
|||||||
|
package cn.teammodel.admin.service.impl;
|
||||||
|
|
||||||
|
import cn.teammodel.admin.service.AdminAppraiseService;
|
||||||
|
import cn.teammodel.common.PK;
|
||||||
|
import cn.teammodel.dao.AppraiseRecordRepository;
|
||||||
|
import cn.teammodel.dao.AppraiseRepository;
|
||||||
|
import cn.teammodel.model.vo.admin.IndexData;
|
||||||
|
import cn.teammodel.model.vo.appraise.RecordVo;
|
||||||
|
import com.azure.spring.data.cosmos.core.CosmosTemplate;
|
||||||
|
import com.azure.spring.data.cosmos.core.query.CosmosPageRequest;
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
import org.springframework.data.domain.Slice;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.temporal.WeekFields;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author winter
|
||||||
|
* @create 2023-12-06 14:46
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class AdminAppraiseServiceImpl implements AdminAppraiseService {
|
||||||
|
@Resource
|
||||||
|
private CosmosTemplate cosmosTemplate;
|
||||||
|
@Resource
|
||||||
|
private AppraiseRepository appraiseRepository;
|
||||||
|
@Resource
|
||||||
|
private AppraiseRecordRepository appraiseRecordRepository;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IndexData getIndexData(String period, String academicYearId) {
|
||||||
|
final IndexData indexData = new IndexData();
|
||||||
|
int totalCount = 0;
|
||||||
|
int criticalCount = 0;
|
||||||
|
|
||||||
|
//User loginUser = SecurityUtil.getLoginUser();
|
||||||
|
String schoolId = "habook";
|
||||||
|
|
||||||
|
// slice 分段读取
|
||||||
|
CosmosPageRequest pageRequest = new CosmosPageRequest(0, 10, null);
|
||||||
|
Slice<RecordVo> slice;
|
||||||
|
Map<Integer, Integer> countByWeek = new HashMap<>();
|
||||||
|
|
||||||
|
do {
|
||||||
|
slice = appraiseRecordRepository.findAllByAcademicYearId(String.format(PK.PK_APPRAISE_RECORD, schoolId), academicYearId, pageRequest);
|
||||||
|
List<RecordVo> content = slice.getContent();
|
||||||
|
if (ObjectUtils.isEmpty(content)) {
|
||||||
|
return indexData;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分批次计算
|
||||||
|
for (RecordVo item : content) {
|
||||||
|
// 处理每周的评价数
|
||||||
|
int weekNum = calculateWeekNum(item.getCreateTime());
|
||||||
|
countByWeek.put(weekNum, countByWeek.getOrDefault(weekNum, 0) + 1);
|
||||||
|
// 处理总评价数
|
||||||
|
totalCount++;
|
||||||
|
// 处理批评数
|
||||||
|
if (!item.isPraise()) {
|
||||||
|
criticalCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (slice.hasNext()) {
|
||||||
|
pageRequest = (CosmosPageRequest) slice.nextPageable();
|
||||||
|
}
|
||||||
|
} while (slice.hasNext());
|
||||||
|
|
||||||
|
// 组装数据
|
||||||
|
indexData.setCountByWeek(countByWeek);
|
||||||
|
indexData.setTotalCount(totalCount);
|
||||||
|
indexData.setCriticalCount(criticalCount);
|
||||||
|
indexData.setPraiseCount(totalCount - criticalCount);
|
||||||
|
return indexData;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int calculateWeekNum(LocalDateTime localDateTime) {
|
||||||
|
// 获取周字段 todo: 时区或者周的计算
|
||||||
|
WeekFields weekFields = WeekFields.of(Locale.getDefault());
|
||||||
|
// 获取当前日期时间所在年的周数
|
||||||
|
return localDateTime.get(weekFields.weekOfWeekBasedYear());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package cn.teammodel.model.vo.admin;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author winter
|
||||||
|
* @create 2023-12-06 14:47
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class IndexData {
|
||||||
|
private Integer totalCount;
|
||||||
|
private Integer praiseCount;
|
||||||
|
private Integer criticalCount;
|
||||||
|
private Map<Integer, Integer> countByWeek;
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
package cn.teammodel.model.vo.appraise;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author winter
|
||||||
|
* @create 2023-12-06 17:43
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class RecordVo {
|
||||||
|
private String recordId;
|
||||||
|
private String name;
|
||||||
|
private String avatar;
|
||||||
|
private String targetId;
|
||||||
|
private String targetType;
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
@JsonProperty("isPraise")
|
||||||
|
private boolean isPraise;
|
||||||
|
}
|
Loading…
Reference in new issue