重构主页看版的近日事项

This commit is contained in:
lw 2024-07-13 10:54:24 +08:00
parent beaf24852f
commit 527b50ba87
13 changed files with 412 additions and 97 deletions

View File

@ -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:
# 从数据源开关/默认关闭 # 从数据源开关/默认关闭

View File

@ -7,8 +7,8 @@ ruoyi:
# 版权年份 # 版权年份
copyrightYear: 2024 copyrightYear: 2024
# 文件路径 示例( Windows配置D:/ruoyi/uploadPathLinux配置 /home/ruoyi/uploadPath # 文件路径 示例( Windows配置D:/ruoyi/uploadPathLinux配置 /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:

View File

@ -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();
//如果是处理面试的人
if (!tip.equals("entry")) {
//找announcementDTOList有没有同一天的如果有则在该数据集里处理数据如果没有就新建
Optional<AnnouncementDTO> result = announcementDTOList.stream()
.filter(announcement -> date.equals(announcement.getDate()))
.findFirst();
//如果存在则
AnnouncementDTO announcementDTO;
List<AnnouncementDTO.AnnouncementInterview> nodeList = new ArrayList<>();
if (result.isPresent()) {
announcementDTO = result.get();
nodeList = handleNodeList(dataList, tip);
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() Optional<AnnouncementDTO> existingAnnouncement = announcementDTOList.stream()
.filter(announcement -> date.equals(announcement.getDate())) .filter(announcement -> date.equals(announcement.getDate()))
.findFirst(); .findFirst();
//如果存在则取出来封装入职人的信息
StringBuilder content = new StringBuilder();
for (T data : dataList) {
if (data instanceof EntryManage) {
EntryManage entryManage = (EntryManage) data;
content.append(entryManage.getUserName()).append(" ").append(entryManage.getPostName()).append(";");
} else if (data instanceof ResumeFollowRecord) {
ResumeFollowRecord resumeFollowRecord = (ResumeFollowRecord) data;
content.append(resumeFollowRecord.getName()).append(" ").append(resumeFollowRecord.getPostName()).append(";");
}
}
if (existingAnnouncement.isPresent()) { if (existingAnnouncement.isPresent()) {
AnnouncementDTO announcementDTO = existingAnnouncement.get(); AnnouncementDTO announcementDTO = existingAnnouncement.get();
setContentMethod.accept(announcementDTO, content.toString()); List<AnnouncementDTO.AnnouncementEntry> announcementEntryList = new ArrayList<>();
} else { 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);
// announcementDTO更新回去
for (int i = 0; i < announcementDTOList.size(); i++) {
if (announcementDTOList.get(i).getDate().equals(announcementDTO.getDate())) {
announcementDTOList.set(i, announcementDTO);
break;
}
}
}
//如果不存在则新增所有数据
else {
AnnouncementDTO announcementDTO = new AnnouncementDTO(); AnnouncementDTO announcementDTO = new AnnouncementDTO();
announcementDTO.setId(count++); announcementDTO.setId(count++);
announcementDTO.setDate(date); announcementDTO.setDate(date);
announcementDTO.setTitleEntry("预计入职候选人".equals(title) ? title : "预计入职候选人"); List<AnnouncementDTO.AnnouncementEntry> announcementEntryList = new ArrayList<>();
announcementDTO.setContentEntry("预计入职候选人".equals(title) ? content.toString() : ""); for (T data : dataList) {
announcementDTO.setTitleInterview("面试候选人".equals(title) ? title : "面试候选人"); AnnouncementDTO.AnnouncementEntry announcementEntry = new AnnouncementDTO.AnnouncementEntry();
announcementDTO.setContentInterview("面试候选人".equals(title) ? content.toString() : ""); 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); 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);
}
} }

View File

@ -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);
} }

View File

@ -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;
}
} }

View File

@ -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;

View File

@ -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;
/** /**
* 终试是否到面 * 终试是否到面

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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);
} }

View File

@ -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);
} }

View File

@ -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);
}
} }

View File

@ -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>