重构主页看版的近日事项
This commit is contained in:
parent
beaf24852f
commit
527b50ba87
|
@ -5,14 +5,14 @@ spring:
|
||||||
driverClassName: com.mysql.cj.jdbc.Driver
|
driverClassName: com.mysql.cj.jdbc.Driver
|
||||||
druid:
|
druid:
|
||||||
# 主库数据源
|
# 主库数据源
|
||||||
master:
|
|
||||||
url: jdbc:mysql://192.168.1.165:3306/zeoa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
|
||||||
username: zeoa
|
|
||||||
password: dHahLWNYB7tD2Mia
|
|
||||||
# master:
|
# master:
|
||||||
# url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
# url: jdbc:mysql://192.168.1.165:3306/zeoa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||||
# username: root
|
# username: zeoa
|
||||||
# password: zero
|
# password: dHahLWNYB7tD2Mia
|
||||||
|
master:
|
||||||
|
url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||||
|
username: root
|
||||||
|
password: zero
|
||||||
# 从库数据源
|
# 从库数据源
|
||||||
slave:
|
slave:
|
||||||
# 从数据源开关/默认关闭
|
# 从数据源开关/默认关闭
|
||||||
|
|
|
@ -7,8 +7,8 @@ ruoyi:
|
||||||
# 版权年份
|
# 版权年份
|
||||||
copyrightYear: 2024
|
copyrightYear: 2024
|
||||||
# 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
|
# 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
|
||||||
#profile: D:/zeroerr/uploadPath
|
profile: D:/zeroerr/uploadPath
|
||||||
profile: /home/zeroerr_oa/uploadPath
|
#profile: /home/zeroerr_oa/uploadPath
|
||||||
# 获取ip地址开关
|
# 获取ip地址开关
|
||||||
addressEnabled: false
|
addressEnabled: false
|
||||||
# 验证码类型 math 数字计算 char 字符验证
|
# 验证码类型 math 数字计算 char 字符验证
|
||||||
|
@ -69,15 +69,15 @@ spring:
|
||||||
# redis 配置
|
# redis 配置
|
||||||
redis:
|
redis:
|
||||||
# 地址
|
# 地址
|
||||||
host: 192.168.1.189
|
#host: 192.168.1.189
|
||||||
#host: localhost
|
host: localhost
|
||||||
# 端口,默认为6379
|
# 端口,默认为6379
|
||||||
port: 6379
|
port: 6379
|
||||||
# 数据库索引
|
# 数据库索引
|
||||||
database: 0
|
database: 0
|
||||||
# 密码
|
# 密码
|
||||||
password: 123456
|
#password: 123456
|
||||||
#password:
|
password:
|
||||||
# 连接超时时间
|
# 连接超时时间
|
||||||
timeout: 10s
|
timeout: 10s
|
||||||
lettuce:
|
lettuce:
|
||||||
|
|
|
@ -26,7 +26,10 @@ import org.springframework.web.bind.annotation.RestController;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.LocalTime;
|
||||||
import java.time.YearMonth;
|
import java.time.YearMonth;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.temporal.TemporalAdjusters;
|
import java.time.temporal.TemporalAdjusters;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
|
@ -288,9 +291,9 @@ public class HomePageController extends BaseController {
|
||||||
resumeStatVO.setPostIdsList(postIdsList);
|
resumeStatVO.setPostIdsList(postIdsList);
|
||||||
|
|
||||||
//根据postIdsList,封装里面每个岗位的到面数(初试数)、终试数、入职数。
|
//根据postIdsList,封装里面每个岗位的到面数(初试数)、终试数、入职数。
|
||||||
if(!CollectionUtils.isEmpty(postIdsList)){
|
if (!CollectionUtils.isEmpty(postIdsList)) {
|
||||||
postIdsList.forEach(
|
postIdsList.forEach(
|
||||||
postId->{
|
postId -> {
|
||||||
//寻找该岗位该月份的实际到面人数(初面人数)
|
//寻找该岗位该月份的实际到面人数(初面人数)
|
||||||
List<ResumeFollowRecord> filteredFirstReachList = resumeFollowRecordActualArrivedList.stream()
|
List<ResumeFollowRecord> filteredFirstReachList = resumeFollowRecordActualArrivedList.stream()
|
||||||
.filter(record -> record.getPostId().equals(postId))
|
.filter(record -> record.getPostId().equals(postId))
|
||||||
|
@ -311,7 +314,7 @@ public class HomePageController extends BaseController {
|
||||||
}
|
}
|
||||||
resumeStatVO.setPostArriveCounts(postArriveCounts);
|
resumeStatVO.setPostArriveCounts(postArriveCounts);
|
||||||
resumeStatVO.setPostFinalCounts(postFinalCounts);
|
resumeStatVO.setPostFinalCounts(postFinalCounts);
|
||||||
//resumeStatVO.setPostEntryCounts(postEntryCounts);
|
resumeStatVO.setPostEntryCounts(postEntryCounts);
|
||||||
|
|
||||||
|
|
||||||
List<ResumeStatVO.FunnelData> funnelDataList = new ArrayList<>();
|
List<ResumeStatVO.FunnelData> funnelDataList = new ArrayList<>();
|
||||||
|
@ -467,66 +470,202 @@ public class HomePageController extends BaseController {
|
||||||
//封装公告内容
|
//封装公告内容
|
||||||
List<AnnouncementDTO> announcementDTOList = new ArrayList<>();
|
List<AnnouncementDTO> announcementDTOList = new ArrayList<>();
|
||||||
|
|
||||||
// 获取近七天的日期范围
|
// 获取从昨天开始的近七天的日期范围
|
||||||
LocalDate now = LocalDate.now();
|
LocalDate yesterday = LocalDate.now().plusDays(-1);
|
||||||
LocalDate fiveDaysLater = now.plusDays(7);
|
LocalDate plusDays = yesterday.plusDays(7);
|
||||||
|
|
||||||
// 获取近五天预计入职的人,并按时间分类
|
// 获取近七天预计入职的人,并按时间分类
|
||||||
Map<LocalDate, List<EntryManage>> groupByJoinDate = entryManageService.getListByWeek(now, fiveDaysLater)
|
Map<LocalDate, List<EntryManage>> groupByJoinDate = entryManageService.getListByWeek(yesterday, plusDays)
|
||||||
.stream().collect(Collectors.groupingBy(EntryManage::getJoinDate));
|
.stream().collect(Collectors.groupingBy(EntryManage::getJoinDate));
|
||||||
|
|
||||||
// 获取近五天将要面试的人,并按时间分类
|
// 获取近七天将要初试的人,并按时间分类
|
||||||
Map<LocalDate, List<ResumeFollowRecord>> groupByFirstDate = resumeFollowRecordService.getListByWeek(now, fiveDaysLater)
|
List<ResumeFollowRecord> resumeFollowRecordList1 = resumeFollowRecordService.getFirstInterviewList(yesterday, plusDays);
|
||||||
.stream().collect(Collectors.groupingBy(ResumeFollowRecord::getFirstDate));
|
Map<LocalDate, List<ResumeFollowRecord>> collect1 = resumeFollowRecordList1.stream().collect(Collectors.groupingBy(record -> record.getFirstDate().toLocalDate()));
|
||||||
|
|
||||||
|
// 获取近七天将要终试的人,并按时间分类
|
||||||
|
List<ResumeFollowRecord> resumeFollowRecordList2 = resumeFollowRecordService.getFinalInterviewList(yesterday, plusDays);
|
||||||
|
Map<LocalDate, List<ResumeFollowRecord>> collect2 = resumeFollowRecordList2.stream().collect(Collectors.groupingBy(record -> record.getFinalDate().toLocalDate()));
|
||||||
|
|
||||||
|
// 获取近七天将要初试/终试的人,并按时间分类
|
||||||
|
List<ResumeFollowRecord> resumeFollowRecordList3 = resumeFollowRecordService.getFirstAndFinalInterviewList(yesterday, plusDays);
|
||||||
|
Map<LocalDate, List<ResumeFollowRecord>> collect3 = resumeFollowRecordList3.stream().collect(Collectors.groupingBy(record -> record.getFirstDate().toLocalDate()));
|
||||||
|
|
||||||
|
// 处理初试
|
||||||
|
processAnnouncements(announcementDTOList, collect1, plusDays, "first");
|
||||||
|
|
||||||
|
// 处理终试
|
||||||
|
processAnnouncements(announcementDTOList, collect2, plusDays, "final");
|
||||||
|
|
||||||
|
// 处理初/终试
|
||||||
|
processAnnouncements(announcementDTOList, collect3, plusDays, "mix");
|
||||||
|
|
||||||
// 处理预计入职的公告
|
// 处理预计入职的公告
|
||||||
processAnnouncements(announcementDTOList, groupByJoinDate, "预计入职候选人", AnnouncementDTO::setContentEntry);
|
processAnnouncements(announcementDTOList, groupByJoinDate, plusDays, "entry");
|
||||||
|
|
||||||
// 处理面试公告
|
|
||||||
processAnnouncements(announcementDTOList, groupByFirstDate, "面试候选人", AnnouncementDTO::setContentInterview);
|
|
||||||
|
|
||||||
// 按日期排序
|
// 按日期排序
|
||||||
announcementDTOList.sort(Comparator.comparing(AnnouncementDTO::getDate));
|
announcementDTOList.sort(Comparator.comparing(AnnouncementDTO::getDate));
|
||||||
|
//获取到每个List<AnnouncementDTO> announcementDTOList 里的 AnnouncementDTO 的private List<AnnouncementDTO.AnnouncementInterview> announcementInterviewList;,announcementInterviewList的interviewTime字段进行时间排序
|
||||||
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
|
||||||
|
|
||||||
|
for (AnnouncementDTO announcement : announcementDTOList) {
|
||||||
|
List<AnnouncementDTO.AnnouncementInterview> interviewList = announcement.getAnnouncementInterviewList();
|
||||||
|
if (interviewList != null) {
|
||||||
|
Collections.sort(interviewList, Comparator.comparing(interview -> LocalTime.parse(interview.getInterviewTime(), formatter)));
|
||||||
|
}
|
||||||
|
}
|
||||||
return AjaxResult.success(announcementDTOList);
|
return AjaxResult.success(announcementDTOList);
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T> void processAnnouncements(List<AnnouncementDTO> announcementDTOList, Map<LocalDate, List<T>> groupedData, String title, BiConsumer<AnnouncementDTO, String> setContentMethod) {
|
private <T> void processAnnouncements(List<AnnouncementDTO> announcementDTOList, Map<LocalDate, List<T>> groupedData, LocalDate plusDay, String tip) {
|
||||||
int count = 1;
|
int count = 1;
|
||||||
for (Map.Entry<LocalDate, List<T>> entry : groupedData.entrySet()) {
|
for (Map.Entry<LocalDate, List<T>> entry : groupedData.entrySet()) {
|
||||||
LocalDate date = entry.getKey();
|
LocalDate date = entry.getKey();
|
||||||
List<T> dataList = entry.getValue();
|
List<T> dataList = entry.getValue();
|
||||||
|
//如果是处理面试的人
|
||||||
Optional<AnnouncementDTO> existingAnnouncement = announcementDTOList.stream()
|
if (!tip.equals("entry")) {
|
||||||
.filter(announcement -> date.equals(announcement.getDate()))
|
//找announcementDTOList有没有同一天的,如果有,则在该数据集里处理数据,如果没有就新建
|
||||||
.findFirst();
|
Optional<AnnouncementDTO> result = announcementDTOList.stream()
|
||||||
|
.filter(announcement -> date.equals(announcement.getDate()))
|
||||||
StringBuilder content = new StringBuilder();
|
.findFirst();
|
||||||
for (T data : dataList) {
|
//如果存在则
|
||||||
if (data instanceof EntryManage) {
|
AnnouncementDTO announcementDTO;
|
||||||
EntryManage entryManage = (EntryManage) data;
|
List<AnnouncementDTO.AnnouncementInterview> nodeList = new ArrayList<>();
|
||||||
content.append(entryManage.getUserName()).append(" ").append(entryManage.getPostName()).append(";");
|
if (result.isPresent()) {
|
||||||
} else if (data instanceof ResumeFollowRecord) {
|
announcementDTO = result.get();
|
||||||
ResumeFollowRecord resumeFollowRecord = (ResumeFollowRecord) data;
|
nodeList = handleNodeList(dataList, tip);
|
||||||
content.append(resumeFollowRecord.getName()).append(" ").append(resumeFollowRecord.getPostName()).append(";");
|
announcementDTO.getAnnouncementInterviewList().addAll(nodeList);
|
||||||
|
// announcementDTO更新回去
|
||||||
|
for (int i = 0; i < announcementDTOList.size(); i++) {
|
||||||
|
if (announcementDTOList.get(i).getDate().equals(announcementDTO.getDate())) {
|
||||||
|
announcementDTOList.set(i, announcementDTO);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
announcementDTO = new AnnouncementDTO();
|
||||||
|
announcementDTO.setId(count++);
|
||||||
|
announcementDTO.setDate(date);
|
||||||
|
nodeList = handleNodeList(dataList, tip);
|
||||||
|
announcementDTO.setAnnouncementInterviewList(nodeList);
|
||||||
|
announcementDTOList.add(announcementDTO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//如果是处理预计入职的人
|
||||||
|
else {
|
||||||
|
//先找找announcementDTOList有没有同一天的
|
||||||
|
Optional<AnnouncementDTO> existingAnnouncement = announcementDTOList.stream()
|
||||||
|
.filter(announcement -> date.equals(announcement.getDate()))
|
||||||
|
.findFirst();
|
||||||
|
//如果存在则取出来封装入职人的信息
|
||||||
|
if (existingAnnouncement.isPresent()) {
|
||||||
|
AnnouncementDTO announcementDTO = existingAnnouncement.get();
|
||||||
|
List<AnnouncementDTO.AnnouncementEntry> announcementEntryList = new ArrayList<>();
|
||||||
|
for (T data : dataList) {
|
||||||
|
AnnouncementDTO.AnnouncementEntry announcementEntry = new AnnouncementDTO.AnnouncementEntry();
|
||||||
|
EntryManage entryManage = (EntryManage) data;
|
||||||
|
announcementEntry.setEntryName(entryManage.getUserName());
|
||||||
|
announcementEntry.setEntryPostName(entryManage.getPostName());
|
||||||
|
announcementEntry.setEntryDept(entryManage.getDeptName());
|
||||||
|
announcementEntry.setEntryHrName(entryManage.getHrName());
|
||||||
|
announcementEntryList.add(announcementEntry);
|
||||||
|
}
|
||||||
|
announcementDTO.setAnnouncementEntryList(announcementEntryList);
|
||||||
|
|
||||||
if (existingAnnouncement.isPresent()) {
|
// announcementDTO更新回去
|
||||||
AnnouncementDTO announcementDTO = existingAnnouncement.get();
|
for (int i = 0; i < announcementDTOList.size(); i++) {
|
||||||
setContentMethod.accept(announcementDTO, content.toString());
|
if (announcementDTOList.get(i).getDate().equals(announcementDTO.getDate())) {
|
||||||
} else {
|
announcementDTOList.set(i, announcementDTO);
|
||||||
AnnouncementDTO announcementDTO = new AnnouncementDTO();
|
break;
|
||||||
announcementDTO.setId(count++);
|
}
|
||||||
announcementDTO.setDate(date);
|
}
|
||||||
announcementDTO.setTitleEntry("预计入职候选人".equals(title) ? title : "预计入职候选人");
|
}
|
||||||
announcementDTO.setContentEntry("预计入职候选人".equals(title) ? content.toString() : "无");
|
//如果不存在,则新增所有数据
|
||||||
announcementDTO.setTitleInterview("面试候选人".equals(title) ? title : "面试候选人");
|
else {
|
||||||
announcementDTO.setContentInterview("面试候选人".equals(title) ? content.toString() : "无");
|
AnnouncementDTO announcementDTO = new AnnouncementDTO();
|
||||||
announcementDTOList.add(announcementDTO);
|
announcementDTO.setId(count++);
|
||||||
|
announcementDTO.setDate(date);
|
||||||
|
List<AnnouncementDTO.AnnouncementEntry> announcementEntryList = new ArrayList<>();
|
||||||
|
for (T data : dataList) {
|
||||||
|
AnnouncementDTO.AnnouncementEntry announcementEntry = new AnnouncementDTO.AnnouncementEntry();
|
||||||
|
EntryManage entryManage = (EntryManage) data;
|
||||||
|
announcementEntry.setEntryName(entryManage.getUserName());
|
||||||
|
announcementEntry.setEntryPostName(entryManage.getPostName());
|
||||||
|
announcementEntry.setEntryDept(entryManage.getDeptName());
|
||||||
|
announcementEntry.setEntryHrName(entryManage.getHrName());
|
||||||
|
announcementEntryList.add(announcementEntry);
|
||||||
|
}
|
||||||
|
announcementDTO.setAnnouncementEntryList(announcementEntryList);
|
||||||
|
announcementDTOList.add(announcementDTO);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private <T> List<AnnouncementDTO.AnnouncementInterview> handleNodeList(List<T> dataList, String tip) {
|
||||||
|
List<AnnouncementDTO.AnnouncementInterview> nodeList = new ArrayList<>();
|
||||||
|
for (T data : dataList) {
|
||||||
|
AnnouncementDTO.AnnouncementInterview announcementNode = new AnnouncementDTO.AnnouncementInterview();
|
||||||
|
ResumeFollowRecord resumeFollowRecord = (ResumeFollowRecord) data;
|
||||||
|
//填入某日期内某个面试候选人的姓名
|
||||||
|
announcementNode.setInterviewName(resumeFollowRecord.getName());
|
||||||
|
//填入某日期内某个面试候选人的岗位
|
||||||
|
announcementNode.setInterviewPostName(resumeFollowRecord.getPostName());
|
||||||
|
//填入某日期内某个面试候选人的岗位负责招聘的hr
|
||||||
|
announcementNode.setInterviewHrName(resumeFollowRecord.getHrName());
|
||||||
|
if (resumeFollowRecord.getFirstPass() != null) {
|
||||||
|
if (resumeFollowRecord.getFirstPass().equals("1")) {
|
||||||
|
announcementNode.setInterviewFirstResult("通过");
|
||||||
|
} else if (resumeFollowRecord.getFirstPass().equals("0")) {
|
||||||
|
announcementNode.setInterviewFirstResult("淘汰");
|
||||||
|
} else if (resumeFollowRecord.getFirstPass().equals("2")) {
|
||||||
|
announcementNode.setInterviewFirstResult("待定");
|
||||||
|
}
|
||||||
|
//如果初试有日期,但是未到面,则视为放弃
|
||||||
|
else if(resumeFollowRecord.getFirstDate()!=null ){
|
||||||
|
if(resumeFollowRecord.getFirstReach().equals("0")|| resumeFollowRecord.getFirstReach().isEmpty()){
|
||||||
|
announcementNode.setInterviewFirstResult("放弃");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (resumeFollowRecord.getFinalPass() != null) {
|
||||||
|
if (resumeFollowRecord.getFinalPass().equals("1")) {
|
||||||
|
announcementNode.setInterviewFinalResult("通过");
|
||||||
|
} else if (resumeFollowRecord.getFinalPass().equals("0")) {
|
||||||
|
announcementNode.setInterviewFinalResult("淘汰");
|
||||||
|
} else if (resumeFollowRecord.getFinalPass().equals("2")) {
|
||||||
|
announcementNode.setInterviewFinalResult("待定");
|
||||||
|
}else if(resumeFollowRecord.getFinalDate()!=null ){
|
||||||
|
if(resumeFollowRecord.getFinalReach().equals("0")|| resumeFollowRecord.getFinalReach().isEmpty()){
|
||||||
|
announcementNode.setInterviewFinalResult("放弃");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tip.equals("first")) {
|
||||||
|
//面试-时间
|
||||||
|
announcementNode.setInterviewTime(getFormattedTime(resumeFollowRecord.getFirstDate()));
|
||||||
|
//面试-状态
|
||||||
|
announcementNode.setInterviewType("初试");
|
||||||
|
} else if (tip.equals("final")) {
|
||||||
|
//面试-时间
|
||||||
|
announcementNode.setInterviewTime(getFormattedTime(resumeFollowRecord.getFinalDate()));
|
||||||
|
//面试-状态
|
||||||
|
announcementNode.setInterviewType("终试");
|
||||||
|
} else if (tip.equals("mix")) {
|
||||||
|
//面试-时间
|
||||||
|
announcementNode.setInterviewTime(getFormattedTime(resumeFollowRecord.getFirstDate()));
|
||||||
|
//面试-状态
|
||||||
|
announcementNode.setInterviewType("初/终试");
|
||||||
|
}
|
||||||
|
nodeList.add(announcementNode);
|
||||||
|
}
|
||||||
|
return nodeList;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getFormattedTime(LocalDateTime dateTime) {
|
||||||
|
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm");
|
||||||
|
return dateTime.format(timeFormatter);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,23 +49,23 @@ public class RecruitStructureController extends BaseController {
|
||||||
public AjaxResult list(RecruitStructure node)
|
public AjaxResult list(RecruitStructure node)
|
||||||
{
|
{
|
||||||
List<RecruitStructure> nodes = recruitStructureService.selectNodeList(node);
|
List<RecruitStructure> nodes = recruitStructureService.selectNodeList(node);
|
||||||
if(!CollectionUtils.isEmpty(nodes)){
|
// if(!CollectionUtils.isEmpty(nodes)){
|
||||||
nodes.forEach(
|
// nodes.forEach(
|
||||||
one->{
|
// one->{
|
||||||
//组织节点的类型(部门:0;岗位:1;其他:2)
|
// //组织节点的类型(部门:0;岗位:1;其他:2)
|
||||||
if(one.getType()!=null&&one.getType()==1){
|
// if(one.getType()!=null&&one.getType()==1){
|
||||||
//只有type=1,也就是为岗位的时候,这里有数据。(未申请:0 ;申请中:1 ;已招聘:2;招聘中:3;取消招聘:4)
|
// //只有type=1,也就是为岗位的时候,这里有数据。(未申请:0 ;申请中:1 ;已招聘:2;招聘中:3;取消招聘:4)
|
||||||
if(one.getPostType()==0){
|
// if(one.getPostType()==0){
|
||||||
one.setNodeName(one.getNodeName()+"|未申请");
|
// one.setNodeName(one.getNodeName()+"|未申请");
|
||||||
}else if(one.getPostType()==1){
|
// }else if(one.getPostType()==1){
|
||||||
one.setNodeName(one.getNodeName()+"|申请中");
|
// one.setNodeName(one.getNodeName()+"|申请中");
|
||||||
}else if(one.getPostType()==3){
|
// }else if(one.getPostType()==3){
|
||||||
one.setNodeName(one.getNodeName()+"|招聘中");
|
// one.setNodeName(one.getNodeName()+"|招聘中");
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
);
|
// );
|
||||||
}
|
// }
|
||||||
return success(nodes);
|
return success(nodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,10 +2,12 @@ package cn.zeroerr.domain.dto;
|
||||||
|
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import io.swagger.models.auth.In;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@ApiModel
|
@ApiModel
|
||||||
|
@ -17,15 +19,54 @@ public class AnnouncementDTO {
|
||||||
@ApiModelProperty(value = "日期")
|
@ApiModelProperty(value = "日期")
|
||||||
private LocalDate date;
|
private LocalDate date;
|
||||||
|
|
||||||
@ApiModelProperty(value = "预计入职标题")
|
@ApiModelProperty(value = "面试明细")
|
||||||
private String titleEntry;
|
private List<AnnouncementDTO.AnnouncementInterview> announcementInterviewList;
|
||||||
|
|
||||||
@ApiModelProperty(value = "预计入职公告内容")
|
@ApiModelProperty(value = "入职明细")
|
||||||
private String contentEntry;
|
private List<AnnouncementDTO.AnnouncementEntry> announcementEntryList;
|
||||||
|
|
||||||
@ApiModelProperty(value = "面试标题")
|
@Data
|
||||||
private String titleInterview;
|
@Accessors(chain = true)
|
||||||
|
@ApiModel
|
||||||
|
public static class AnnouncementInterview {
|
||||||
|
@ApiModelProperty(value = "面试-时间 HH:ss")
|
||||||
|
private String interviewTime;
|
||||||
|
|
||||||
@ApiModelProperty(value = "面试公告内容")
|
@ApiModelProperty(value = "面试-姓名")
|
||||||
private String contentInterview;
|
private String interviewName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "面试-状态")
|
||||||
|
private String interviewType;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "面试-岗位")
|
||||||
|
private String interviewPostName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "面试-招聘hr")
|
||||||
|
private String interviewHrName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "面试-初试")
|
||||||
|
private String interviewFirstResult;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "面试-终试")
|
||||||
|
private String interviewFinalResult;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
|
@ApiModel
|
||||||
|
public static class AnnouncementEntry {
|
||||||
|
@ApiModelProperty(value = "预计入职-姓名")
|
||||||
|
private String entryName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "预计入职-部门")
|
||||||
|
private String entryDept;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "预计入职-岗位")
|
||||||
|
private String entryPostName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "面试-招聘hr")
|
||||||
|
private String entryHrName;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,12 +130,12 @@ public class EntryManage implements Serializable {
|
||||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
private LocalDateTime updateTime;
|
private LocalDateTime updateTime;
|
||||||
|
|
||||||
@TableField(value = "file")
|
@TableField(value = "file",updateStrategy = FieldStrategy.IGNORED)
|
||||||
@Excel(name = "入职周知", cellType = Excel.ColumnType.TEXT)
|
@Excel(name = "入职周知", cellType = Excel.ColumnType.TEXT)
|
||||||
private String file;
|
private String file;
|
||||||
|
|
||||||
|
|
||||||
@TableField(value = "dossier")
|
@TableField(value = "dossier",updateStrategy = FieldStrategy.IGNORED)
|
||||||
@Excel(name = "档案", cellType = Excel.ColumnType.TEXT)
|
@Excel(name = "档案", cellType = Excel.ColumnType.TEXT)
|
||||||
private String dossier;
|
private String dossier;
|
||||||
|
|
||||||
|
|
|
@ -132,10 +132,10 @@ public class ResumeFollowRecord implements Serializable {
|
||||||
* 初试日期
|
* 初试日期
|
||||||
*/
|
*/
|
||||||
@TableField(value = "first_date",updateStrategy = FieldStrategy.IGNORED)
|
@TableField(value = "first_date",updateStrategy = FieldStrategy.IGNORED)
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
|
||||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
|
||||||
@Excel(name = "初试日期", width = 30, dateFormat = "yyyy-MM-dd")
|
@Excel(name = "初试日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm")
|
||||||
private LocalDate firstDate;
|
private LocalDateTime firstDate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 初试是否到面
|
* 初试是否到面
|
||||||
|
@ -198,10 +198,10 @@ public class ResumeFollowRecord implements Serializable {
|
||||||
* 终试日期
|
* 终试日期
|
||||||
*/
|
*/
|
||||||
@TableField(value = "final_date",updateStrategy = FieldStrategy.IGNORED)
|
@TableField(value = "final_date",updateStrategy = FieldStrategy.IGNORED)
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
|
||||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
|
||||||
@Excel(name = "终试日期", width = 30, dateFormat = "yyyy-MM-dd")
|
@Excel(name = "终试日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm")
|
||||||
private LocalDate finalDate;
|
private LocalDateTime finalDate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 终试是否到面
|
* 终试是否到面
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
package cn.zeroerr.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel
|
||||||
|
public class AnnouncementVO {
|
||||||
|
@ApiModelProperty(value = "面试候选人list")
|
||||||
|
List<AnnouncementVO.InterviewCandidates> InterviewCandidatesList;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "预计入职的list")
|
||||||
|
List<AnnouncementVO.ExpectedEntry> ExpectedEntryList;
|
||||||
|
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
|
@ApiModel
|
||||||
|
public static class InterviewCandidates {
|
||||||
|
@ApiModelProperty("时间")
|
||||||
|
private String timeContent;
|
||||||
|
|
||||||
|
@ApiModelProperty("姓名")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@ApiModelProperty("状态")
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位")
|
||||||
|
private String postName;
|
||||||
|
|
||||||
|
@ApiModelProperty("初试结果")
|
||||||
|
private String firstResult;
|
||||||
|
|
||||||
|
@ApiModelProperty("终试结果")
|
||||||
|
private String finalResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
|
@ApiModel
|
||||||
|
public static class ExpectedEntry {
|
||||||
|
@ApiModelProperty("姓名")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位")
|
||||||
|
private String post;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package cn.zeroerr.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel
|
||||||
|
public class StructureMapVO {
|
||||||
|
|
||||||
|
@ApiModelProperty("节点id")
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
@ApiModelProperty("部门名字")
|
||||||
|
private String label;
|
||||||
|
}
|
|
@ -31,6 +31,12 @@ public interface ResumeFollowRecordMapper extends BaseMapper<ResumeFollowRecord>
|
||||||
List<ResumeFollowRecord> getBySelectMonth(@Param("hrName") String hrName, @Param("firstDay") LocalDate firstDay, @Param("lastDay") LocalDate lastDay, @Param("i") int i);
|
List<ResumeFollowRecord> getBySelectMonth(@Param("hrName") String hrName, @Param("firstDay") LocalDate firstDay, @Param("lastDay") LocalDate lastDay, @Param("i") int i);
|
||||||
|
|
||||||
List<ResumeFollowRecord> getListByWeek(@Param("now") LocalDate now, @Param("plusDays") LocalDate plusDays);
|
List<ResumeFollowRecord> getListByWeek(@Param("now") LocalDate now, @Param("plusDays") LocalDate plusDays);
|
||||||
|
|
||||||
|
List<ResumeFollowRecord> getFirstInterviewList(@Param("now") LocalDate yesterday, @Param("plusDays") LocalDate plusDays);
|
||||||
|
|
||||||
|
List<ResumeFollowRecord> getFirstAndFinalInterviewList(@Param("now")LocalDate yesterday, @Param("plusDays")LocalDate plusDays);
|
||||||
|
|
||||||
|
List<ResumeFollowRecord> getFinalInterviewList(@Param("now")LocalDate yesterday, @Param("plusDays")LocalDate plusDays);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -28,4 +28,10 @@ public interface ResumeFollowRecordService extends IService<ResumeFollowRecord>
|
||||||
List<ResumeFollowRecord> getBySelectMonth(String hrName, LocalDate firstDay, LocalDate lastDay, int i);
|
List<ResumeFollowRecord> getBySelectMonth(String hrName, LocalDate firstDay, LocalDate lastDay, int i);
|
||||||
|
|
||||||
List<ResumeFollowRecord> getListByWeek(LocalDate now, LocalDate plusDays);
|
List<ResumeFollowRecord> getListByWeek(LocalDate now, LocalDate plusDays);
|
||||||
|
|
||||||
|
List<ResumeFollowRecord> getFirstInterviewList(LocalDate yesterday, LocalDate plusDays);
|
||||||
|
|
||||||
|
List<ResumeFollowRecord> getFirstAndFinalInterviewList(LocalDate yesterday, LocalDate plusDays);
|
||||||
|
|
||||||
|
List<ResumeFollowRecord> getFinalInterviewList(LocalDate yesterday, LocalDate plusDays);
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,6 +58,21 @@ public class ResumeFollowRecordServiceImpl extends ServiceImpl<ResumeFollowRecor
|
||||||
return resumeFollowRecordMapper.getListByWeek(now,plusDays);
|
return resumeFollowRecordMapper.getListByWeek(now,plusDays);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ResumeFollowRecord> getFirstInterviewList(LocalDate yesterday, LocalDate plusDays) {
|
||||||
|
return resumeFollowRecordMapper.getFirstInterviewList(yesterday,plusDays);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ResumeFollowRecord> getFirstAndFinalInterviewList(LocalDate yesterday, LocalDate plusDays) {
|
||||||
|
return resumeFollowRecordMapper.getFirstAndFinalInterviewList(yesterday,plusDays);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ResumeFollowRecord> getFinalInterviewList(LocalDate yesterday, LocalDate plusDays) {
|
||||||
|
return resumeFollowRecordMapper.getFinalInterviewList(yesterday,plusDays);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
<result property="isPass" column="is_pass" jdbcType="VARCHAR"/>
|
<result property="isPass" column="is_pass" jdbcType="VARCHAR"/>
|
||||||
<result property="invitationDate" column="invitation_date" jdbcType="DATE"/>
|
<result property="invitationDate" column="invitation_date" jdbcType="DATE"/>
|
||||||
<result property="rejectedReason" column="rejected_reason" jdbcType="VARCHAR"/>
|
<result property="rejectedReason" column="rejected_reason" jdbcType="VARCHAR"/>
|
||||||
<result property="firstDate" column="first_date" jdbcType="DATE"/>
|
<result property="firstDate" column="first_date"/>
|
||||||
<result property="firstReach" column="first_reach" jdbcType="VARCHAR"/>
|
<result property="firstReach" column="first_reach" jdbcType="VARCHAR"/>
|
||||||
<result property="firstTest" column="first_test" jdbcType="VARCHAR"/>
|
<result property="firstTest" column="first_test" jdbcType="VARCHAR"/>
|
||||||
<result property="firstInterviewerIds" column="first_interviewer_ids" jdbcType="VARCHAR"/>
|
<result property="firstInterviewerIds" column="first_interviewer_ids" jdbcType="VARCHAR"/>
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
<result property="secondReach" column="second_reach" jdbcType="VARCHAR"/>
|
<result property="secondReach" column="second_reach" jdbcType="VARCHAR"/>
|
||||||
<result property="secondInterviewerIds" column="second_interviewer_ids" jdbcType="VARCHAR"/>
|
<result property="secondInterviewerIds" column="second_interviewer_ids" jdbcType="VARCHAR"/>
|
||||||
<result property="secondPass" column="second_pass" jdbcType="VARCHAR"/>
|
<result property="secondPass" column="second_pass" jdbcType="VARCHAR"/>
|
||||||
<result property="finalDate" column="final_date" jdbcType="DATE"/>
|
<result property="finalDate" column="final_date"/>
|
||||||
<result property="finalReach" column="final_reach" jdbcType="VARCHAR"/>
|
<result property="finalReach" column="final_reach" jdbcType="VARCHAR"/>
|
||||||
<result property="finalInterviewerIds" column="final_interviewer_ids" jdbcType="VARCHAR"/>
|
<result property="finalInterviewerIds" column="final_interviewer_ids" jdbcType="VARCHAR"/>
|
||||||
<result property="finalPass" column="final_pass" jdbcType="VARCHAR"/>
|
<result property="finalPass" column="final_pass" jdbcType="VARCHAR"/>
|
||||||
|
@ -189,10 +189,48 @@
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="getListByWeek" resultMap="BaseResultMap">
|
<select id="getListByWeek" resultMap="BaseResultMap">
|
||||||
select <include refid="Base_Column_List"/>
|
SELECT <include refid="Base_Column_List"/>
|
||||||
from resume_follow_record
|
FROM resume_follow_record
|
||||||
where first_date is not null
|
WHERE (
|
||||||
<if test="now!=null"> and first_date <![CDATA[>=]]> #{now}</if>
|
(final_date IS NULL AND CAST(first_date AS DATE) BETWEEN #{now} AND #{plusDays})
|
||||||
<if test="plusDays!=null"> and first_date <![CDATA[<=]]> #{plusDays}</if>
|
OR
|
||||||
|
(final_date IS NOT NULL AND (
|
||||||
|
CAST(first_date AS DATE) BETWEEN #{now} AND #{plusDays}
|
||||||
|
OR
|
||||||
|
CAST(final_date AS DATE) BETWEEN #{now} AND #{plusDays}
|
||||||
|
))
|
||||||
|
);
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="getFirstInterviewList" resultMap="BaseResultMap">
|
||||||
|
SELECT <include refid="Base_Column_List"/>
|
||||||
|
FROM resume_follow_record
|
||||||
|
WHERE final_date IS NULL
|
||||||
|
AND first_date BETWEEN #{now} AND #{plusDays}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
<select id="getFirstAndFinalInterviewList" resultMap="BaseResultMap">
|
||||||
|
SELECT <include refid="Base_Column_List"/>
|
||||||
|
FROM resume_follow_record
|
||||||
|
WHERE
|
||||||
|
first_date IS NOT NULL
|
||||||
|
AND final_date IS NOT NULL
|
||||||
|
AND first_date BETWEEN #{now} AND #{plusDays}
|
||||||
|
AND final_date BETWEEN #{now} AND #{plusDays}
|
||||||
|
AND first_date = final_date
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<select id="getFinalInterviewList" resultMap="BaseResultMap">
|
||||||
|
SELECT <include refid="Base_Column_List"/>
|
||||||
|
FROM resume_follow_record
|
||||||
|
WHERE
|
||||||
|
first_date IS NOT NULL
|
||||||
|
AND final_date IS NOT NULL
|
||||||
|
AND final_date BETWEEN #{now} AND #{plusDays}
|
||||||
|
AND first_date != final_date
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
Loading…
Reference in New Issue