|
|
|
@ -5,20 +5,23 @@ import cn.teammodel.common.PK;
|
|
|
|
|
import cn.teammodel.config.exception.ServiceException;
|
|
|
|
|
import cn.teammodel.controller.admin.service.TeacherService;
|
|
|
|
|
import cn.teammodel.model.dto.admin.teacher.GpTeacherDto;
|
|
|
|
|
import cn.teammodel.model.dto.admin.teacher.IdCodePair;
|
|
|
|
|
import cn.teammodel.model.dto.admin.teacher.TeacherDto;
|
|
|
|
|
import cn.teammodel.model.entity.User;
|
|
|
|
|
import cn.teammodel.model.entity.common.GroupList;
|
|
|
|
|
import cn.teammodel.model.entity.school.*;
|
|
|
|
|
import cn.teammodel.model.entity.teacher.HonorInfo;
|
|
|
|
|
import cn.teammodel.model.entity.teacher.PtTeacherInfo;
|
|
|
|
|
import cn.teammodel.model.vo.admin.GpTeacherVo;
|
|
|
|
|
import cn.teammodel.model.vo.admin.SugVo;
|
|
|
|
|
import cn.teammodel.model.vo.admin.TeacherGradeVo;
|
|
|
|
|
import cn.teammodel.repository.*;
|
|
|
|
|
import cn.teammodel.security.utils.SecurityUtil;
|
|
|
|
|
import cn.teammodel.test.AsyncTeacherService;
|
|
|
|
|
import cn.teammodel.test.LessonRecordQueryService;
|
|
|
|
|
import cn.teammodel.utils.GroupUtil;
|
|
|
|
|
import cn.teammodel.utils.SchoolDateUtil;
|
|
|
|
|
import com.azure.cosmos.CosmosException;
|
|
|
|
|
import com.azure.cosmos.models.CosmosPatchOperations;
|
|
|
|
|
import com.azure.spring.data.cosmos.core.query.CosmosPageRequest;
|
|
|
|
|
import com.fasterxml.jackson.core.type.TypeReference;
|
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
@ -26,11 +29,12 @@ import com.google.common.cache.Cache;
|
|
|
|
|
import com.google.common.cache.CacheBuilder;
|
|
|
|
|
import org.apache.commons.lang3.ObjectUtils;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import org.apache.commons.lang3.tuple.Pair;
|
|
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.cache.annotation.Cacheable;
|
|
|
|
|
import org.springframework.core.env.Environment;
|
|
|
|
|
import org.springframework.data.domain.Slice;
|
|
|
|
|
import org.springframework.data.domain.SliceImpl;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
@ -39,6 +43,7 @@ import java.time.*;
|
|
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.concurrent.*;
|
|
|
|
|
import java.util.function.Function;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
import static cn.teammodel.utils.SchoolDateUtil.calculateWeekNum;
|
|
|
|
@ -53,6 +58,8 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
|
private SchoolRepository schoolRepository;
|
|
|
|
|
@Resource
|
|
|
|
|
private LessonRecordRepository lessonRecordRepository;
|
|
|
|
|
@Resource
|
|
|
|
|
private PtTeacherRepository ptTeacherRepository;
|
|
|
|
|
/**
|
|
|
|
|
* 学校试卷
|
|
|
|
|
*/
|
|
|
|
@ -63,16 +70,37 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
|
*/
|
|
|
|
|
@Resource
|
|
|
|
|
private PaperTeacherRepository paperTeacherRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private AsyncTeacherService asyncTeacherService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private Environment env;
|
|
|
|
|
private static final double K = 0.08; // 衰减系数常量
|
|
|
|
|
|
|
|
|
|
// 引入缓存,需根据实际情况配置大小和过期时间 每次服务重启时 缓存会清空
|
|
|
|
|
public static final Cache<String, PtTeacherInfo> PT_TEACHER_CACHE = CacheBuilder.newBuilder()
|
|
|
|
|
.maximumSize(500)
|
|
|
|
|
.expireAfterWrite(8, TimeUnit.HOURS)
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
@Cacheable(value = "schoolGroupCache", key = "#code")
|
|
|
|
|
public List<GroupList> getCachedGroupLists(String code) {
|
|
|
|
|
return schoolGroupListRepository.findAllByCode("GroupList-" + code);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Cacheable(value = "TeacherCache", key = "#code")
|
|
|
|
|
public List<SchoolTeacher> getTeacherInfos(String code) {
|
|
|
|
|
return schoolTeacherRepository.findAllByCode("Teacher-" + code);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<Map<String, Integer>> getTeacherList(TeacherDto teacherDto) {
|
|
|
|
|
List<Map<String, Integer>> result = new ArrayList<>();
|
|
|
|
|
Map<String, Integer> teacherCountMap = new HashMap<>();
|
|
|
|
|
Map<String, Integer> groupCountMap = new HashMap<>();
|
|
|
|
|
List<GroupList> groupLists = schoolGroupListRepository.findAllByCode("GroupList-" + teacherDto.getCode());
|
|
|
|
|
List<SchoolTeacher> schoolTeachers = schoolTeacherRepository.findAllByCode("Teacher-" + teacherDto.getCode());
|
|
|
|
|
String code = teacherDto.getCode();
|
|
|
|
|
List<GroupList> groupLists = getCachedGroupLists(code);
|
|
|
|
|
List<SchoolTeacher> schoolTeachers = getTeacherInfos(code);
|
|
|
|
|
teacherCountMap.put("教师总人数", schoolTeachers.size());
|
|
|
|
|
List<School> school = schoolRepository.findBaseById(teacherDto.getCode());
|
|
|
|
|
List<School.Subject> subjects = new ArrayList<>();
|
|
|
|
@ -129,34 +157,29 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
|
String url = env.getProperty("ies.server-url-get-teacher-all");
|
|
|
|
|
try {
|
|
|
|
|
teachers = GroupUtil.getGroupId(teacherDto,new GroupUtil(env), request,url);
|
|
|
|
|
List<GpTeacherVo> teachersList = new ArrayList<>();
|
|
|
|
|
for (Map.Entry<String, Object> entry : teachers.entrySet()) {
|
|
|
|
|
// 假设 entry.getValue() 返回的是 List<Map<String, Object>>
|
|
|
|
|
List<Map<String, Object>> mapList = (List<Map<String, Object>>) entry.getValue();
|
|
|
|
|
for (Map<String, Object> map : mapList) {
|
|
|
|
|
// 将 Map 转换为 GpTeacherVo 对象
|
|
|
|
|
GpTeacherVo teacher = convertToGpTeacherVo(map);
|
|
|
|
|
teachersList.add(teacher);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
List<String> phones = new ArrayList<>();
|
|
|
|
|
// 进一步处理 teachersList
|
|
|
|
|
for (GpTeacherVo teacher : teachersList) {
|
|
|
|
|
phones.add(teacher.getPhone());
|
|
|
|
|
}
|
|
|
|
|
List<GpTeacherVo> teachersList = convertToGpTeacherVoList(teachers);
|
|
|
|
|
List<String> phones = teachersList.stream().map(GpTeacherVo::getPhone).collect(Collectors.toList());
|
|
|
|
|
GpTeacherDto gpTeacherDto = new GpTeacherDto();
|
|
|
|
|
gpTeacherDto.setMobiles(phones);
|
|
|
|
|
Map<String, Object> tBase = getTeacherBase(gpTeacherDto, request);
|
|
|
|
|
List<GpTeacher> gpTeachers = new ArrayList<>();
|
|
|
|
|
for (Map.Entry<String, Object> entry : tBase.entrySet()) {
|
|
|
|
|
if (entry.getKey().equals("teachers")) {
|
|
|
|
|
List<Map<String, Object>> dataList = (List<Map<String, Object>>) entry.getValue();
|
|
|
|
|
for (Map<String, Object> dataMap : dataList) {
|
|
|
|
|
GpTeacher gpTeacher = convertToGpTeacher(dataMap);
|
|
|
|
|
gpTeachers.add(gpTeacher);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
List<GpTeacher> gpTeachers = convertToGpTeacherList(tBase);
|
|
|
|
|
// 优化1:使用Map加速查找
|
|
|
|
|
Map<String, GpTeacher> phoneToGpTeacher = gpTeachers.stream()
|
|
|
|
|
.collect(Collectors.toMap(
|
|
|
|
|
gp -> gp.getMobile().toLowerCase(),
|
|
|
|
|
Function.identity()
|
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
// 处理教师信息
|
|
|
|
|
teachersList.forEach(teacher -> {
|
|
|
|
|
String phoneKey = teacher.getPhone() != null ? teacher.getPhone().toLowerCase() : "";
|
|
|
|
|
GpTeacher gpTeacher = phoneToGpTeacher.get(phoneKey);
|
|
|
|
|
if (gpTeacher != null) {
|
|
|
|
|
teacher.setGender(gpTeacher.getBasic() != null ? gpTeacher.getBasic().getGender() : "");
|
|
|
|
|
teacher.setPracticeTime(gpTeacher.getPracticeTime() != null ? gpTeacher.getPracticeTime() : 0L);
|
|
|
|
|
teacher.setDegree(gpTeacher.getDegree() != null ? gpTeacher.getDegree() : "");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
Map<String, Long> genderCount = gpTeachers.stream()
|
|
|
|
|
.collect(Collectors.groupingBy(gpTeacher -> gpTeacher.getBasic().getGender(), Collectors.counting()));
|
|
|
|
|
Map<String, Long> degreeCount = gpTeachers.stream()
|
|
|
|
@ -171,42 +194,13 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
|
}else if (!genderCount.containsKey("M")){
|
|
|
|
|
genderCount.put("M",0L);
|
|
|
|
|
}
|
|
|
|
|
/* Map<String, Object> genderMap = new HashMap<>();
|
|
|
|
|
Map<String, Object> practiceMap = new HashMap<>();
|
|
|
|
|
for (GpTeacher gpTeacher : gpTeachers) {
|
|
|
|
|
genderMap.put(gpTeacher.basic.name, gpTeacher.basic.gender);
|
|
|
|
|
practiceMap.put(gpTeacher.basic.name, gpTeacher.practiceTime);
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
for (GpTeacherVo teacher : teachersList) {
|
|
|
|
|
for(GpTeacher gpTeacher : gpTeachers) {
|
|
|
|
|
if(StringUtils.isNotEmpty(teacher.phone) && teacher.phone.equalsIgnoreCase(gpTeacher.mobile)) {
|
|
|
|
|
if(gpTeacher.basic.gender != null) {
|
|
|
|
|
teacher.setGender(gpTeacher.basic.gender);
|
|
|
|
|
}else {
|
|
|
|
|
teacher.setGender("");
|
|
|
|
|
}
|
|
|
|
|
if (gpTeacher.getPracticeTime() != null && gpTeacher.getPracticeTime() > 0) {
|
|
|
|
|
teacher.setPracticeTime(gpTeacher.getPracticeTime());
|
|
|
|
|
}else {
|
|
|
|
|
teacher.setPracticeTime(0L);
|
|
|
|
|
}
|
|
|
|
|
if(gpTeacher.degree != null) {
|
|
|
|
|
teacher.setDegree(gpTeacher.degree);
|
|
|
|
|
}else {
|
|
|
|
|
teacher.setDegree("");
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//teachers.put("practice", practiceCount);
|
|
|
|
|
//teachers.put("practiceMap", practiceMap);
|
|
|
|
|
//teachers.put("genderMap", genderMap);
|
|
|
|
|
teachers.put("gender", genderCount);
|
|
|
|
|
teachers.put("degree", degreeCount);
|
|
|
|
|
teachers.put("info", teachersList);
|
|
|
|
|
teachers.remove("teachers");
|
|
|
|
|
List<GpTeacherVo> copyList = new ArrayList<>(teachersList);
|
|
|
|
|
asyncTeacherService.asyncSavePtTeacherInfos(Collections.unmodifiableList(copyList));
|
|
|
|
|
|
|
|
|
|
}catch (Exception e) {
|
|
|
|
|
throw new ServiceException(ErrorCode.SYSTEM_ERROR.getCode(), "数据转换错误");
|
|
|
|
@ -215,6 +209,119 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
|
return teachers;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<GpTeacherVo> convertToGpTeacherVoList(Map<String, Object> teachers) {
|
|
|
|
|
List<GpTeacherVo> teachersList = new ArrayList<>();
|
|
|
|
|
for (Map.Entry<String, Object> entry : teachers.entrySet()) {
|
|
|
|
|
List<Map<String, Object>> mapList = (List<Map<String, Object>>) entry.getValue();
|
|
|
|
|
for (Map<String, Object> map : mapList) {
|
|
|
|
|
GpTeacherVo teacher = convertToGpTeacherVo(map);
|
|
|
|
|
teachersList.add(teacher);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return teachersList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<GpTeacher> convertToGpTeacherList(Map<String, Object> tBase) {
|
|
|
|
|
List<GpTeacher> gpTeachers = new ArrayList<>();
|
|
|
|
|
for (Map.Entry<String, Object> entry : tBase.entrySet()) {
|
|
|
|
|
if (entry.getKey().equals("teachers")) {
|
|
|
|
|
List<Map<String, Object>> dataList = (List<Map<String, Object>>) entry.getValue();
|
|
|
|
|
for (Map<String, Object> dataMap : dataList) {
|
|
|
|
|
GpTeacher gpTeacher = convertToGpTeacher(dataMap);
|
|
|
|
|
gpTeachers.add(gpTeacher);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return gpTeachers;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void savePtTeacherInfosBatch(List<GpTeacherVo> teachersList) {
|
|
|
|
|
// 预加载版本号
|
|
|
|
|
Map<String, Integer> versionMap = loadExistingVersions(teachersList);
|
|
|
|
|
|
|
|
|
|
List<PtTeacherInfo> ptTeacherInfos = teachersList.stream()
|
|
|
|
|
.filter(t -> t.getId() != null)
|
|
|
|
|
.map(t -> convertToPtTeacherInfo(t, versionMap))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
ptTeacherRepository.saveAll(ptTeacherInfos);
|
|
|
|
|
ptTeacherInfos.forEach(pt -> PT_TEACHER_CACHE.put(pt.getCode(), pt));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Map<String, Integer> loadExistingVersions(List<GpTeacherVo> teachersList) {
|
|
|
|
|
// 收集所有id和code组合
|
|
|
|
|
List<Pair<String, String>> idCodePairs = teachersList.stream()
|
|
|
|
|
.filter(t -> t.getId() != null)
|
|
|
|
|
.map(t -> Pair.of(t.getId(), "PtTeacher-" + t.getId()))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
//将List<Pair<String, String>> 转化为 List<IdCodePair>
|
|
|
|
|
List<IdCodePair> idAndCode = idCodePairs.stream()
|
|
|
|
|
.map(pair -> new IdCodePair(pair.getLeft(), pair.getRight()))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
// 批量查询现有记录的版本号(需自定义Repository方法)
|
|
|
|
|
List<PtTeacherInfo> existingList = ptTeacherRepository.findByIdCodePairs(idAndCode);
|
|
|
|
|
|
|
|
|
|
// 转为Map<code, version>
|
|
|
|
|
return existingList.stream()
|
|
|
|
|
.collect(Collectors.toMap(
|
|
|
|
|
PtTeacherInfo::getCode,
|
|
|
|
|
PtTeacherInfo::getVersion
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private PtTeacherInfo convertToPtTeacherInfo(GpTeacherVo teacher, Map<String, Integer> versionMap) {
|
|
|
|
|
PtTeacherInfo ptTeacherInfo = new PtTeacherInfo();
|
|
|
|
|
String code = "PtTeacher-" + teacher.getId();
|
|
|
|
|
ptTeacherInfo.setPk("PtTeacher");
|
|
|
|
|
ptTeacherInfo.setTtl(-1);
|
|
|
|
|
ptTeacherInfo.setCode(code);
|
|
|
|
|
ptTeacherInfo.setId(teacher.getId());
|
|
|
|
|
ptTeacherInfo.setTmdId(teacher.getId());
|
|
|
|
|
ptTeacherInfo.setName(teacher.getName());
|
|
|
|
|
ptTeacherInfo.setPhone(teacher.getPhone());
|
|
|
|
|
ptTeacherInfo.setEmail(teacher.getEmail());
|
|
|
|
|
ptTeacherInfo.setPicture(teacher.getPicture());
|
|
|
|
|
ptTeacherInfo.setIname(teacher.getIname());
|
|
|
|
|
ptTeacherInfo.setJob(teacher.getJob());
|
|
|
|
|
ptTeacherInfo.setSubjectIds(teacher.getSubjectIds());
|
|
|
|
|
ptTeacherInfo.setSubjectNames(teacher.getSubjectNames());
|
|
|
|
|
ptTeacherInfo.setRoles(teacher.getRoles());
|
|
|
|
|
ptTeacherInfo.setGroups(teacher.getGroups());
|
|
|
|
|
ptTeacherInfo.setNote(teacher.getNote());
|
|
|
|
|
ptTeacherInfo.setDegree(teacher.getDegree());
|
|
|
|
|
ptTeacherInfo.setPracticeTime(teacher.getPracticeTime());
|
|
|
|
|
ptTeacherInfo.setGender(teacher.getGender());
|
|
|
|
|
ptTeacherInfo.setGrade(teacher.getGrade());
|
|
|
|
|
ptTeacherInfo.setPeriodId(teacher.getPeriodId());
|
|
|
|
|
Integer currentVersion = versionMap.getOrDefault(code, 0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 从缓存中获取现有对象
|
|
|
|
|
PtTeacherInfo existingPtTeacherInfo = PT_TEACHER_CACHE.getIfPresent(ptTeacherInfo.getCode());
|
|
|
|
|
if (existingPtTeacherInfo != null) {
|
|
|
|
|
// 比较版本号,如果版本号相同则不需要更新
|
|
|
|
|
if (Objects.equals(existingPtTeacherInfo.getVersion(), currentVersion)) {
|
|
|
|
|
return existingPtTeacherInfo;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//ptTeacherInfo.setVersion(currentVersion + 1);
|
|
|
|
|
|
|
|
|
|
// 设置版本号
|
|
|
|
|
ptTeacherInfo.setVersion(getNextVersion(ptTeacherInfo.getId(), ptTeacherInfo.getCode()));
|
|
|
|
|
|
|
|
|
|
return ptTeacherInfo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Integer getNextVersion(String id,String code) {
|
|
|
|
|
PtTeacherInfo existingPtTeacherInfo = ptTeacherRepository.findByIdAndCode(id,code);
|
|
|
|
|
if (existingPtTeacherInfo != null) {
|
|
|
|
|
return existingPtTeacherInfo.getVersion() + 1;
|
|
|
|
|
}
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static @NotNull Map<String, Integer> getStringIntegerMap(TeacherDto teacherDto, List<GpTeacher> gpTeachers) {
|
|
|
|
|
Map<String,Integer> practiceCount = new HashMap<>();
|
|
|
|
|
for (GpTeacher gpTeacher : gpTeachers) {
|
|
|
|
@ -1281,6 +1388,41 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void update(TeacherDto teacherDto) {
|
|
|
|
|
try {
|
|
|
|
|
String id = teacherDto.getTmdId();
|
|
|
|
|
String code = String.format(PK.PTTEACHER, id);
|
|
|
|
|
PtTeacherInfo ptTeacherInfo = ptTeacherRepository.findByIdAndCode(id, code);
|
|
|
|
|
// 局部更新
|
|
|
|
|
CosmosPatchOperations operations = CosmosPatchOperations.create();
|
|
|
|
|
if (ptTeacherInfo != null) {
|
|
|
|
|
operations.set("/identity", teacherDto.getIdentity());
|
|
|
|
|
}
|
|
|
|
|
ptTeacherRepository.save(id, PK.buildOf(PK.PTTEACHER, teacherDto.getTmdId()), PtTeacherInfo.class, operations);
|
|
|
|
|
} catch (Exception ex) {
|
|
|
|
|
throw new ServiceException(ErrorCode.SYSTEM_ERROR.getCode(), "数据更新失败: " + ex.getMessage());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String, Object> findIdentityByTmdId(TeacherDto teacherDto) {
|
|
|
|
|
try {
|
|
|
|
|
String id = teacherDto.getTmdId();
|
|
|
|
|
String code = String.format(PK.PTTEACHER, id);
|
|
|
|
|
PtTeacherInfo ptTeacherInfo = ptTeacherRepository.findByIdAndCode(id, code);
|
|
|
|
|
if (ptTeacherInfo != null) {
|
|
|
|
|
Map<String, Object> result = new HashMap<>();
|
|
|
|
|
result.put("tmdId", id);
|
|
|
|
|
result.put("identity", ptTeacherInfo.getIdentity());
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception ex) {
|
|
|
|
|
throw new ServiceException(ErrorCode.SYSTEM_ERROR.getCode(), "数据查询失败: " + ex.getMessage());
|
|
|
|
|
}
|
|
|
|
|
return Collections.emptyMap();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
|
|
// 引入缓存,需根据实际情况配置大小和过期时间 每次服务重启时 缓存会清空
|
|
|
|
|
private static final Cache<String, Map<String, Object>> REQUEST_CACHE = CacheBuilder.newBuilder()
|
|
|
|
|