修改互联网岗位上传
This commit is contained in:
@@ -1000,30 +1000,12 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
|
|||||||
logger.info("生成唯一标识符: {}", string);
|
logger.info("生成唯一标识符: {}", string);
|
||||||
LocalDateTime now = LocalDateTime.now();
|
LocalDateTime now = LocalDateTime.now();
|
||||||
String formattedDate = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
String formattedDate = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||||
Job jobOne = null;
|
|
||||||
int repeatJobCount = 0;
|
|
||||||
List<String> repeatJobInfoList = new ArrayList<>();
|
|
||||||
for (RowWork rowWork : rowWorks) {
|
for (RowWork rowWork : rowWorks) {
|
||||||
try {
|
try {
|
||||||
Job job = new Job();
|
Job job = new Job();
|
||||||
if(StringUtil.isEmptyOrNull(rowWork.getAca112())){
|
if(StringUtil.isEmptyOrNull(rowWork.getAca112())){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
//去重
|
|
||||||
jobOne = jobMapper.selectOne(Wrappers.lambdaQuery(Job.class).eq(Job::getJobTitle, rowWork.getAca112()).eq(Job::getMinSalary, Long.valueOf(rowWork.getSalaryLow())).eq(Job::getMaxSalary, rowWork.getSalaryHight())
|
|
||||||
.eq(Job::getCompanyName, rowWork.getAAB004()).eq(Job::getJobLocation, rowWork.getAAE006()).orderByDesc(Job::getCreateTime).last("LIMIT 1"));
|
|
||||||
if (jobOne != null) {
|
|
||||||
//统计重复
|
|
||||||
repeatJobCount++;
|
|
||||||
String repeatInfo = String.format("岗位名称:%s,公司:%s,地点:%s,薪资区间:%s-%s",
|
|
||||||
rowWork.getAca112(),
|
|
||||||
rowWork.getAAB004(),
|
|
||||||
rowWork.getAAE006(),
|
|
||||||
rowWork.getSalaryLow(),
|
|
||||||
rowWork.getSalaryHight());
|
|
||||||
repeatJobInfoList.add(repeatInfo);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
job.setJobTitle(rowWork.getAca112());
|
job.setJobTitle(rowWork.getAca112());
|
||||||
job.setMinSalary(Long.valueOf(rowWork.getSalaryLow()));
|
job.setMinSalary(Long.valueOf(rowWork.getSalaryLow()));
|
||||||
job.setMaxSalary(Long.valueOf(rowWork.getSalaryHight()));
|
job.setMaxSalary(Long.valueOf(rowWork.getSalaryHight()));
|
||||||
@@ -1114,17 +1096,6 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
|
|||||||
} else {
|
} else {
|
||||||
logger.info("不存在新插入的数据:");
|
logger.info("不存在新插入的数据:");
|
||||||
}
|
}
|
||||||
System.out.println("====================岗位重复统计结果====================");
|
|
||||||
System.out.println("本次导入重复岗位总数量:" + repeatJobCount);
|
|
||||||
if (repeatJobCount > 0) {
|
|
||||||
System.out.println("重复岗位明细列表:");
|
|
||||||
for (String info : repeatJobInfoList) {
|
|
||||||
System.out.println(info);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
System.out.println("本次导入无重复岗位");
|
|
||||||
}
|
|
||||||
System.out.println("========================================================");
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("导入数据过程中发生异常: {}", e.getMessage(), e);
|
logger.error("导入数据过程中发生异常: {}", e.getMessage(), e);
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
@@ -1186,30 +1157,12 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
|
|||||||
logger.info("生成唯一标识符: {}", string);
|
logger.info("生成唯一标识符: {}", string);
|
||||||
LocalDateTime now = LocalDateTime.now();
|
LocalDateTime now = LocalDateTime.now();
|
||||||
String formattedDate = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
String formattedDate = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||||
Job jobOne = null;
|
|
||||||
int repeatJobCount = 0;
|
|
||||||
List<String> repeatJobInfoList = new ArrayList<>();
|
|
||||||
for (RowWork rowWork : rowWorks) {
|
for (RowWork rowWork : rowWorks) {
|
||||||
try {
|
try {
|
||||||
Job job = new Job();
|
Job job = new Job();
|
||||||
if(StringUtil.isEmptyOrNull(rowWork.getAca112())){
|
if(StringUtil.isEmptyOrNull(rowWork.getAca112())){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
//去重
|
|
||||||
jobOne = jobMapper.selectOne(Wrappers.lambdaQuery(Job.class).eq(Job::getJobTitle, rowWork.getAca112()).eq(Job::getMinSalary, Long.valueOf(rowWork.getSalaryLow())).eq(Job::getMaxSalary, rowWork.getSalaryHight())
|
|
||||||
.eq(Job::getCompanyName, rowWork.getAAB004()).eq(Job::getJobLocation, rowWork.getAAE006()).orderByDesc(Job::getCreateTime).last("LIMIT 1"));
|
|
||||||
if (jobOne != null) {
|
|
||||||
//统计重复
|
|
||||||
repeatJobCount++;
|
|
||||||
String repeatInfo = String.format("岗位名称:%s,公司:%s,地点:%s,薪资区间:%s-%s",
|
|
||||||
rowWork.getAca112(),
|
|
||||||
rowWork.getAAB004(),
|
|
||||||
rowWork.getAAE006(),
|
|
||||||
rowWork.getSalaryLow(),
|
|
||||||
rowWork.getSalaryHight());
|
|
||||||
repeatJobInfoList.add(repeatInfo);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
job.setJobTitle(rowWork.getAca112());
|
job.setJobTitle(rowWork.getAca112());
|
||||||
job.setMinSalary(Long.valueOf(rowWork.getSalaryLow()));
|
job.setMinSalary(Long.valueOf(rowWork.getSalaryLow()));
|
||||||
job.setMaxSalary(Long.valueOf(rowWork.getSalaryHight()));
|
job.setMaxSalary(Long.valueOf(rowWork.getSalaryHight()));
|
||||||
@@ -1225,20 +1178,13 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
|
|||||||
}
|
}
|
||||||
job.setCompanyName(rowWork.getAAB004());
|
job.setCompanyName(rowWork.getAAB004());
|
||||||
job.setJobLocation(rowWork.getAAE006());
|
job.setJobLocation(rowWork.getAAE006());
|
||||||
job.setPostingDate(formattedDate);
|
job.setPostingDate(rowWork.getAae397() != null ? DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,rowWork.getAae397()) : formattedDate);
|
||||||
job.setJobCategory(rowWork.getJobCategory());
|
job.setJobCategory(rowWork.getJobCategory());
|
||||||
if (rowWork.getAcb240() == null) {
|
if (rowWork.getAcb240() == null) {
|
||||||
job.setVacancies(-1L);
|
job.setVacancies(-1L);
|
||||||
} else {
|
} else {
|
||||||
String v = rowWork.getAcb240().replace("人", "").replace("以上", "");
|
Long vacancies = StringUtil.extractVacancyNum(rowWork.getAcb240());
|
||||||
if (v.contains("若干")) {
|
job.setVacancies(vacancies);
|
||||||
job.setVacancies(20L);
|
|
||||||
}else if (org.apache.commons.lang3.StringUtils.isNotEmpty(v) && v.contains("-")) {
|
|
||||||
v = v.split("-")[1];
|
|
||||||
job.setVacancies(org.apache.commons.lang3.StringUtils.isNotEmpty(v) ? Long.valueOf(v) : -1L);
|
|
||||||
}else {
|
|
||||||
job.setVacancies(org.apache.commons.lang3.StringUtils.isNotEmpty(v) ? Long.valueOf(v) : -1L);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (rowWork.getLatitude() != null && !rowWork.getLatitude().isEmpty()) {
|
if (rowWork.getLatitude() != null && !rowWork.getLatitude().isEmpty()) {
|
||||||
job.setLatitude(new BigDecimal(rowWork.getLatitude()));
|
job.setLatitude(new BigDecimal(rowWork.getLatitude()));
|
||||||
@@ -1282,7 +1228,7 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
|
|||||||
job.setCreateTime(formattedDate);
|
job.setCreateTime(formattedDate);
|
||||||
job.setRowId(Long.valueOf(rowWork.getId()));
|
job.setRowId(Long.valueOf(rowWork.getId()));
|
||||||
job.setJobStatus(StringUtil.HIRE_LY);//上架
|
job.setJobStatus(StringUtil.HIRE_LY);//上架
|
||||||
job.setDownTime(DateUtils.getMonthThree(DateUtils.YYYY_MM_DD_HH_MM_SS));//下架时间当前时间+3个月
|
job.setDownTime(DateUtils.getMonthThree(rowWork.getAae397(),DateUtils.YYYY_MM_DD_HH_MM_SS));//下架时间当前时间+3个月
|
||||||
if(StringUtils.isBlank(job.getJobLocationAreaCode())){
|
if(StringUtils.isBlank(job.getJobLocationAreaCode())){
|
||||||
job.setRegionCode(StringUtil.getAreaToRegionCode(job.getJobLocationAreaCode()));//行政区划
|
job.setRegionCode(StringUtil.getAreaToRegionCode(job.getJobLocationAreaCode()));//行政区划
|
||||||
}
|
}
|
||||||
@@ -1315,17 +1261,6 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
|
|||||||
} else {
|
} else {
|
||||||
logger.info("不存在新插入的数据:");
|
logger.info("不存在新插入的数据:");
|
||||||
}
|
}
|
||||||
System.out.println("====================岗位重复统计结果====================");
|
|
||||||
System.out.println("本次导入重复岗位总数量:" + repeatJobCount);
|
|
||||||
if (repeatJobCount > 0) {
|
|
||||||
System.out.println("重复岗位明细列表:");
|
|
||||||
for (String info : repeatJobInfoList) {
|
|
||||||
System.out.println(info);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
System.out.println("本次导入无重复岗位");
|
|
||||||
}
|
|
||||||
System.out.println("========================================================");
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("导入数据过程中发生异常: {}", e.getMessage(), e);
|
logger.error("导入数据过程中发生异常: {}", e.getMessage(), e);
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
|
|||||||
@@ -5,16 +5,16 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook; // 改为XSSFWorkbook
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.IOException;
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.math.RoundingMode;
|
||||||
import java.util.HashMap;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.List;
|
import java.util.*;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class ExcelToObject {
|
public class ExcelToObject {
|
||||||
|
|
||||||
|
private static final DataFormatter DATA_FORMATTER = new DataFormatter();
|
||||||
|
|
||||||
public static <T> List<T> readExcelToObjects(String filePath, Class<T> clazz) throws Exception {
|
public static <T> List<T> readExcelToObjects(String filePath, Class<T> clazz) throws Exception {
|
||||||
List<T> resultList = new ArrayList<>();
|
List<T> resultList = new ArrayList<>();
|
||||||
|
|
||||||
@@ -65,14 +65,27 @@ public class ExcelToObject {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NUMERIC:
|
case NUMERIC:
|
||||||
if (field.getType() == int.class || field.getType() == Integer.class) {
|
if (DateUtil.isCellDateFormatted(cell)) {
|
||||||
field.set(obj, (int) cell.getNumericCellValue());
|
Date cellDate = cell.getDateCellValue();
|
||||||
} else if (field.getType() == double.class || field.getType() == Double.class) {
|
if (Date.class.equals(field.getType())) {
|
||||||
field.set(obj, cell.getNumericCellValue());
|
field.set(obj, cellDate);
|
||||||
} else if (field.getType() == String.class) {
|
} else if (String.class.equals(field.getType())) {
|
||||||
// Special handling for phone numbers and other numeric fields as strings
|
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy", Locale.CHINA);
|
||||||
BigDecimal bigDecimalValue = new BigDecimal(cell.getNumericCellValue());
|
field.set(obj, sdf.format(cellDate));
|
||||||
field.set(obj, bigDecimalValue.toPlainString());
|
}
|
||||||
|
}else{
|
||||||
|
String numStr = DATA_FORMATTER.formatCellValue(cell);
|
||||||
|
BigDecimal numBig = new BigDecimal(numStr);
|
||||||
|
|
||||||
|
BigDecimal numInt = numBig.setScale(0, RoundingMode.HALF_UP);
|
||||||
|
Class<?> fieldType = field.getType();
|
||||||
|
if (fieldType == int.class || fieldType == Integer.class) {
|
||||||
|
field.set(obj, numInt.intValue());
|
||||||
|
} else if (fieldType == double.class || fieldType == Double.class) {
|
||||||
|
field.set(obj, numInt.doubleValue());
|
||||||
|
} else if (String.class.equals(fieldType)) {
|
||||||
|
field.set(obj, numInt.toPlainString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BOOLEAN:
|
case BOOLEAN:
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ import java.text.SimpleDateFormat;
|
|||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.Period;
|
import java.time.Period;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class StringUtil {
|
public class StringUtil {
|
||||||
@@ -122,6 +124,8 @@ public class StringUtil {
|
|||||||
//求职者、网格员
|
//求职者、网格员
|
||||||
public static final List<String> COMPANY_TYPES = Arrays.asList("1", "2");
|
public static final List<String> COMPANY_TYPES = Arrays.asList("1", "2");
|
||||||
|
|
||||||
|
private static final Pattern DIGIT_PATTERN = Pattern.compile("\\d+");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
Map<String, String> tempMap = new HashMap<>();
|
Map<String, String> tempMap = new HashMap<>();
|
||||||
tempMap.put("中专及以上", "1");
|
tempMap.put("中专及以上", "1");
|
||||||
@@ -440,4 +444,30 @@ public class StringUtil {
|
|||||||
return age >= 16 && age <= 24;
|
return age >= 16 && age <= 24;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理上传中人数问题
|
||||||
|
* @param source
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Long extractVacancyNum(String source) {
|
||||||
|
if (StringUtils.isBlank(source)) {
|
||||||
|
return -1L;
|
||||||
|
}
|
||||||
|
String text = source.trim();
|
||||||
|
if (text.contains("若干")) {
|
||||||
|
return 20L;
|
||||||
|
}
|
||||||
|
Matcher matcher = DIGIT_PATTERN.matcher(text);
|
||||||
|
Long maxNum = null;
|
||||||
|
while (matcher.find()) {
|
||||||
|
String numStr = matcher.group();
|
||||||
|
try {
|
||||||
|
long num = Long.parseLong(numStr);
|
||||||
|
if (maxNum == null || num > maxNum) {
|
||||||
|
maxNum = num;
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException ignored) {}
|
||||||
|
}
|
||||||
|
return maxNum == null ? -1L : maxNum;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -318,6 +318,15 @@
|
|||||||
from job
|
from job
|
||||||
where job.row_id = row_work.id
|
where job.row_id = row_work.id
|
||||||
) AND id IN ( SELECT max(id) FROM row_work GROUP BY Aca112,Acb22a,AAE006)
|
) AND id IN ( SELECT max(id) FROM row_work GROUP BY Aca112,Acb22a,AAE006)
|
||||||
|
AND NOT EXISTS (
|
||||||
|
SELECT 1 FROM job j
|
||||||
|
WHERE j.job_title = row_work.Aca112
|
||||||
|
AND j.company_name = row_work.AAB004
|
||||||
|
AND j.job_location = row_work.AAE006
|
||||||
|
AND j.min_salary = CAST(row_work.SalaryLow AS BIGINT)
|
||||||
|
AND j.max_salary = row_work.SalaryHight
|
||||||
|
AND (j.down_time IS NULL OR j.down_time > CURRENT_DATE)
|
||||||
|
)
|
||||||
</select>
|
</select>
|
||||||
<select id="selectVectorJob" resultType="com.ruoyi.cms.domain.VectorJob">
|
<select id="selectVectorJob" resultType="com.ruoyi.cms.domain.VectorJob">
|
||||||
SELECT
|
SELECT
|
||||||
|
|||||||
@@ -265,4 +265,29 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
|
|||||||
System.out.println("当前时间+3个月:" + sdf.format(threeMonthsLater));
|
System.out.println("当前时间+3个月:" + sdf.format(threeMonthsLater));
|
||||||
return sdf.format(threeMonthsLater);
|
return sdf.format(threeMonthsLater);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取指定日期往后推3个月的格式化字符串
|
||||||
|
* @param baseDate 基准日期(传入要计算的原始日期,不再取系统当前时间)
|
||||||
|
* @param fmt 日期格式化模板,例:yyyy-MM-dd、yyyy-MM-dd HH:mm:ss
|
||||||
|
* @return 加3个月后的日期字符串
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* 获取基准日期3个月之后的日期字符串
|
||||||
|
* @param baseDate 基准日期,传null则自动使用当前系统时间
|
||||||
|
* @param fmt 日期格式化模板,如 yyyy-MM-dd
|
||||||
|
* @return 偏移3个月后的格式化日期
|
||||||
|
*/
|
||||||
|
public static String getMonthThree(Date baseDate, String fmt) {
|
||||||
|
// 初始化日历,默认就是系统当前时间
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
// 判断:传入日期不为空,就覆盖基准时间;为空则保留默认当前时间
|
||||||
|
if (baseDate != null) {
|
||||||
|
calendar.setTime(baseDate);
|
||||||
|
}
|
||||||
|
// 向后加3个月
|
||||||
|
calendar.add(Calendar.MONTH, 3);
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat(fmt);
|
||||||
|
return sdf.format(calendar.getTime());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user