From 6fc056aabd3abb0f614402f248e024af7bc4aba6 Mon Sep 17 00:00:00 2001 From: zk Date: Fri, 20 Mar 2026 20:31:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B2=97=E4=BD=8D=E6=8A=95?= =?UTF-8?q?=E9=80=92=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jiayunet/controller/JobController.java | 12 ++++++- .../pojo/param/job/JobApplyParam.java | 26 +++++++++++++++ .../java/org/jiayunet/service/JobService.java | 32 +++++++++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 client-api/src/main/java/org/jiayunet/pojo/param/job/JobApplyParam.java diff --git a/client-api/src/main/java/org/jiayunet/controller/JobController.java b/client-api/src/main/java/org/jiayunet/controller/JobController.java index 52c7700..fa1864b 100644 --- a/client-api/src/main/java/org/jiayunet/controller/JobController.java +++ b/client-api/src/main/java/org/jiayunet/controller/JobController.java @@ -5,6 +5,7 @@ import org.jiayunet.pojo.PageParam; import org.jiayunet.pojo.PageResult; import org.jiayunet.pojo.dto.job.JobDetailDto; import org.jiayunet.pojo.dto.job.JobDto; +import org.jiayunet.pojo.param.job.JobApplyParam; import org.jiayunet.pojo.param.job.JobApplyQueryParam; import org.jiayunet.pojo.param.job.JobDislikeParam; import org.jiayunet.pojo.param.job.JobQueryParam; @@ -19,7 +20,7 @@ import org.springframework.web.bind.annotation.*; * @author zk */ @RestController -@RequestMapping("/job") +@RequestMapping("/api/job") @AllArgsConstructor public class JobController { @@ -89,4 +90,13 @@ public class JobController { Long userId = UserSecurityTool.getUserId(); return jobService.listApplications(param, userId); } + + /** + * 投递岗位 + */ + @PostMapping("/apply") + public void applyJob(@Validated @RequestBody JobApplyParam param) { + Long userId = UserSecurityTool.getUserId(); + jobService.applyJob(param.getJobId(), param.getStatus(), userId); + } } diff --git a/client-api/src/main/java/org/jiayunet/pojo/param/job/JobApplyParam.java b/client-api/src/main/java/org/jiayunet/pojo/param/job/JobApplyParam.java new file mode 100644 index 0000000..49768a9 --- /dev/null +++ b/client-api/src/main/java/org/jiayunet/pojo/param/job/JobApplyParam.java @@ -0,0 +1,26 @@ +package org.jiayunet.pojo.param.job; + +import lombok.Data; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + +/** + * 投递岗位参数 + * + * @author zk + */ +@Data +public class JobApplyParam { + + /** 岗位ID */ + @NotNull(message = "岗位ID不能为空") + private Long jobId; + + /** 投递状态 0=已投递 1=面试中 2=有Offer 3=未通过 4=已结束 */ + @NotNull(message = "投递状态不能为空") + @Min(value = 0, message = "投递状态值范围0-4") + @Max(value = 4, message = "投递状态值范围0-4") + private Integer status; +} diff --git a/client-api/src/main/java/org/jiayunet/service/JobService.java b/client-api/src/main/java/org/jiayunet/service/JobService.java index 45bb2f0..a4052be 100644 --- a/client-api/src/main/java/org/jiayunet/service/JobService.java +++ b/client-api/src/main/java/org/jiayunet/service/JobService.java @@ -429,4 +429,36 @@ public class JobService { return listJobs(queryParam, userId); } + + /** + * 投递岗位 + *

方法逻辑流程:

+ *

1. 查询岗位信息(校验存在性)

+ *

2. 检查是否已投递(已投递则更新状态)

+ *

3. 插入或更新投递记录

+ */ + public void applyJob(Long jobId, Integer status, Long userId) { + // 1. 查询岗位 + Job job = jobMapper.selectOne(new LambdaQueryWrapper().eq(Job::getId, jobId).eq(Job::getStatus, 0)); + if (job == null) throw new RuntimeException("岗位不存在或已下架"); + + // 2. 检查是否已投递 + UserJobApplication existing = userJobApplicationMapper.selectOne(new LambdaQueryWrapper().eq(UserJobApplication::getUserId, userId).eq(UserJobApplication::getJobId, jobId)); + + if (existing != null) { + // 3a. 已投递,更新状态 + existing.setStatus(status); + existing.setUpdateTime(Instant.now()); + userJobApplicationMapper.updateById(existing); + } else { + // 3b. 未投递,插入记录 + UserJobApplication application = new UserJobApplication(); + application.setUserId(userId); + application.setJobId(jobId); + application.setStatus(status); + application.setApplyTime(Instant.now()); + application.setCreateTime(Instant.now()); + userJobApplicationMapper.insert(application); + } + } }