修改互联网岗位上传
This commit is contained in:
@@ -1000,30 +1000,12 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
|
||||
logger.info("生成唯一标识符: {}", string);
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
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) {
|
||||
try {
|
||||
Job job = new Job();
|
||||
if(StringUtil.isEmptyOrNull(rowWork.getAca112())){
|
||||
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.setMinSalary(Long.valueOf(rowWork.getSalaryLow()));
|
||||
job.setMaxSalary(Long.valueOf(rowWork.getSalaryHight()));
|
||||
@@ -1114,17 +1096,6 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
|
||||
} else {
|
||||
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) {
|
||||
logger.error("导入数据过程中发生异常: {}", e.getMessage(), e);
|
||||
throw new RuntimeException(e);
|
||||
@@ -1186,30 +1157,12 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
|
||||
logger.info("生成唯一标识符: {}", string);
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
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) {
|
||||
try {
|
||||
Job job = new Job();
|
||||
if(StringUtil.isEmptyOrNull(rowWork.getAca112())){
|
||||
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.setMinSalary(Long.valueOf(rowWork.getSalaryLow()));
|
||||
job.setMaxSalary(Long.valueOf(rowWork.getSalaryHight()));
|
||||
@@ -1225,20 +1178,13 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
|
||||
}
|
||||
job.setCompanyName(rowWork.getAAB004());
|
||||
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());
|
||||
if (rowWork.getAcb240() == null) {
|
||||
job.setVacancies(-1L);
|
||||
} else {
|
||||
String v = rowWork.getAcb240().replace("人", "").replace("以上", "");
|
||||
if (v.contains("若干")) {
|
||||
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);
|
||||
}
|
||||
Long vacancies = StringUtil.extractVacancyNum(rowWork.getAcb240());
|
||||
job.setVacancies(vacancies);
|
||||
}
|
||||
if (rowWork.getLatitude() != null && !rowWork.getLatitude().isEmpty()) {
|
||||
job.setLatitude(new BigDecimal(rowWork.getLatitude()));
|
||||
@@ -1282,7 +1228,7 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
|
||||
job.setCreateTime(formattedDate);
|
||||
job.setRowId(Long.valueOf(rowWork.getId()));
|
||||
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())){
|
||||
job.setRegionCode(StringUtil.getAreaToRegionCode(job.getJobLocationAreaCode()));//行政区划
|
||||
}
|
||||
@@ -1315,17 +1261,6 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
|
||||
} else {
|
||||
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) {
|
||||
logger.error("导入数据过程中发生异常: {}", e.getMessage(), e);
|
||||
throw new RuntimeException(e);
|
||||
|
||||
@@ -5,16 +5,16 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook; // 改为XSSFWorkbook
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.math.RoundingMode;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
|
||||
public class ExcelToObject {
|
||||
|
||||
private static final DataFormatter DATA_FORMATTER = new DataFormatter();
|
||||
|
||||
public static <T> List<T> readExcelToObjects(String filePath, Class<T> clazz) throws Exception {
|
||||
List<T> resultList = new ArrayList<>();
|
||||
|
||||
@@ -65,14 +65,27 @@ public class ExcelToObject {
|
||||
}
|
||||
break;
|
||||
case NUMERIC:
|
||||
if (field.getType() == int.class || field.getType() == Integer.class) {
|
||||
field.set(obj, (int) cell.getNumericCellValue());
|
||||
} else if (field.getType() == double.class || field.getType() == Double.class) {
|
||||
field.set(obj, cell.getNumericCellValue());
|
||||
} else if (field.getType() == String.class) {
|
||||
// Special handling for phone numbers and other numeric fields as strings
|
||||
BigDecimal bigDecimalValue = new BigDecimal(cell.getNumericCellValue());
|
||||
field.set(obj, bigDecimalValue.toPlainString());
|
||||
if (DateUtil.isCellDateFormatted(cell)) {
|
||||
Date cellDate = cell.getDateCellValue();
|
||||
if (Date.class.equals(field.getType())) {
|
||||
field.set(obj, cellDate);
|
||||
} else if (String.class.equals(field.getType())) {
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy", Locale.CHINA);
|
||||
field.set(obj, sdf.format(cellDate));
|
||||
}
|
||||
}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;
|
||||
case BOOLEAN:
|
||||
|
||||
@@ -8,6 +8,8 @@ import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.time.Period;
|
||||
import java.util.*;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class StringUtil {
|
||||
@@ -122,6 +124,8 @@ public class StringUtil {
|
||||
//求职者、网格员
|
||||
public static final List<String> COMPANY_TYPES = Arrays.asList("1", "2");
|
||||
|
||||
private static final Pattern DIGIT_PATTERN = Pattern.compile("\\d+");
|
||||
|
||||
static {
|
||||
Map<String, String> tempMap = new HashMap<>();
|
||||
tempMap.put("中专及以上", "1");
|
||||
@@ -440,4 +444,30 @@ public class StringUtil {
|
||||
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
|
||||
where job.row_id = row_work.id
|
||||
) 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 id="selectVectorJob" resultType="com.ruoyi.cms.domain.VectorJob">
|
||||
SELECT
|
||||
|
||||
@@ -265,4 +265,29 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
|
||||
System.out.println("当前时间+3个月:" + 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