|
|
@@ -10,21 +10,19 @@ import com.citu.framework.common.pojo.PageResult;
|
|
|
import com.citu.framework.common.util.object.BeanUtils;
|
|
|
import com.citu.framework.dict.core.DictFrameworkUtils;
|
|
|
import com.citu.module.menduner.common.util.LoginUserContext;
|
|
|
+import com.citu.module.menduner.system.aop.VipEntitlementCheck;
|
|
|
+import com.citu.module.menduner.system.aop.VipEntitlementCheckAspect;
|
|
|
import com.citu.module.menduner.system.api.python.GraphApi;
|
|
|
import com.citu.module.menduner.system.api.python.GraphQueryPageDTO;
|
|
|
import com.citu.module.menduner.system.api.python.GraphSendDTO;
|
|
|
import com.citu.module.menduner.system.controller.app.jobhunt.job.vo.AppJobAdvertisedHomeRespVO;
|
|
|
import com.citu.module.menduner.system.controller.app.jobhunt.job.vo.AppJobAdvertisedPageReqVO;
|
|
|
-import com.citu.module.menduner.system.controller.app.recruit.job.vo.AppRecruitJobRenewalReqVO;
|
|
|
import com.citu.module.menduner.system.controller.app.recruit.job.vo.AppRecruitJobSaveReqVO;
|
|
|
import com.citu.module.menduner.system.controller.app.recruit.job.vo.AppRecruitJobSimpleRespVO;
|
|
|
import com.citu.module.menduner.system.controller.base.CommonRespVO;
|
|
|
import com.citu.module.menduner.system.controller.base.analysis.RecruitAnalysisPageReqVO;
|
|
|
import com.citu.module.menduner.system.controller.base.analysis.RecruitJobAnalysisRespVO;
|
|
|
-import com.citu.module.menduner.system.controller.base.job.JobAdvertisedPageReqVO;
|
|
|
-import com.citu.module.menduner.system.controller.base.job.JobAdvertisedReqVO;
|
|
|
-import com.citu.module.menduner.system.controller.base.job.JobAdvertisedRespVO;
|
|
|
-import com.citu.module.menduner.system.controller.base.job.JobAdvertisedSaveReqVO;
|
|
|
+import com.citu.module.menduner.system.controller.base.job.*;
|
|
|
import com.citu.module.menduner.system.convert.JobAdvertisedConvert;
|
|
|
import com.citu.module.menduner.system.dal.dataobject.job.JobAdvertisedDO;
|
|
|
import com.citu.module.menduner.system.dal.mysql.job.JobAdvertisedMapper;
|
|
|
@@ -64,29 +62,30 @@ import static com.citu.module.menduner.system.enums.ErrorCodeConstants.*;
|
|
|
@Validated
|
|
|
public class JobAdvertisedServiceImpl implements JobAdvertisedService {
|
|
|
|
|
|
+ /** 默认管理员的企业id和用户id **/
|
|
|
+ private static final Long DEFAULT_ENTERPRISE_ID = 1L;
|
|
|
+ private static final Long DEFAULT_USER_ID = 1L;
|
|
|
@Resource
|
|
|
private JobAdvertisedMapper mapper;
|
|
|
-
|
|
|
@Resource
|
|
|
private ESProducer esProducer;
|
|
|
-
|
|
|
@Resource
|
|
|
private GraphProducer producer;
|
|
|
-
|
|
|
@Resource
|
|
|
private GraphApi graphApi;
|
|
|
-
|
|
|
@Resource
|
|
|
private RedisTemplate<String, Object> redisTemplate;
|
|
|
-
|
|
|
+ @Resource
|
|
|
+ private VipEntitlementCheckAspect vipEntitlementCheckAspect;
|
|
|
|
|
|
@Override
|
|
|
public Long createJobAdvertised(JobAdvertisedSaveReqVO createReqVO) {
|
|
|
// 插入
|
|
|
JobAdvertisedDO jobAdvertised = BeanUtils.toBean(createReqVO, JobAdvertisedDO.class);
|
|
|
- mapper.insert(jobAdvertised);
|
|
|
- // 返回
|
|
|
- return jobAdvertised.getId();
|
|
|
+ jobAdvertised.setStatus(JobStatusEnum.ENABLE.getStatus());
|
|
|
+ jobAdvertised.setTop(false);
|
|
|
+ jobAdvertised.setHire(true);
|
|
|
+ return save(jobAdvertised, DEFAULT_ENTERPRISE_ID, DEFAULT_USER_ID);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -95,7 +94,7 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
|
|
|
validateJobAdvertisedExists(updateReqVO.getId());
|
|
|
// 更新
|
|
|
JobAdvertisedDO updateObj = BeanUtils.toBean(updateReqVO, JobAdvertisedDO.class);
|
|
|
- mapper.updateById(updateObj);
|
|
|
+ save(updateObj, DEFAULT_ENTERPRISE_ID, DEFAULT_USER_ID);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -122,6 +121,13 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
|
|
|
return mapper.selectPage(pageReqVO);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public PageResult<JobAdvertisedDO> getHireJobPage(JobAdvertisedPageReqVO page) {
|
|
|
+ page.setEnterpriseId(DEFAULT_ENTERPRISE_ID);
|
|
|
+ page.setEnterpriseId(DEFAULT_USER_ID);
|
|
|
+ return mapper.selectPage(page);
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public List<JobAdvertisedDO> list(JobAdvertisedReqVO reqVO) {
|
|
|
return mapper.list(reqVO);
|
|
|
@@ -335,68 +341,113 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
|
|
|
JobAdvertisedDO job = JobAdvertisedConvert.INSTANCE.convert3(reqVO);
|
|
|
Long userId = LoginUserContext.getUserId();
|
|
|
Long enterpriseId = LoginUserContext.getEnterpriseId();
|
|
|
- boolean exists = mapper.existByName(enterpriseId, userId, null == reqVO.getId() ? null : reqVO.getId(), reqVO.getName());
|
|
|
- if (exists) {
|
|
|
- throw exception(MDE_JOB_ADVERTISED_NAME_DUPLICATE, reqVO.getName());
|
|
|
+ return save(job, enterpriseId, userId);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存或更新职位信息。
|
|
|
+ *
|
|
|
+ * @param job 职位信息对象
|
|
|
+ * @param enterpriseId 企业ID
|
|
|
+ * @param userId 用户ID
|
|
|
+ * @return 保存或更新后的职位ID
|
|
|
+ * @throws RuntimeException 如果职位名称重复或其他验证失败
|
|
|
+ */
|
|
|
+ public Long save(JobAdvertisedDO job, Long enterpriseId, Long userId) {
|
|
|
+ // 检查职位名称是否重复
|
|
|
+ if (mapper.existByName(enterpriseId, userId, job.getId(), job.getName())) {
|
|
|
+ throw exception(MDE_JOB_ADVERTISED_NAME_DUPLICATE, job.getName());
|
|
|
}
|
|
|
- if (null == reqVO.getId()) {
|
|
|
- // 新增
|
|
|
- job.setUserId(userId);
|
|
|
- job.setEnterpriseId(enterpriseId);
|
|
|
- job.setTop(false);
|
|
|
- if (!job.getHire()) {
|
|
|
- // 不是众聘职位
|
|
|
- job.setHirePrice(0L);
|
|
|
- job.setStatus(JobStatusEnum.ENABLE.getStatus());
|
|
|
- } else {
|
|
|
- job.setStatus(JobStatusEnum.WAIT_ENABLE.getStatus());
|
|
|
- }
|
|
|
- if (StringUtils.hasText(reqVO.getStatus())) {
|
|
|
- // 有保存状态则写入保存的状态
|
|
|
- job.setStatus(reqVO.getStatus());
|
|
|
- }
|
|
|
- // 后置处理
|
|
|
- jobOperateAfter(job, SyncConstants.ADD);
|
|
|
|
|
|
+ if (job.getId() == null) {
|
|
|
+ // 新增职位
|
|
|
+ processNewJob(job, enterpriseId, userId);
|
|
|
} else {
|
|
|
- // 修改
|
|
|
- JobAdvertisedDO entity = get(reqVO.getId());
|
|
|
- // 效验
|
|
|
- validUpdate(entity, reqVO);
|
|
|
- // 是否是平台职位切换成众聘的职位
|
|
|
- if (reqVO.getHire() && !entity.getHire()) {
|
|
|
- // 普通职位切换众聘职位则进入判断,众聘切普通不进入判断
|
|
|
- job.setStatus(JobStatusEnum.WAIT_ENABLE.getStatus());
|
|
|
- }
|
|
|
- job.setId(entity.getId());
|
|
|
- // 后置处理
|
|
|
- jobOperateAfter(job, SyncConstants.UPDATE);
|
|
|
+ // 修改职位
|
|
|
+ processExistingJob(job, enterpriseId, userId);
|
|
|
}
|
|
|
+
|
|
|
+ // 保存或更新职位信息
|
|
|
+ if (job.getId() == null) {
|
|
|
+ mapper.insert(job);
|
|
|
+ } else {
|
|
|
+ mapper.updateById(job);
|
|
|
+ }
|
|
|
+
|
|
|
return job.getId();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 效验职位发布的编辑
|
|
|
+ * 处理新增职位的逻辑。
|
|
|
*
|
|
|
- * @param entity 职位
|
|
|
- * @param reqVO 编辑的职位信息
|
|
|
- **/
|
|
|
- public void validUpdate(
|
|
|
- JobAdvertisedDO entity,
|
|
|
- AppRecruitJobSaveReqVO reqVO) {
|
|
|
-
|
|
|
- if (reqVO.getHire()) {
|
|
|
- // price 不为空 && 之前是众聘的职位(防止平台职位切换成众聘职位这种情况)
|
|
|
- if (null != reqVO.getHirePrice() && entity.getHire()) {
|
|
|
- if (entity.getHirePrice().compareTo(reqVO.getHirePrice()) != 0) {
|
|
|
+ * @param job 职位信息对象
|
|
|
+ * @param enterpriseId 企业ID
|
|
|
+ * @param userId 用户ID
|
|
|
+ */
|
|
|
+ private void processNewJob(JobAdvertisedDO job, Long enterpriseId, Long userId) {
|
|
|
+ // 验证权益
|
|
|
+ vipEntitlementCheckAspect.validate(VipEntitlementCheck.OPERATE_PUBLISH_JOB);
|
|
|
+
|
|
|
+
|
|
|
+ // 设置默认值
|
|
|
+ job.setUserId(userId);
|
|
|
+ job.setEnterpriseId(enterpriseId);
|
|
|
+ job.setTop(false);
|
|
|
+
|
|
|
+ if (!job.getHire()) {
|
|
|
+ // 不是众聘职位
|
|
|
+ job.setHirePrice(0L);
|
|
|
+ job.setStatus(JobStatusEnum.ENABLE.getStatus());
|
|
|
+ } else {
|
|
|
+ // 众聘职位新增后,还需要给钱才能开启
|
|
|
+ job.setStatus(JobStatusEnum.WAIT_ENABLE.getStatus());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StringUtils.hasText(job.getStatus())) {
|
|
|
+ // 有保存状态则写入保存的状态
|
|
|
+ job.setStatus(job.getStatus());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 后置处理
|
|
|
+ jobOperateAfter(job, SyncConstants.ADD);
|
|
|
+
|
|
|
+ // 处理权益
|
|
|
+ vipEntitlementCheckAspect
|
|
|
+ .process(VipEntitlementCheck.OPERATE_PUBLISH_JOB, VipEntitlementCheck.OperationType.DEDUCT);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理修改职位的逻辑。
|
|
|
+ *
|
|
|
+ * @param job 职位信息对象
|
|
|
+ * @param enterpriseId 企业ID
|
|
|
+ * @param userId 用户ID
|
|
|
+ */
|
|
|
+ private void processExistingJob(JobAdvertisedDO job, Long enterpriseId, Long userId) {
|
|
|
+ JobAdvertisedDO existingJob = get(job.getId());
|
|
|
+
|
|
|
+ // 验证修改
|
|
|
+ if (job.getHire()) {
|
|
|
+ if (existingJob.getHire()) {
|
|
|
+ if (job.getHirePrice() != null && !job.getHirePrice().equals(existingJob.getHirePrice())) {
|
|
|
throw exception(MDE_JOB_ADVERTISED_BALANCE_UPDATE);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 如果普通职位切换成众聘职位
|
|
|
+ if (job.getHire() && !existingJob.getHire()) {
|
|
|
+ job.setStatus(JobStatusEnum.WAIT_ENABLE.getStatus());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新现有职位
|
|
|
+ job.setId(existingJob.getId());
|
|
|
|
|
|
+ // 后置处理
|
|
|
+ jobOperateAfter(job, SyncConstants.UPDATE);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
public JobAdvertisedDO get(Long id) {
|
|
|
JobAdvertisedDO job = mapper.selectById(id);
|
|
|
if (null == job) {
|
|
|
@@ -407,34 +458,34 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
|
|
|
|
|
|
@Override
|
|
|
@DSTransactional
|
|
|
- public boolean enable(List<Long> ids) {
|
|
|
+ @VipEntitlementCheck(type = VipEntitlementCheck.OPERATE_PUBLISH_JOB, operate = VipEntitlementCheck.OperationType.DEDUCT)
|
|
|
+ public void enable(List<Long> ids) {
|
|
|
for (Long id : ids) {
|
|
|
JobAdvertisedDO job = get(id);
|
|
|
if (JobStatusEnum.ENABLE.getStatus().equals(job.getStatus())) {
|
|
|
// 已经是开启状态
|
|
|
- return true;
|
|
|
+ throw exception(MDE_JOB_ADVERTISED_STATUS_ENABLE_ERROR);
|
|
|
}
|
|
|
job.setStatus(JobStatusEnum.ENABLE.getStatus());
|
|
|
mapper.updateById(job);
|
|
|
jobDataSync(job, SyncConstants.UPDATE);
|
|
|
}
|
|
|
- return true;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@DSTransactional
|
|
|
- public boolean disable(List<Long> ids) {
|
|
|
+ @VipEntitlementCheck(type = VipEntitlementCheck.OPERATE_PUBLISH_JOB, operate = VipEntitlementCheck.OperationType.ADD)
|
|
|
+ public void disable(List<Long> ids) {
|
|
|
for (Long id : ids) {
|
|
|
JobAdvertisedDO job = get(id);
|
|
|
if (JobStatusEnum.DISABLE.getStatus().equals(job.getStatus())) {
|
|
|
// 已经是关闭状态
|
|
|
- return true;
|
|
|
+ throw exception(MDE_JOB_ADVERTISED_STATUS_CLOSE_ERROR);
|
|
|
}
|
|
|
job.setStatus(JobStatusEnum.DISABLE.getStatus());
|
|
|
mapper.updateById(job);
|
|
|
jobDataSync(job, SyncConstants.UPDATE);
|
|
|
}
|
|
|
- return true;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -489,7 +540,7 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void renewal(AppRecruitJobRenewalReqVO reqVO) {
|
|
|
+ public void renewal(JobAdvertisedRenewalReqVO reqVO) {
|
|
|
JobAdvertisedDO job = get(reqVO.getId());
|
|
|
if (null == reqVO.getTime() || LocalDateTime.now().isAfter(reqVO.getTime())) {
|
|
|
// 时间不能小于当前时间
|