From 734c91eea1ecbb407a1bfac27773a46610ea5b6d Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Mon, 6 Jul 2026 10:40:00 +0800 Subject: [PATCH 01/61] =?UTF-8?q?=E4=BF=AE=E6=94=B9appList=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2es=E5=BC=80=E5=90=AF=E5=88=86=E6=95=B0=E6=8E=92?= =?UTF-8?q?=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/cms/service/impl/ESJobSearchImpl.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index 5220fd6..b6cf01c 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -711,18 +711,20 @@ public class ESJobSearchImpl implements IESJobSearchService if(hasText(jobQuery.getType())){ wrapper.and(a->a.eq(ESJobDocument::getType,jobQuery.getType().trim())); } + + // 先开启打分、优先按匹配分数排序(关键词前台命中越高越靠前) + wrapper.trackScores(); + wrapper.sortByScore(SortOrder.DESC); if(Objects.nonNull(jobQuery.getOrder())){ - if (jobQuery.getOrder()==3){ - // 最大薪资排序 - wrapper.sort(SortBuilders.fieldSort("maxSalary").order(SortOrder.DESC).missing("_last")); - } else { - wrapper.sort(SortBuilders.fieldSort("postingDate").order(SortOrder.DESC).missing("_last")); - } - if (jobQuery.getOrder()==1){ + wrapper.sort(SortBuilders.fieldSort("postingDate").order(SortOrder.DESC).missing("_last")); + if(jobQuery.getOrder()==1){ wrapper.orderByDesc(ESJobDocument::getIsHot); wrapper.orderByDesc(ESJobDocument::getApplyNum); wrapper.orderByDesc(ESJobDocument::getView); } + if(jobQuery.getOrder()==3){ + wrapper.orderByDesc(ESJobDocument::getMaxSalary); + } }else{ //默认按照发布时间倒叙 wrapper.sort(SortBuilders.fieldSort("postingDate").order(SortOrder.DESC).missing("_last")); From 9a32cbab5facc7a91bfbcb0e79b352e9a10d158c Mon Sep 17 00:00:00 2001 From: chenyanchang <30190327@qq.com> Date: Mon, 6 Jul 2026 18:02:36 +0800 Subject: [PATCH 02/61] update --- .../service/policy/impl/PolicyInfoServiceImpl.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/policy/impl/PolicyInfoServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/policy/impl/PolicyInfoServiceImpl.java index d2819cb..6dcdd98 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/policy/impl/PolicyInfoServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/policy/impl/PolicyInfoServiceImpl.java @@ -33,8 +33,15 @@ public class PolicyInfoServiceImpl implements IPolicyInfoService { public TableDataInfo getPortalList(PolicyInfoQuery query) { PageHelper.startPage(query.getPageNum(), query.getPageSize()); if (StringUtils.isNotEmpty(query.getPolicyTag())) { - List policyTags = Arrays.asList(query.getPolicyTag().split(",")); - query.setPolicyTags(policyTags); + System.out.println("query.getPolicyTag()============"+query.getPolicyTag()); + String policyTag = query.getPolicyTag().trim(); + if (StringUtils.isNotEmpty(policyTag) && policyTag.endsWith(",")) { + policyTag = policyTag.substring(0, policyTag.length() - 1); + if (StringUtils.isNotEmpty(policyTag)) { + List policyTags = Arrays.asList(query.getPolicyTag().split(",")); + query.setPolicyTags(policyTags); + } + } } // 仅返回启用状态的政策给前端 query.setStatus("0"); From 4a97214a37849fe2b93d01f0198bf1283c5f8ab0 Mon Sep 17 00:00:00 2001 From: chenyanchang <30190327@qq.com> Date: Mon, 6 Jul 2026 18:16:30 +0800 Subject: [PATCH 03/61] update --- .../ruoyi/cms/service/policy/impl/PolicyInfoServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/policy/impl/PolicyInfoServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/policy/impl/PolicyInfoServiceImpl.java index 6dcdd98..cf9a81b 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/policy/impl/PolicyInfoServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/policy/impl/PolicyInfoServiceImpl.java @@ -37,8 +37,8 @@ public class PolicyInfoServiceImpl implements IPolicyInfoService { String policyTag = query.getPolicyTag().trim(); if (StringUtils.isNotEmpty(policyTag) && policyTag.endsWith(",")) { policyTag = policyTag.substring(0, policyTag.length() - 1); - if (StringUtils.isNotEmpty(policyTag)) { - List policyTags = Arrays.asList(query.getPolicyTag().split(",")); + if (StringUtils.isNotEmpty(policyTag) && StringUtils.isNotEmpty(policyTag.trim())) { + List policyTags = Arrays.asList(policyTag.trim().split(",")); query.setPolicyTags(policyTags); } } From 048e417ab50cbca92423e6ff2c1ff66220d4e9f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E8=BE=89?= Date: Mon, 6 Jul 2026 21:12:53 +0800 Subject: [PATCH 04/61] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 + .../controller/app/AppProjectController.java | 117 +++++++++++ .../cms/controller/cms/ProjectController.java | 137 +++++++++++++ .../java/com/ruoyi/cms/domain/Project.java | 69 +++++++ .../com/ruoyi/cms/domain/ProjectComment.java | 47 +++++ .../cms/mapper/ProjectCommentMapper.java | 14 ++ .../com/ruoyi/cms/mapper/ProjectMapper.java | 14 ++ .../cms/service/IProjectCommentService.java | 20 ++ .../ruoyi/cms/service/IProjectService.java | 20 ++ .../impl/ProjectCommentServiceImpl.java | 31 +++ .../cms/service/impl/ProjectServiceImpl.java | 36 ++++ sql/cms_project.sql | 185 ++++++++++++++++++ 12 files changed, 693 insertions(+) create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppProjectController.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/ProjectController.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Project.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/ProjectComment.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/ProjectCommentMapper.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/ProjectMapper.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IProjectCommentService.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IProjectService.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ProjectCommentServiceImpl.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ProjectServiceImpl.java create mode 100644 sql/cms_project.sql diff --git a/.gitignore b/.gitignore index 8ca3bd7..d422bc9 100644 --- a/.gitignore +++ b/.gitignore @@ -53,5 +53,8 @@ nbdist/ # Local application runtime files .local/ +# opencode configuration (skills, agents, etc.) +.opencode/ + local.sh .claude \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppProjectController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppProjectController.java new file mode 100644 index 0000000..44754c3 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppProjectController.java @@ -0,0 +1,117 @@ +package com.ruoyi.cms.controller.app; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.cms.domain.Project; +import com.ruoyi.cms.domain.ProjectComment; +import com.ruoyi.cms.service.IProjectCommentService; +import com.ruoyi.cms.service.IProjectService; +import com.ruoyi.common.annotation.BussinessLog; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.utils.StringUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 移动端:项目管理 Controller + * + * @author shz + * @date 2025-07-06 + */ +@RestController +@RequestMapping("/app/project") +@Api(tags = "移动端:项目管理") +public class AppProjectController extends BaseController +{ + @Autowired + private IProjectService projectService; + + @Autowired + private IProjectCommentService projectCommentService; + + /** + * 查询已发布项目列表(支持搜索和筛选) + */ + @ApiOperation("查询项目列表") + @GetMapping("/list") + @BussinessLog(title = "查询项目列表") + public TableDataInfo list(Project query) + { + startPage(); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.and(StringUtils.isNotBlank(query.getTitle()), + w -> w.like(Project::getTitle, query.getTitle()) + .or() + .like(Project::getDescription, query.getTitle())); + wrapper.eq(StringUtils.isNotBlank(query.getIndustry()), Project::getIndustry, query.getIndustry()); + wrapper.eq(StringUtils.isNotBlank(query.getRegion()), Project::getRegion, query.getRegion()); + wrapper.eq(StringUtils.isNotBlank(query.getCooperationMode()), Project::getCooperationMode, query.getCooperationMode()); + wrapper.eq(Project::getStatus, "1"); + wrapper.orderByDesc(Project::getCreateTime); + List list = projectService.list(wrapper); + return getDataTable(list); + } + + /** + * 获取项目详情(含评论列表) + */ + @ApiOperation("获取项目详情") + @GetMapping("/{projectId}") + @BussinessLog(title = "查看项目详情") + public AjaxResult detail(@PathVariable("projectId") Long projectId) + { + Project project = projectService.getById(projectId); + if (project == null) + { + return AjaxResult.error("项目不存在"); + } + List comments = projectCommentService.listByProjectId(projectId); + Map result = new HashMap<>(); + result.put("project", project); + result.put("comments", comments); + return AjaxResult.success(result); + } + + /** + * 发表评论 + */ + @ApiOperation("发表评论") + @PostMapping("/comment") + @BussinessLog(title = "发表项目评论") + public AjaxResult addComment(@RequestBody ProjectComment comment) + { + if (!StringUtils.hasText(comment.getContent())) + { + return AjaxResult.error("评论内容不能为空"); + } + if (comment.getProjectId() == null) + { + return AjaxResult.error("项目ID不能为空"); + } + return toAjax(projectCommentService.save(comment)); + } + + /** + * 获取项目评论列表 + */ + @ApiOperation("获取项目评论列表") + @GetMapping("/comments/{projectId}") + @BussinessLog(title = "查看项目评论") + public AjaxResult comments(@PathVariable("projectId") Long projectId) + { + List comments = projectCommentService.listByProjectId(projectId); + return AjaxResult.success(comments); + } +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/ProjectController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/ProjectController.java new file mode 100644 index 0000000..042eea4 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/ProjectController.java @@ -0,0 +1,137 @@ +package com.ruoyi.cms.controller.cms; + +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +import com.ruoyi.cms.domain.Project; +import com.ruoyi.cms.domain.ProjectComment; +import com.ruoyi.cms.service.IProjectCommentService; +import com.ruoyi.cms.service.IProjectService; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 后台:项目管理 Controller + * + * @author shz + * @date 2025-07-06 + */ +@RestController +@RequestMapping("/cms/project") +@Api(tags = "后台:项目管理") +public class ProjectController extends BaseController +{ + @Autowired + private IProjectService projectService; + + @Autowired + private IProjectCommentService projectCommentService; + + /** + * 获取项目的评论列表 + */ + @ApiOperation("获取项目评论列表") + @PreAuthorize("@ss.hasPermi('cms:project:query')") + @GetMapping("/comments/{projectId}") + public AjaxResult comments(@PathVariable("projectId") Long projectId) + { + List list = projectCommentService.listByProjectId(projectId); + return success(list); + } + + /** + * 回复评论 + */ + @ApiOperation("回复评论") + @PreAuthorize("@ss.hasPermi('cms:project:edit')") + @Log(title = "项目管理", businessType = BusinessType.UPDATE) + @PutMapping("/comment/reply") + public AjaxResult reply(@RequestBody ProjectComment comment) + { + ProjectComment entity = projectCommentService.getById(comment.getCommentId()); + if (entity == null) + { + return AjaxResult.error("评论不存在"); + } + entity.setReply(comment.getReply()); + entity.setReplyTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + return toAjax(projectCommentService.updateById(entity)); + } + + /** + * 查询项目列表 + */ + @ApiOperation("查询项目列表") + @PreAuthorize("@ss.hasPermi('cms:project:list')") + @GetMapping("/list") + public TableDataInfo list(Project query) + { + startPage(); + List list = projectService.selectProjectList(query); + return getDataTable(list); + } + + /** + * 获取项目详细信息 + */ + @ApiOperation("获取项目详细信息") + @PreAuthorize("@ss.hasPermi('cms:project:query')") + @GetMapping("/{projectId}") + public AjaxResult getInfo(@PathVariable("projectId") Long projectId) + { + return success(projectService.getById(projectId)); + } + + /** + * 新增项目 + */ + @ApiOperation("新增项目") + @PreAuthorize("@ss.hasPermi('cms:project:add')") + @Log(title = "项目管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody Project project) + { + return toAjax(projectService.save(project)); + } + + /** + * 修改项目 + */ + @ApiOperation("修改项目") + @PreAuthorize("@ss.hasPermi('cms:project:edit')") + @Log(title = "项目管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody Project project) + { + return toAjax(projectService.updateById(project)); + } + + /** + * 删除项目 + */ + @ApiOperation("删除项目") + @PreAuthorize("@ss.hasPermi('cms:project:remove')") + @Log(title = "项目管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{projectIds}") + public AjaxResult remove(@PathVariable Long[] projectIds) + { + return toAjax(projectService.removeByIds(Arrays.asList(projectIds))); + } +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Project.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Project.java new file mode 100644 index 0000000..5d92f40 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Project.java @@ -0,0 +1,69 @@ +package com.ruoyi.cms.domain; + +import lombok.Data; +import com.ruoyi.common.annotation.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 项目管理对象 cms_project + * + * @author shz + * @date 2025-07-06 + */ +@Data +@ApiModel("项目管理") +@TableName(value = "shz.cms_project") +public class Project extends BaseEntity +{ + @TableField(exist = false) + private static final long serialVersionUID = 1L; + + @TableId(value = "project_id", type = IdType.AUTO) + @ApiModelProperty("项目ID") + private Long projectId; + + @Excel(name = "项目名称") + @ApiModelProperty("项目名称") + private String title; + + @Excel(name = "项目描述") + @ApiModelProperty("项目描述") + private String description; + + @Excel(name = "项目需求人员") + @ApiModelProperty("项目需求人员") + private String requiredPersonnel; + + @Excel(name = "合作方式") + @ApiModelProperty("合作方式") + private String cooperationMode; + + @Excel(name = "行业") + @ApiModelProperty("行业") + private String industry; + + @Excel(name = "地区") + @ApiModelProperty("地区") + private String region; + + @Excel(name = "联系人") + @ApiModelProperty("联系人") + private String contactName; + + @Excel(name = "联系电话") + @ApiModelProperty("联系电话") + private String contactPhone; + + @Excel(name = "联系邮箱") + @ApiModelProperty("联系邮箱") + private String contactEmail; + + @ApiModelProperty("状态 0草稿 1发布") + private String status; +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/ProjectComment.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/ProjectComment.java new file mode 100644 index 0000000..e6684bf --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/ProjectComment.java @@ -0,0 +1,47 @@ +package com.ruoyi.cms.domain; + +import lombok.Data; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 项目评论对象 cms_project_comment + * + * @author shz + * @date 2025-07-06 + */ +@Data +@ApiModel("项目评论") +@TableName(value = "shz.cms_project_comment") +public class ProjectComment extends BaseEntity +{ + @TableField(exist = false) + private static final long serialVersionUID = 1L; + + @TableId(value = "comment_id", type = IdType.AUTO) + @ApiModelProperty("评论ID") + private Long commentId; + + @ApiModelProperty("关联项目ID") + private Long projectId; + + @ApiModelProperty("用户ID") + private Long userId; + + @ApiModelProperty("用户名") + private String userName; + + @ApiModelProperty("评论内容") + private String content; + + @ApiModelProperty("回复内容") + private String reply; + + @ApiModelProperty("回复时间") + private String replyTime; +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/ProjectCommentMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/ProjectCommentMapper.java new file mode 100644 index 0000000..bac8512 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/ProjectCommentMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.cms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.cms.domain.ProjectComment; + +/** + * 项目评论 Mapper 接口 + * + * @author shz + * @date 2025-07-06 + */ +public interface ProjectCommentMapper extends BaseMapper +{ +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/ProjectMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/ProjectMapper.java new file mode 100644 index 0000000..4b8264a --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/ProjectMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.cms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.cms.domain.Project; + +/** + * 项目管理 Mapper 接口 + * + * @author shz + * @date 2025-07-06 + */ +public interface ProjectMapper extends BaseMapper +{ +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IProjectCommentService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IProjectCommentService.java new file mode 100644 index 0000000..1c478e0 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IProjectCommentService.java @@ -0,0 +1,20 @@ +package com.ruoyi.cms.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.cms.domain.ProjectComment; + +import java.util.List; + +/** + * 项目评论 Service 接口 + * + * @author shz + * @date 2025-07-06 + */ +public interface IProjectCommentService extends IService +{ + /** + * 根据项目ID查询评论列表 + */ + List listByProjectId(Long projectId); +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IProjectService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IProjectService.java new file mode 100644 index 0000000..727d26f --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IProjectService.java @@ -0,0 +1,20 @@ +package com.ruoyi.cms.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.cms.domain.Project; + +import java.util.List; + +/** + * 项目管理 Service 接口 + * + * @author shz + * @date 2025-07-06 + */ +public interface IProjectService extends IService +{ + /** + * 查询项目列表(支持多条件筛选) + */ + List selectProjectList(Project query); +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ProjectCommentServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ProjectCommentServiceImpl.java new file mode 100644 index 0000000..58c09be --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ProjectCommentServiceImpl.java @@ -0,0 +1,31 @@ +package com.ruoyi.cms.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.cms.domain.ProjectComment; +import com.ruoyi.cms.mapper.ProjectCommentMapper; +import com.ruoyi.cms.service.IProjectCommentService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 项目评论 Service 实现 + * + * @author shz + * @date 2025-07-06 + */ +@Service +public class ProjectCommentServiceImpl + extends ServiceImpl + implements IProjectCommentService +{ + @Override + public List listByProjectId(Long projectId) + { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProjectComment::getProjectId, projectId); + wrapper.orderByAsc(ProjectComment::getCreateTime); + return list(wrapper); + } +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ProjectServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ProjectServiceImpl.java new file mode 100644 index 0000000..5911dec --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ProjectServiceImpl.java @@ -0,0 +1,36 @@ +package com.ruoyi.cms.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.cms.domain.Project; +import com.ruoyi.cms.mapper.ProjectMapper; +import com.ruoyi.cms.service.IProjectService; +import com.ruoyi.common.utils.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 项目管理 Service 实现 + * + * @author shz + * @date 2025-07-06 + */ +@Service +public class ProjectServiceImpl + extends ServiceImpl + implements IProjectService +{ + @Override + public List selectProjectList(Project query) + { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.like(StringUtils.isNotBlank(query.getTitle()), Project::getTitle, query.getTitle()); + wrapper.eq(StringUtils.isNotBlank(query.getIndustry()), Project::getIndustry, query.getIndustry()); + wrapper.eq(StringUtils.isNotBlank(query.getRegion()), Project::getRegion, query.getRegion()); + wrapper.eq(StringUtils.isNotBlank(query.getCooperationMode()), Project::getCooperationMode, query.getCooperationMode()); + wrapper.eq(StringUtils.isNotBlank(query.getStatus()), Project::getStatus, query.getStatus()); + wrapper.orderByDesc(Project::getCreateTime); + return list(wrapper); + } +} diff --git a/sql/cms_project.sql b/sql/cms_project.sql new file mode 100644 index 0000000..b99991e --- /dev/null +++ b/sql/cms_project.sql @@ -0,0 +1,185 @@ +-- ===================================================== +-- 项目管理 - 数据表 + 菜单权限配置 SQL +-- 在管理后台新增"项目管理"独立主菜单 +-- +-- 菜单结构: +-- 项目管理(2130, M-type独立目录) ← 与"招聘会管理"平级 +-- └ 项目列表(2131, C-type页面) +-- ├ 项目查询(2132, F-type按钮) +-- ├ 项目新增(2133, F-type按钮) +-- ├ 项目修改(2134, F-type按钮) +-- └ 项目删除(2135, F-type按钮) +-- +-- 使用固定ID 2130-2135,避免与已有数据冲突 +-- ===================================================== + +-- ===================================================== +-- Step 1: 创建项目表 +-- ===================================================== +CREATE SEQUENCE IF NOT EXISTS shz.cms_project_id_seq + START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; + +CREATE TABLE IF NOT EXISTS shz.cms_project ( + project_id BIGINT NOT NULL DEFAULT nextval('shz.cms_project_id_seq'::regclass) PRIMARY KEY, + title VARCHAR(255) NOT NULL, + description TEXT, + required_personnel TEXT, + cooperation_mode VARCHAR(100), + industry VARCHAR(100), + region VARCHAR(100), + contact_name VARCHAR(100), + contact_phone VARCHAR(50), + contact_email VARCHAR(100), + status CHAR(1) DEFAULT '0', + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag CHAR(1) DEFAULT '0', + remark VARCHAR(500) +); + +COMMENT ON TABLE shz.cms_project IS '项目管理表'; +COMMENT ON COLUMN shz.cms_project.project_id IS '项目ID'; +COMMENT ON COLUMN shz.cms_project.title IS '项目名称'; +COMMENT ON COLUMN shz.cms_project.description IS '项目描述'; +COMMENT ON COLUMN shz.cms_project.required_personnel IS '项目需求人员'; +COMMENT ON COLUMN shz.cms_project.cooperation_mode IS '合作方式'; +COMMENT ON COLUMN shz.cms_project.industry IS '行业'; +COMMENT ON COLUMN shz.cms_project.region IS '地区'; +COMMENT ON COLUMN shz.cms_project.contact_name IS '联系人'; +COMMENT ON COLUMN shz.cms_project.contact_phone IS '联系电话'; +COMMENT ON COLUMN shz.cms_project.contact_email IS '联系邮箱'; +COMMENT ON COLUMN shz.cms_project.status IS '状态:0=草稿, 1=发布'; + +CREATE INDEX IF NOT EXISTS idx_cms_project_title ON shz.cms_project(title); +CREATE INDEX IF NOT EXISTS idx_cms_project_industry ON shz.cms_project(industry); +CREATE INDEX IF NOT EXISTS idx_cms_project_region ON shz.cms_project(region); +CREATE INDEX IF NOT EXISTS idx_cms_project_cooperation_mode ON shz.cms_project(cooperation_mode); +CREATE INDEX IF NOT EXISTS idx_cms_project_del_flag ON shz.cms_project(del_flag); + +-- ===================================================== +-- Step 2: 创建项目评论表 +-- ===================================================== +CREATE SEQUENCE IF NOT EXISTS shz.cms_project_comment_id_seq + START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; + +CREATE TABLE IF NOT EXISTS shz.cms_project_comment ( + comment_id BIGINT NOT NULL DEFAULT nextval('shz.cms_project_comment_id_seq'::regclass) PRIMARY KEY, + project_id BIGINT NOT NULL, + user_id BIGINT, + user_name VARCHAR(100), + content TEXT NOT NULL, + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + del_flag CHAR(1) DEFAULT '0' +); + +COMMENT ON TABLE shz.cms_project_comment IS '项目评论表'; +COMMENT ON COLUMN shz.cms_project_comment.comment_id IS '评论ID'; +COMMENT ON COLUMN shz.cms_project_comment.project_id IS '关联项目ID'; +COMMENT ON COLUMN shz.cms_project_comment.user_id IS '用户ID'; +COMMENT ON COLUMN shz.cms_project_comment.user_name IS '用户名'; +COMMENT ON COLUMN shz.cms_project_comment.content IS '评论内容'; + +CREATE INDEX IF NOT EXISTS idx_cms_project_comment_project_id ON shz.cms_project_comment(project_id); + +-- ===================================================== +-- Step 3: 新增菜单权限 +-- 结构:项目管理(2130, M-type目录) → 项目列表(2131, C-type) → 按钮(2132-2135, F-type) +-- ===================================================== + +-- Step 3.1: 创建主菜单目录(M=目录, parent_id=0 表示顶级菜单) +INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT 2130, '项目管理', 0, + 5, 'project', '', '', '', 1, 0, 'M', '0', '0', + '', 'project', 'admin', CURRENT_TIMESTAMP, '', null, '项目管理目录' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id = 2130); + +-- Step 3.2: 创建菜单页面(C=菜单页面) +INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT 2131, '项目列表', 2130, + 1, 'project-mgmt', 'Management/ProjectMgmt', '', 'ProjectMgmt', 1, 0, 'C', '0', '0', + 'cms:project:list', '#', 'admin', CURRENT_TIMESTAMP, '', null, '项目列表菜单' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id = 2131); + +-- Step 3.3: 新增按钮权限(F=按钮, parent_id=2131 归属到项目列表下) +-- 项目查询 +INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT 2132, '项目查询', 2131, 1, '', '', '', '', 1, 0, 'F', '0', '0', + 'cms:project:query', '#', 'admin', CURRENT_TIMESTAMP, '', null, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id = 2132); + +-- 项目新增 +INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT 2133, '项目新增', 2131, 2, '', '', '', '', 1, 0, 'F', '0', '0', + 'cms:project:add', '#', 'admin', CURRENT_TIMESTAMP, '', null, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id = 2133); + +-- 项目修改 +INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT 2134, '项目修改', 2131, 3, '', '', '', '', 1, 0, 'F', '0', '0', + 'cms:project:edit', '#', 'admin', CURRENT_TIMESTAMP, '', null, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id = 2134); + +-- 项目删除 +INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT 2135, '项目删除', 2131, 4, '', '', '', '', 1, 0, 'F', '0', '0', + 'cms:project:remove', '#', 'admin', CURRENT_TIMESTAMP, '', null, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id = 2135); + +-- ===================================================== +-- Step 3.4: 将新菜单分配给角色 +-- 管理员角色(role_key='admin')通配符 *:*:* 自动拥有全部权限,无需分配 +-- ===================================================== +INSERT INTO sys_role_menu (role_id, menu_id) +SELECT r.role_id, 2130 +FROM sys_role r +WHERE r.role_key != 'admin' + AND NOT EXISTS (SELECT 1 FROM sys_role_menu rm WHERE rm.role_id = r.role_id AND rm.menu_id = 2130); + +INSERT INTO sys_role_menu (role_id, menu_id) +SELECT r.role_id, 2131 +FROM sys_role r +WHERE r.role_key != 'admin' + AND NOT EXISTS (SELECT 1 FROM sys_role_menu rm WHERE rm.role_id = r.role_id AND rm.menu_id = 2131); + +INSERT INTO sys_role_menu (role_id, menu_id) +SELECT r.role_id, 2132 +FROM sys_role r +WHERE r.role_key != 'admin' + AND NOT EXISTS (SELECT 1 FROM sys_role_menu rm WHERE rm.role_id = r.role_id AND rm.menu_id = 2132); + +INSERT INTO sys_role_menu (role_id, menu_id) +SELECT r.role_id, 2133 +FROM sys_role r +WHERE r.role_key != 'admin' + AND NOT EXISTS (SELECT 1 FROM sys_role_menu rm WHERE rm.role_id = r.role_id AND rm.menu_id = 2133); + +INSERT INTO sys_role_menu (role_id, menu_id) +SELECT r.role_id, 2134 +FROM sys_role r +WHERE r.role_key != 'admin' + AND NOT EXISTS (SELECT 1 FROM sys_role_menu rm WHERE rm.role_id = r.role_id AND rm.menu_id = 2134); + +INSERT INTO sys_role_menu (role_id, menu_id) +SELECT r.role_id, 2135 +FROM sys_role r +WHERE r.role_key != 'admin' + AND NOT EXISTS (SELECT 1 FROM sys_role_menu rm WHERE rm.role_id = r.role_id AND rm.menu_id = 2135); + +-- ===================================================== +-- 验证 SQL(可选执行) +-- ===================================================== +-- 检查表是否创建成功 +-- SELECT * FROM shz.cms_project LIMIT 1; +-- SELECT * FROM shz.cms_project_comment LIMIT 1; + +-- 检查菜单是否创建成功 +-- SELECT * FROM sys_menu WHERE menu_id BETWEEN 2130 AND 2135; + +-- 检查角色菜单关联 +-- SELECT r.role_name, m.menu_name FROM sys_role_menu rm +-- JOIN sys_role r ON r.role_id = rm.role_id +-- JOIN sys_menu m ON m.menu_id = rm.menu_id +-- WHERE rm.menu_id BETWEEN 2130 AND 2135; From f616f32daebb2fb36f9f7fd3f58212c1a36ab616 Mon Sep 17 00:00:00 2001 From: chenyanchang <30190327@qq.com> Date: Tue, 7 Jul 2026 09:00:14 +0800 Subject: [PATCH 05/61] update --- .../cms/service/policy/impl/PolicyInfoServiceImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/policy/impl/PolicyInfoServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/policy/impl/PolicyInfoServiceImpl.java index cf9a81b..bfa252b 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/policy/impl/PolicyInfoServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/policy/impl/PolicyInfoServiceImpl.java @@ -37,10 +37,10 @@ public class PolicyInfoServiceImpl implements IPolicyInfoService { String policyTag = query.getPolicyTag().trim(); if (StringUtils.isNotEmpty(policyTag) && policyTag.endsWith(",")) { policyTag = policyTag.substring(0, policyTag.length() - 1); - if (StringUtils.isNotEmpty(policyTag) && StringUtils.isNotEmpty(policyTag.trim())) { - List policyTags = Arrays.asList(policyTag.trim().split(",")); - query.setPolicyTags(policyTags); - } + } + if (StringUtils.isNotEmpty(policyTag) && StringUtils.isNotEmpty(policyTag.trim())) { + List policyTags = Arrays.asList(policyTag.trim().split(",")); + query.setPolicyTags(policyTags); } } // 仅返回启用状态的政策给前端 From 3a62826ed272ee0142c55352a1710f4226d8501a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E8=BE=89?= Date: Tue, 7 Jul 2026 15:41:00 +0800 Subject: [PATCH 06/61] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=8A=9F=E8=83=BDbug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cms/controller/cms/ProjectController.java | 20 +++++++++++++++++++ .../java/com/ruoyi/cms/domain/Project.java | 3 +++ .../cms/service/impl/ProjectServiceImpl.java | 1 + sql/migration_project_add_company_id.sql | 13 ++++++++++++ 4 files changed, 37 insertions(+) create mode 100644 sql/migration_project_add_company_id.sql diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/ProjectController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/ProjectController.java index 042eea4..0a43211 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/ProjectController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/ProjectController.java @@ -1,14 +1,18 @@ package com.ruoyi.cms.controller.cms; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import com.ruoyi.cms.domain.Project; import com.ruoyi.cms.domain.ProjectComment; +import com.ruoyi.cms.service.ICompanyService; import com.ruoyi.cms.service.IProjectCommentService; import com.ruoyi.cms.service.IProjectService; +import com.ruoyi.cms.util.RoleUtils; +import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; @@ -44,6 +48,9 @@ public class ProjectController extends BaseController @Autowired private IProjectCommentService projectCommentService; + @Autowired + private ICompanyService companyService; + /** * 获取项目的评论列表 */ @@ -83,6 +90,13 @@ public class ProjectController extends BaseController @GetMapping("/list") public TableDataInfo list(Project query) { + if (RoleUtils.isCompanyAdmin()) { + Company company = companyService.queryCodeCompany(RoleUtils.getCurrentUseridCard()); + if (company == null) { + return getDataTable(new ArrayList<>()); + } + query.setCompanyId(company.getCompanyId()); + } startPage(); List list = projectService.selectProjectList(query); return getDataTable(list); @@ -108,6 +122,12 @@ public class ProjectController extends BaseController @PostMapping public AjaxResult add(@RequestBody Project project) { + if (RoleUtils.isCompanyAdmin()) { + Company company = companyService.queryCodeCompany(RoleUtils.getCurrentUseridCard()); + if (company != null) { + project.setCompanyId(company.getCompanyId()); + } + } return toAjax(projectService.save(project)); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Project.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Project.java index 5d92f40..113ffda 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Project.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Project.java @@ -66,4 +66,7 @@ public class Project extends BaseEntity @ApiModelProperty("状态 0草稿 1发布") private String status; + + @ApiModelProperty("归属企业ID") + private Long companyId; } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ProjectServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ProjectServiceImpl.java index 5911dec..dd03254 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ProjectServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ProjectServiceImpl.java @@ -30,6 +30,7 @@ public class ProjectServiceImpl wrapper.eq(StringUtils.isNotBlank(query.getRegion()), Project::getRegion, query.getRegion()); wrapper.eq(StringUtils.isNotBlank(query.getCooperationMode()), Project::getCooperationMode, query.getCooperationMode()); wrapper.eq(StringUtils.isNotBlank(query.getStatus()), Project::getStatus, query.getStatus()); + wrapper.eq(query.getCompanyId() != null, Project::getCompanyId, query.getCompanyId()); wrapper.orderByDesc(Project::getCreateTime); return list(wrapper); } diff --git a/sql/migration_project_add_company_id.sql b/sql/migration_project_add_company_id.sql new file mode 100644 index 0000000..ff62574 --- /dev/null +++ b/sql/migration_project_add_company_id.sql @@ -0,0 +1,13 @@ +-- ===================================================== +-- 项目管理 - 新增企业归属字段 +-- 为企业管理员实现按企业账号隔离项目数据 +-- ===================================================== + +-- 添加 company_id 列 +ALTER TABLE shz.cms_project ADD COLUMN IF NOT EXISTS company_id BIGINT; + +-- 添加注释 +COMMENT ON COLUMN shz.cms_project.company_id IS '归属企业ID'; + +-- 创建索引 +CREATE INDEX IF NOT EXISTS idx_cms_project_company_id ON shz.cms_project(company_id); From dc414dba3490cb256bb8574f9bf5e9c423ddf78f Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Tue, 7 Jul 2026 16:06:10 +0800 Subject: [PATCH 07/61] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=9F=B3=E6=B2=B3?= =?UTF-8?q?=E5=AD=90=E6=9C=AC=E5=9C=B0=E6=95=B0=E6=8D=AE=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cms/controller/cms/CmsJobController.java | 98 +++++++- .../main/java/com/ruoyi/cms/domain/Job.java | 2 +- .../cms/domain/vo/ContactParseResult.java | 14 ++ .../cms/domain/vo/ContactUploadItem.java | 13 + .../cms/domain/vo/EducationParseResult.java | 11 + .../ruoyi/cms/domain/vo/JobLocalExcelVo.java | 127 ++++++++++ .../ruoyi/cms/domain/vo/SalaryParseDTO.java | 19 ++ .../com/ruoyi/cms/service/IJobService.java | 2 + .../cms/service/impl/JobServiceImpl.java | 19 ++ .../java/com/ruoyi/cms/util/StringUtil.java | 39 +++ .../cms/util/excel/ContactParseConverter.java | 48 ++++ .../cms/util/excel/ContactParseUtil.java | 227 ++++++++++++++++++ .../cms/util/excel/EducationConverter.java | 40 +++ .../cms/util/excel/EducationParseUtil.java | 93 +++++++ .../cms/util/excel/JobExcelListener.java | 186 ++++++++++++++ .../cms/util/excel/SalaryParseConverter.java | 40 +++ .../ruoyi/cms/util/excel/SalaryParseUtil.java | 159 ++++++++++++ .../com/ruoyi/cms/util/excel/SalaryType.java | 11 + .../cms/util/excel/VacancyLongConverter.java | 63 +++++ 19 files changed, 1206 insertions(+), 5 deletions(-) create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/ContactParseResult.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/ContactUploadItem.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/EducationParseResult.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/JobLocalExcelVo.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/SalaryParseDTO.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/ContactParseConverter.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/ContactParseUtil.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/EducationConverter.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/EducationParseUtil.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/JobExcelListener.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/SalaryParseConverter.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/SalaryParseUtil.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/SalaryType.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/VacancyLongConverter.java diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsJobController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsJobController.java index c9d4024..0107bd6 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsJobController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsJobController.java @@ -1,14 +1,21 @@ package com.ruoyi.cms.controller.cms; +import cn.hutool.core.bean.BeanUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.enums.CellExtraTypeEnum; import com.alibaba.fastjson.JSON; import com.ruoyi.cms.domain.*; +import com.ruoyi.cms.domain.query.CompanySearch; import com.ruoyi.cms.domain.query.ESJobSearch; import com.ruoyi.cms.domain.query.JobSearch; import com.ruoyi.cms.domain.vo.CandidateVO; import com.ruoyi.cms.domain.vo.CompanyVo; +import com.ruoyi.cms.domain.vo.ContactParseResult; +import com.ruoyi.cms.domain.vo.JobLocalExcelVo; import com.ruoyi.cms.service.*; import com.ruoyi.cms.util.RoleUtils; import com.ruoyi.cms.util.StringUtil; +import com.ruoyi.cms.util.excel.JobExcelListener; import com.ruoyi.cms.util.sensitiveWord.SensitiveWordChecker; import com.ruoyi.common.annotation.Anonymous; import com.ruoyi.common.annotation.Log; @@ -26,16 +33,17 @@ import com.ruoyi.common.utils.poi.ExcelUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Objects; +import java.io.InputStream; +import java.util.*; +import java.util.stream.Collectors; /** * 岗位Controller @@ -381,5 +389,87 @@ public class CmsJobController extends BaseController return success(jobService.updateReviewStatus(jobId, reviewStatus)); } + /** + * 通用上传请求(单个) + */ + @PostMapping("/shzLocalUploadFile") + @PreAuthorize("@ss.hasPermi('cms:job:shzLocalUploadFile')") + @ApiOperation("石河子本地岗位上传") + public AjaxResult shzLocalUploadFile(@RequestParam("file") MultipartFile file) throws Exception { + if (file.isEmpty()) { + return AjaxResult.error("上传文件不能为空"); + } + String fileName = file.getOriginalFilename(); + if (fileName == null || !fileName.endsWith(".xlsx") && !fileName.endsWith(".xls")) { + return AjaxResult.error("请上传Excel格式的文件"); + } + try (InputStream inputStream = file.getInputStream()){ + JobExcelListener listener = new JobExcelListener(); + EasyExcel.read(inputStream, JobLocalExcelVo.class, listener).extraRead(CellExtraTypeEnum.MERGE).sheet(1).headRowNumber(2).doRead(); + + if (listener.hasColumnError()) { + return AjaxResult.error(listener.getColumnErrorMsg()); + } + List validDataList = listener.getValidDataList(); + + if (CollectionUtils.isEmpty(validDataList)) { + return AjaxResult.error("Excel文件中无有效数据!"); + } + //获取企业id + List allCompany = companyService.selectCompanyList(new CompanySearch()); + String string = UUID.randomUUID().toString(); + //获取jobs + List jobs = validDataList.stream().map(excelVo -> { + Job job = new Job(); + // 基础字段赋值 + BeanUtil.copyProperties(excelVo, job); + job.setIsPublish(1);//发布 + job.setView(0L); + job.setApplyNum(0); + job.setCreateBy(string); + job.setJobLocation(job.getJobAddress()); + job.setCompanyId(getCompanyId(allCompany, job.getCompanyName())); + job.setPostingDate(DateUtils.getTime()); + String companyName=StringUtils.isNotEmpty(job.getCompanyName())?job.getCompanyName():null; + // 联系方式转换 + List contactList = new ArrayList<>(); + ContactParseResult parseResult = excelVo.getContactParseResult(); + if (parseResult != null && parseResult.getContactItemList() != null) { + parseResult.getContactItemList().stream() + .filter(item -> StringUtils.isNotBlank(item.getPhone().trim())) + .map(item -> { + JobContact c = new JobContact(); + c.setContactPerson(companyName); + c.setContactPersonPhone(item.getPhone().trim()); + c.setRemark(item.getRemark()); + return c; + }).forEach(contactList::add); + } + if (!contactList.isEmpty()) { + job.setJobContactList(contactList); + } + return job; + }).collect(Collectors.toList()); + jobService.shzLocalUploadFile(jobs); + return AjaxResult.success("已上传!"); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); + } + } + + /** + * @param allCompany + * @param aab004 + * @return + */ + private Long getCompanyId(List allCompany, String aab004) { + for (Company company:allCompany){ + if(company.getName().equals(aab004)){ + return company.getCompanyId(); + } + } + return null; + } } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Job.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Job.java index 6d065d4..641fd35 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Job.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Job.java @@ -128,7 +128,7 @@ public class Job extends BaseEntity @ApiModelProperty("是否发布 0未发布 1发布") private Integer isPublish; - @ApiModelProperty("数据来源") + @ApiModelProperty("数据来源 5本地石河子模板导入") private String dataSource; @ApiModelProperty("岗位链接") diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/ContactParseResult.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/ContactParseResult.java new file mode 100644 index 0000000..1857e9d --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/ContactParseResult.java @@ -0,0 +1,14 @@ +package com.ruoyi.cms.domain.vo; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class ContactParseResult { + // 单元格原始完整文本(用于拼接进描述) + private String rawText; + // 拆分后的多条联系人 + private List contactItemList= new ArrayList<>(); +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/ContactUploadItem.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/ContactUploadItem.java new file mode 100644 index 0000000..6b42215 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/ContactUploadItem.java @@ -0,0 +1,13 @@ +package com.ruoyi.cms.domain.vo; + +import lombok.Data; + +@Data +public class ContactUploadItem { + // 联系人姓名:马经理、王女士、刘老师 + private String name; + // 号码:手机号/固话 + private String phone; + // 剩余备注:(微信同步)、部分岗位有五险一金 + private String remark; +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/EducationParseResult.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/EducationParseResult.java new file mode 100644 index 0000000..7db3a44 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/EducationParseResult.java @@ -0,0 +1,11 @@ +package com.ruoyi.cms.domain.vo; + +import lombok.Data; + +@Data +public class EducationParseResult { + // 学历编码 -1=不限 + private Integer educationCode; + // 原始学历文本 + private String rawText; +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/JobLocalExcelVo.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/JobLocalExcelVo.java new file mode 100644 index 0000000..bd35463 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/JobLocalExcelVo.java @@ -0,0 +1,127 @@ +package com.ruoyi.cms.domain.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.cms.domain.JobContact; +import com.ruoyi.cms.util.excel.ContactParseConverter; +import com.ruoyi.cms.util.excel.EducationConverter; +import com.ruoyi.cms.util.excel.SalaryParseConverter; +import com.ruoyi.cms.util.excel.VacancyLongConverter; +import com.ruoyi.common.annotation.Excel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 岗位对象 job + */ +@Data +public class JobLocalExcelVo +{ + + @ExcelProperty(value = "序号", index = 0) + @Excel(name = "序号") + @ApiModelProperty("序号") + private String xh; + + @ExcelProperty(value = "所属行业", index = 1) + @Excel(name = "所属行业") + @ApiModelProperty("所属行业") + private String jobCategory; + + @ExcelProperty(value = "单位名称", index = 2) + @Excel(name = "单位名称") + @ApiModelProperty("单位名称") + private String companyName; + + @ExcelProperty(value = "工作地点", index = 3) + @ApiModelProperty("工作地点") + private String jobAddress; + + @ExcelProperty(value = "岗位工种名称", index = 4) + @Excel(name = "岗位工种名称") + @ApiModelProperty("岗位工种名称") + private String jobTitle; + + @ExcelProperty(value = "招聘人数", index = 5,converter = VacancyLongConverter.class) + @Excel(name = "招聘人数") + @ApiModelProperty("招聘人数") + private Long vacancies; + + @ExcelProperty(value = "任职要求", index = 6) + @ApiModelProperty("任职要求") + private String description; + + @ExcelProperty(value = "学历要求", index = 7,converter = EducationConverter.class) + private EducationParseResult educationResult; + + @ExcelProperty(value = "工资待遇元/月", index = 8, converter = SalaryParseConverter.class) + @Excel(name = "工资待遇元/月") + @ApiModelProperty("工资待遇元/月") + private SalaryParseDTO salaryParseDto; + + @ExcelProperty(value = "联系人对象", index = 9, converter = ContactParseConverter.class) + private ContactParseResult contactParseResult; + + @ExcelProperty(value = "岗位收集人", index = 10) + @ApiModelProperty("岗位收集人") + private String gwsjr; + + @ExcelProperty(value = "联系人") + @ApiModelProperty("联系人") + private String contactPerson; + + @ExcelProperty(value = "联系人电话") + @ApiModelProperty("联系人电话") + private String contactPersonPhone; + + @ExcelProperty(value = "最小薪资") + @Excel(name = "最小薪资", readConverterExp = "元=") + @ApiModelProperty("最小薪资(元)") + private Long minSalary; + + @ExcelProperty(value = "最大薪资") + @Excel(name = "最大薪资", readConverterExp = "元=") + @ApiModelProperty("最大薪资(元)") + private Long maxSalary; + + @ExcelProperty(value = "岗位区划") + @Excel(name = "岗位区划") + @ApiModelProperty("岗位区划") + private String jobLocation; + + @ExcelProperty(value = "工作经验") + @Excel(name = "工作经验要求 对应字典experience") + @ApiModelProperty("工作经验要求 对应字典experience") + private String experience; + + @ExcelProperty(value = "岗位类型") + @ApiModelProperty("岗位类型 0疆内 1疆外") + private String jobType; + + @ExcelProperty(value = "类型") + @ApiModelProperty("类型 0常规岗位 1就业见习岗位 2实习实训岗位 3社区实践岗位 4零工 对应字段字典position_type") + private String type; + + @ApiModelProperty("是否发布 0未发布 1发布") + private Integer isPublish; + + @ApiModelProperty("工作地点区县字典代码") + private Integer jobLocationAreaCode; + + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "发布时间", width = 30, dateFormat = "yyyy-MM-dd") + @ApiModelProperty("发布时间") + private String postingDate; + + @ApiModelProperty("数据来源") + private String dataSource; + + @Excel(name = "学历要求 对应字典education") + @ApiModelProperty("学历要求 对应字典education") + private String education; + + @ApiModelProperty("联系人列表") + private List jobContacts; +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/SalaryParseDTO.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/SalaryParseDTO.java new file mode 100644 index 0000000..b876260 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/SalaryParseDTO.java @@ -0,0 +1,19 @@ +package com.ruoyi.cms.domain.vo; + +import com.ruoyi.cms.util.excel.SalaryType; +import lombok.Data; +import java.math.BigDecimal; + +@Data +public class SalaryParseDTO { + // 薪资类型 + private SalaryType salaryType; + // 最低薪资(按月统一换算,单位:元) + private Long minMoney; + // 最高薪资 + private Long maxMoney; + // 原始文本 + private String originalText; + // 福利/备注剩余文字 + private String remark; +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IJobService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IJobService.java index 6336620..e155036 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IJobService.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IJobService.java @@ -116,4 +116,6 @@ public interface IJobService Long updateReviewStatus(Long jobId, String reviewStatus); List getRecommendByJobId(Long jobId); + + void shzLocalUploadFile(List jobs); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobServiceImpl.java index 0e79be2..d5122b5 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobServiceImpl.java @@ -1286,4 +1286,23 @@ public class JobServiceImpl extends ServiceImpl implements IJobSe } return list; } + + @Override + public void shzLocalUploadFile(List jobs) { + List allContactList = new ArrayList<>(); + for (Job job : jobs) { + jobMapper.insert(job); + List contactList = job.getJobContactList(); + if (CollectionUtils.isEmpty(contactList)) { + continue; + } + contactList.forEach(c -> c.setJobId(job.getJobId())); + allContactList.addAll(contactList); + } + if (!allContactList.isEmpty()) { + jobContactMapper.batchInsert(allContactList); + } + //刷新es + iesJobSearchService.resetTextCache(); + } } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/StringUtil.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/StringUtil.java index 8b75287..d5a7e97 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/StringUtil.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/StringUtil.java @@ -11,6 +11,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; public class StringUtil { @@ -97,6 +99,16 @@ public class StringUtil { private static final String SEPARATOR = "-"; private static final String DEFAULT_VALUE = "0"; + /** + * 本地石河子模板导入 + */ + public static final String DATA_SOURCE_LOCAL = "5"; + + /** + * 截取数字 + */ + private static final Pattern DIGIT_PATTERN = Pattern.compile("\\d+"); + /** * 身份证规则 */ @@ -349,4 +361,31 @@ public class StringUtil { // 两端不同,正常拼接 return min + SEPARATOR + max; } + + /** + * 处理上传中人数问题 + * @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; + } } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/ContactParseConverter.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/ContactParseConverter.java new file mode 100644 index 0000000..9b3e97c --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/ContactParseConverter.java @@ -0,0 +1,48 @@ +package com.ruoyi.cms.util.excel; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; +import com.ruoyi.cms.domain.vo.ContactParseResult; + +import java.math.BigDecimal; + +public class ContactParseConverter implements Converter { + + @Override + public ContactParseResult convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { + ContactParseResult res = new ContactParseResult(); + String raw = ""; + if (cellData != null) { + // 正确枚举:CellDataTypeEnum,包路径enums下 + CellDataTypeEnum cellType = cellData.getType(); + if (CellDataTypeEnum.STRING.equals(cellType)) { + raw = cellData.getStringValue() == null ? "" : cellData.getStringValue(); + } else if (CellDataTypeEnum.NUMBER.equals(cellType)) { + // 数字单元格转完整字符串,避免科学计数 + BigDecimal numVal = cellData.getNumberValue(); + raw = numVal.toPlainString(); + } else if (CellDataTypeEnum.BOOLEAN.equals(cellType)) { + raw = String.valueOf(cellData.getBooleanValue()); + } else if (CellDataTypeEnum.EMPTY.equals(cellType)) { + raw = ""; + } + } + res.setRawText(raw); + // 拆分多条联系人 + res.setContactItemList(ContactParseUtil.parse(raw)); + return res; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public Class supportJavaTypeKey() { + return ContactParseResult.class; + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/ContactParseUtil.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/ContactParseUtil.java new file mode 100644 index 0000000..ff8036c --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/ContactParseUtil.java @@ -0,0 +1,227 @@ +package com.ruoyi.cms.util.excel; + +import com.ruoyi.cms.domain.vo.ContactUploadItem; +import org.apache.commons.lang3.StringUtils; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 分层联系人解析工具 + * 方案B:同时支持手机号、座机、邮箱,解决1750993xxxx 带出0993xxxx问题 + * 实现逻辑:先提取并屏蔽手机号,再解析座机,避免手机号内部数字误匹配座机 + * name固定空,remark存储Excel完整原始单元格文本 + * \n /
自动拆分多行 + */ +public class ContactParseUtil { + + // 11位纯数字手机号 + private static final Pattern MOBILE_11 = Pattern.compile("1[3-9]\\d{9}"); + // 11位掩码手机号 + private static final Pattern MOBILE_MASK_11 = Pattern.compile("1[3-9][0-9xX]{10}"); + // 带横杠固定电话 0993-xxxxxx / 0993—xxxxxx + private static final Pattern TEL_FULL = Pattern.compile("(0\\d{2,4}[—-])(\\d{4,8})"); + // 无横杠纯数字座机 0开头6~12位 + private static final Pattern TEL_PURE_NUM = Pattern.compile("0\\d{6,12}"); + // 提取区号前缀 + private static final Pattern AREA_PREFIX = Pattern.compile("0\\d{2,4}[—-]"); + // 兼容掩码邮箱正则 + private static final Pattern EMAIL_PATTERN = Pattern.compile("[a-zA-Z0-9xX._-]+@[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_.+-]+"); + + // 对外统一入口 + public static List parse(String source) { + List result = new ArrayList<>(); + if (StringUtils.isBlank(source)) { + return result; + } + String fullOriginalText = source; + List lineList = splitTopMultiLine(source); + for (String line : lineList) { + String trimLine = line.trim(); + if (StringUtils.isBlank(trimLine)) { + continue; + } + if (trimLine.contains(":")) { + handleColonTypeLine(trimLine, result, fullOriginalText); + } else { + handleNormalLine(trimLine, result, fullOriginalText); + } + } + return result; + } + + /** + * \n \r

全部作为独立分隔符,拆分为多行联系人 + */ + private static List splitTopMultiLine(String source) { + List lineResult = new ArrayList<>(); + String temp = source.replace("\n", "|") + .replace("\r", "|") + .replace("
", "|") + .replace("
", "|"); + String[] arr = temp.split("\\|"); + for (String s : arr) { + String trimStr = s.trim(); + if (StringUtils.isNotBlank(trimStr)) { + lineResult.add(trimStr); + } + } + return lineResult; + } + + /** + * 处理 文字:联系方式 冒号格式,name固定空 + */ + private static void handleColonTypeLine(String line, List result, String fullSource) { + String[] colonArr = line.split(":", 2); + String contactArea = colonArr.length > 1 ? colonArr[1].trim() : ""; + String contactVal = extractAllContact(contactArea); + if (StringUtils.isBlank(contactVal)) { + return; + } + ContactUploadItem item = new ContactUploadItem(); + item.setName(""); + item.setPhone(contactVal); + item.setRemark(fullSource); + result.add(item); + } + + /** + * 无冒号普通行,不提取任何汉字姓名,name固定空 + */ + private static void handleNormalLine(String line, List result, String fullSource) { + boolean hasContact = existContact(line); + if (!hasContact) { + return; + } + String areaPrefix = extractAreaPrefix(line); + List segList = splitContactSegment(line); + for (String seg : segList) { + String segTrim = seg.trim(); + if (StringUtils.isBlank(segTrim)) { + continue; + } + // 判断当前片段是否是完整手机号,是则不拼接区号 + boolean isMobile = checkTextHasMobile(segTrim); + String segComplete; + if (isMobile) { + segComplete = segTrim; + } else { + segComplete = autoFillAreaCode(segTrim, areaPrefix); + } + String contactVal = extractAllContact(segComplete); + if (StringUtils.isBlank(contactVal)) { + continue; + } + ContactUploadItem item = new ContactUploadItem(); + item.setName(""); + item.setPhone(contactVal); + item.setRemark(fullSource); + result.add(item); + } + } + + /** + * 判断文本是否包含手机号(纯数字/掩码) + */ + private static boolean checkTextHasMobile(String text) { + return MOBILE_MASK_11.matcher(text).find() + || MOBILE_11.matcher(text).find(); + } + + /** + * 判断文本是否包含任意联系方式 + */ + private static boolean existContact(String text) { + return MOBILE_MASK_11.matcher(text).find() + || MOBILE_11.matcher(text).find() + || TEL_FULL.matcher(text).find() + || TEL_PURE_NUM.matcher(text).find() + || EMAIL_PATTERN.matcher(text).find(); + } + + /** + * 提取全部有效联系方式:手机号、带横杠固话、纯数字座机、邮箱 + * 核心修复逻辑:先缓存手机号、屏蔽手机号文本,再匹配座机,避免手机号内部数字误匹配座机 + */ + private static String extractAllContact(String text) { + List mobileCache = new ArrayList<>(); + // 1. 缓存所有手机号,并用占位符替换,屏蔽内部数字 + Matcher maskMobileMatcher = MOBILE_MASK_11.matcher(text); + while (maskMobileMatcher.find()) { + mobileCache.add(maskMobileMatcher.group()); + } + String tempText = text.replaceAll(MOBILE_MASK_11.pattern(), "#MOBILE#"); + + Matcher mobileMatcher = MOBILE_11.matcher(tempText); + while (mobileMatcher.find()) { + mobileCache.add(mobileMatcher.group()); + } + tempText = tempText.replaceAll(MOBILE_11.pattern(), "#MOBILE#"); + + StringBuilder sb = new StringBuilder(); + // 2. 先回填所有手机号 + for (String mobile : mobileCache) { + sb.append(mobile).append(" "); + } + + // 3. 在屏蔽手机号后的文本里匹配座机,不会捕获手机号内部数字 + // 带横杠固话 + Matcher telMatcher = TEL_FULL.matcher(tempText); + while (telMatcher.find()) { + sb.append(telMatcher.group(1)).append(telMatcher.group(2)).append(" "); + } + // 无横杠纯数字座机 + Matcher telPureMatcher = TEL_PURE_NUM.matcher(tempText); + while (telPureMatcher.find()) { + sb.append(telPureMatcher.group()).append(" "); + } + // 4. 匹配邮箱不受影响 + Matcher emailMatcher = EMAIL_PATTERN.matcher(text); + while (emailMatcher.find()) { + sb.append(emailMatcher.group()).append(" "); + } + return sb.toString().trim(); + } + + /** + * 提取区号前缀 + */ + private static String extractAreaPrefix(String text) { + Matcher matcher = AREA_PREFIX.matcher(text); + if (matcher.find()) { + return matcher.group(); + } + return ""; + } + + /** + * 仅4~8位纯数字短号 且 不是手机号才自动拼接区号 + */ + private static String autoFillAreaCode(String seg, String areaCode) { + if (StringUtils.isBlank(areaCode)) { + return seg; + } + // 只有纯数字4-8位,且不包含手机号才补区号 + if (seg.matches("\\d{4,8}") && !checkTextHasMobile(seg)) { + return areaCode + seg; + } + return seg; + } + + /** + * 按 / , ,分割多个联系方式片段 + */ + private static List splitContactSegment(String line) { + List segResult = new ArrayList<>(); + String[] arr = line.split("[/,,]"); + for (String s : arr) { + String trimStr = s.trim(); + if (StringUtils.isNotBlank(trimStr)) { + segResult.add(trimStr); + } + } + return segResult; + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/EducationConverter.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/EducationConverter.java new file mode 100644 index 0000000..9421a62 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/EducationConverter.java @@ -0,0 +1,40 @@ +package com.ruoyi.cms.util.excel; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; +import com.ruoyi.cms.domain.vo.EducationParseResult; + +/** + * 学历文本转字典编码转换器 + */ +public class EducationConverter implements Converter { + + @Override + public EducationParseResult convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { + String text = ""; + if (cellData != null && cellData.getStringValue() != null) { + text = cellData.getStringValue(); + } + try { + return EducationParseUtil.parseDetail(text); + } catch (Exception e) { + EducationParseResult err = new EducationParseResult(); + err.setRawText(text); + err.setEducationCode(-1); + return err; + } + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public Class supportJavaTypeKey() { + return Integer.class; + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/EducationParseUtil.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/EducationParseUtil.java new file mode 100644 index 0000000..cb3856d --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/EducationParseUtil.java @@ -0,0 +1,93 @@ +package com.ruoyi.cms.util.excel; + +import com.ruoyi.cms.domain.vo.EducationParseResult; +import org.apache.commons.lang3.StringUtils; +import java.util.HashMap; +import java.util.Map; + +public class EducationParseUtil { + private static final Map EDUCATION_MAP = new HashMap<>(); + + static { + EDUCATION_MAP.put("初中及以下", 0); + EDUCATION_MAP.put("中专/中技", 1); + EDUCATION_MAP.put("高中", 2); + EDUCATION_MAP.put("大专", 3); + EDUCATION_MAP.put("本科", 4); + EDUCATION_MAP.put("硕士", 5); + EDUCATION_MAP.put("博士", 6); + EDUCATION_MAP.put("mba/emba", 7); + EDUCATION_MAP.put("留学-学士", 8); + EDUCATION_MAP.put("留学-硕士", 9); + EDUCATION_MAP.put("留学-博士", 10); + EDUCATION_MAP.put("不限", -1); + } + + /** + * 只返回编码(原有方法保留兼容) + */ + public static Integer parse(String source) { + EducationParseResult result = parseDetail(source); + return result.getEducationCode(); + } + + /** + * 完整解析,返回编码+原文+识别标记(核心) + */ + public static EducationParseResult parseDetail(String source) { + EducationParseResult result = new EducationParseResult(); + String raw = source == null ? "" : source.trim(); + result.setRawText(raw); + result.setEducationCode(-1); + + if (StringUtils.isBlank(raw)) { + // 空白:不限,识别成功 + return result; + } + String text = raw.toLowerCase(); + + // 1. 不限 + if (text.contains("不限") || text.contains("无要求") || text.equals("无")) { + result.setEducationCode(-1); + return result; + } + + // 2. MBA/EMBA + if (text.contains("mba") || text.contains("emba")) { + result.setEducationCode(7); + return result; + } + + // 3. 留学 + if (text.contains("留学") || text.contains("海外") || text.contains("国外")) { + if (text.contains("学士") || text.contains("本科")) { + result.setEducationCode(8); + return result; + } else if (text.contains("硕士")) { + result.setEducationCode(9); + return result; + } else if (text.contains("博士")) { + result.setEducationCode(10); + return result; + } + } + + // 4. 标准学历短句(正常识别) + if (text.contains("初中")) { + result.setEducationCode(0); + } else if (text.contains("中专") || text.contains("中技")) { + result.setEducationCode(1); + } else if (text.contains("高中")) { + result.setEducationCode(2); + } else if (text.contains("大专") || text.contains("专科")) { + result.setEducationCode(3); + } else if (text.contains("本科") || text.contains("大学")) { + result.setEducationCode(4); + } else if (text.contains("硕士") || text.contains("研究生")) { + result.setEducationCode(5); + } else if (text.contains("博士")) { + result.setEducationCode(6); + } + return result; + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/JobExcelListener.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/JobExcelListener.java new file mode 100644 index 0000000..0d84c3e --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/JobExcelListener.java @@ -0,0 +1,186 @@ +package com.ruoyi.cms.util.excel; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.enums.CellExtraTypeEnum; +import com.alibaba.excel.event.AnalysisEventListener; +import com.alibaba.excel.metadata.CellExtra; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.ruoyi.cms.domain.JobContact; +import com.ruoyi.cms.domain.vo.*; +import com.ruoyi.cms.util.StringUtil; +import lombok.Getter; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.lang.reflect.Field; + + +/** + * 企业岗位excel监听 + */ +@Getter +public class JobExcelListener extends AnalysisEventListener { + + private final List validDataList = new ArrayList<>(); + private final List mergeCellList = new ArrayList<>(); + private final Map columnFieldMap = new HashMap<>(); + private String columnErrorMsg; + + public JobExcelListener() { + initColumnFieldMap(); + } + + + @Override + public void invokeHead(Map> headMap, AnalysisContext context) { + + } + + @Override + public void extra(CellExtra extra, AnalysisContext context) { + if (extra.getType() == CellExtraTypeEnum.MERGE) { + mergeCellList.add(extra); + } + } + + @Override + public void invoke(JobLocalExcelVo jobExcelVo, AnalysisContext analysisContext) { + //薪资要求 + SalaryParseDTO dto = jobExcelVo.getSalaryParseDto(); + if (dto == null) { + dto = new SalaryParseDTO(); + dto.setSalaryType(SalaryType.FACE_TO_FACE); + dto.setOriginalText(""); + dto.setRemark("未读取到薪资列数据"); + } + jobExcelVo.setMinSalary(dto.getMinMoney()); + jobExcelVo.setMaxSalary(dto.getMaxMoney()); + String rawSalary = dto.getOriginalText(); + if (StringUtils.isNotBlank(rawSalary)) { + String desc = jobExcelVo.getDescription() == null ? "" : jobExcelVo.getDescription(); + String tag = "薪资待遇:" + rawSalary; + if (!desc.contains(tag)) { + jobExcelVo.setDescription(desc + "\n" + tag); + } + } + + ////学历要求 + EducationParseResult eduResult = jobExcelVo.getEducationResult(); + if (eduResult == null) { + eduResult = new EducationParseResult(); + eduResult.setEducationCode(-1); + eduResult.setRawText(""); + } + jobExcelVo.setEducation(String.valueOf(eduResult.getEducationCode())); + String rawEduText = eduResult.getRawText(); + if (StringUtils.isNotBlank(rawEduText)) { + String desc = jobExcelVo.getDescription() == null ? "" : jobExcelVo.getDescription(); + String tag = "学历要求:" + rawEduText; + if (!desc.contains(tag)) { + jobExcelVo.setDescription(desc + "\n" + tag); + } + } + + //处理联系方式 + ContactParseResult contactResult = jobExcelVo.getContactParseResult(); + if (contactResult == null) { + contactResult = new ContactParseResult(); + contactResult.setRawText(""); + } + // 遍历拆分好的【联系人+号码】,可单独入库 + List jobContacts=new ArrayList<>(); + for (ContactUploadItem item : contactResult.getContactItemList()) { + JobContact jobContact=new JobContact(); + if(StringUtils.isNotBlank(item.getPhone().trim())){ + String name = item.getName(); + String phone = item.getPhone(); + String remark = item.getRemark(); + jobContact.setContactPerson(name); + jobContact.setContactPersonPhone(phone); + jobContact.setRemark(remark); + jobContacts.add(jobContact); + } + } + if(!jobContacts.isEmpty()){ + jobExcelVo.setJobContacts(jobContacts); + } + //数据来源 + jobExcelVo.setDataSource(StringUtil.DATA_SOURCE_LOCAL); + validDataList.add(jobExcelVo); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + fillMergedCellData(analysisContext); + } + + /** + * 填充合并单元格空值,实现拆分效果 + */ + private void fillMergedCellData(AnalysisContext context) { + int headRowNum = context.readSheetHolder().getHeadRowNumber(); + if (columnFieldMap.isEmpty()) { + return; + } + + for (CellExtra merge : mergeCellList) { + int firstRow = merge.getFirstRowIndex(); + int lastRow = merge.getLastRowIndex(); + int firstCol = merge.getFirstColumnIndex(); + + // 跳过表头 + if (firstRow < headRowNum) { + continue; + } + Field field = columnFieldMap.get(firstCol); + if (field == null) { + continue; + } + + try { + int firstDataIndex = firstRow - headRowNum; + if (firstDataIndex >= validDataList.size()) { + continue; + } + // 获取合并首行的值 + Object mergeValue = field.get(validDataList.get(firstDataIndex)); + + // 给合并区域所有行赋值 + for (int row = firstRow + 1; row <= lastRow; row++) { + int dataIndex = row - headRowNum; + if (dataIndex >= validDataList.size()) { + continue; + } + field.set(validDataList.get(dataIndex), mergeValue); + } + } catch (Exception e) { + columnErrorMsg = "合并单元格填充失败:" + e.getMessage(); + } + } + } + + /** + * 扫描VO实体 @ExcelProperty(index) 构建列-字段映射 + */ + private void initColumnFieldMap() { + Class clazz = JobLocalExcelVo.class; + Field[] fields = clazz.getDeclaredFields(); + for (Field field : fields) { + ExcelProperty excelProp = field.getAnnotation(ExcelProperty.class); + if (excelProp == null || excelProp.index() < 0) { + continue; + } + field.setAccessible(true); + columnFieldMap.put(excelProp.index(), field); + } + } + + + public boolean hasColumnError() { + return StringUtils.isNotBlank(columnErrorMsg); + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/SalaryParseConverter.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/SalaryParseConverter.java new file mode 100644 index 0000000..9f209c3 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/SalaryParseConverter.java @@ -0,0 +1,40 @@ +package com.ruoyi.cms.util.excel; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; +import com.ruoyi.cms.domain.vo.SalaryParseDTO; + +public class SalaryParseConverter implements Converter { + + @Override + public SalaryParseDTO convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { + String text = ""; + if (cellData != null && cellData.getStringValue() != null) { + text = cellData.getStringValue(); + } + try { + return SalaryParseUtil.parse(text); + } catch (Exception e) { + SalaryParseDTO dto = new SalaryParseDTO(); + dto.setSalaryType(SalaryType.FACE_TO_FACE); + dto.setOriginalText(""); + dto.setRemark("薪资单元格为空/解析失败"); + dto.setMinMoney(null); + dto.setMaxMoney(null); + return dto; + } + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public Class supportJavaTypeKey() { + return SalaryParseDTO.class; + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/SalaryParseUtil.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/SalaryParseUtil.java new file mode 100644 index 0000000..ddc9889 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/SalaryParseUtil.java @@ -0,0 +1,159 @@ +package com.ruoyi.cms.util.excel; + +import com.ruoyi.cms.domain.vo.SalaryParseDTO; +import org.apache.commons.lang3.StringUtils; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class SalaryParseUtil { + + // 匹配面议关键词 + private static final Pattern FACE_PATTERN = Pattern.compile("(面议|薪资面议|工资面议)"); + // 年薪匹配 年薪14万、年薪12万元 + private static final Pattern YEAR_PATTERN = Pattern.compile("年薪(\\d+(\\.\\d+)?)[万w]"); + // 日薪 200-300/天、300元/天、200/天 + private static final Pattern DAY_PATTERN = Pattern.compile("(\\d+(\\.\\d+)?)-(\\d+(\\.\\d+)?)[/元]*天|(\\d+(\\.\\d+)?)[/元]*天"); + // 时薪 100元/小时、50/小时 + private static final Pattern HOUR_PATTERN = Pattern.compile("(\\d+(\\.\\d+)?)[/元]*小时"); + // 月薪区间 3000-5000、3000--5000、3500-6000元/月 + private static final Pattern MONTH_RANGE_PATTERN = Pattern.compile("(\\d+)[-–—]{1,2}(\\d+)"); + // 固定月薪 4000元、到手3100、应发6800、3800 + private static final Pattern MONTH_FIX_PATTERN = Pattern.compile("(到手|应发)?(\\d+)"); + // 模糊薪资 3500左右、5000+、3000以上 + private static final Pattern FUZZY_PATTERN = Pattern.compile("(\\d+)(左右|\\+|以上)"); + + // 每月折算工作日22天,每日8小时 + private static final BigDecimal DAY_TO_MONTH = new BigDecimal("22"); + private static final BigDecimal HOUR_TO_DAY = new BigDecimal("8"); + + public static SalaryParseDTO parse(String text) { + SalaryParseDTO dto = new SalaryParseDTO(); + if (StringUtils.isBlank(text)) { + dto.setSalaryType(SalaryType.FACE_TO_FACE); + dto.setOriginalText(""); + return dto; + } + // 清洗文本:去除引号、换行、多余空格、单位干扰词 + String origin = text.trim(); + String cleanText = origin.replace("\"", "") + .replace("\n", "") + .replace("\r", "") + .replaceAll("\\s+", " ") + .replace("元/月", "") + .replace("元", "") + .replace("/月", ""); + dto.setOriginalText(origin); + + // 1. 判断是否面议 + if (FACE_PATTERN.matcher(cleanText).find()) { + dto.setSalaryType(SalaryType.FACE_TO_FACE); + dto.setRemark(cleanText); + return dto; + } + + // 2. 年薪解析 + Matcher yearMatcher = YEAR_PATTERN.matcher(cleanText); + if (yearMatcher.find()) { + dto.setSalaryType(SalaryType.YEAR_SALARY); + BigDecimal yearWan = new BigDecimal(yearMatcher.group(1)); + BigDecimal yearTotal = yearWan.multiply(new BigDecimal("10000")); + BigDecimal month = yearTotal.divide(new BigDecimal("12"), 2, RoundingMode.HALF_UP); + dto.setMinMoney(month.longValue()); + dto.setMaxMoney(month.longValue()); + dto.setRemark(cleanText.replace(yearMatcher.group(), "").trim()); + return dto; + } + + // 3. 日薪解析,统一折算月薪 + Matcher dayMatcher = DAY_PATTERN.matcher(cleanText); + if (dayMatcher.find()) { + dto.setSalaryType(SalaryType.DAY_SALARY); + String minDayStr = dayMatcher.group(1); + String maxDayStr = dayMatcher.group(3); + BigDecimal minDay = new BigDecimal(StringUtils.isNotBlank(minDayStr) ? minDayStr : dayMatcher.group(5)); + BigDecimal maxDay = StringUtils.isNotBlank(maxDayStr) ? new BigDecimal(maxDayStr) : minDay; + // 折算月 + BigDecimal minMonth = minDay.multiply(DAY_TO_MONTH); + BigDecimal maxMonth = maxDay.multiply(DAY_TO_MONTH); + dto.setMinMoney(minMonth.longValue()); + dto.setMaxMoney(maxMonth.longValue()); + dto.setRemark(cleanText.replace(dayMatcher.group(), "").trim()); + return dto; + } + + // 4. 时薪解析 + Matcher hourMatcher = HOUR_PATTERN.matcher(cleanText); + if (hourMatcher.find()) { + dto.setSalaryType(SalaryType.HOUR_SALARY); + BigDecimal hour = new BigDecimal(hourMatcher.group(1)); + BigDecimal day = hour.multiply(HOUR_TO_DAY); + BigDecimal month = day.multiply(DAY_TO_MONTH); + dto.setMinMoney(month.longValue()); + dto.setMaxMoney(month.longValue()); + dto.setRemark(cleanText.replace(hourMatcher.group(), "").trim()); + return dto; + } + + // 5. 模糊薪资 3500左右、5000+ + Matcher fuzzyMatcher = FUZZY_PATTERN.matcher(cleanText); + if (fuzzyMatcher.find()) { + dto.setSalaryType(SalaryType.FUZZY_MONTH); + BigDecimal num = new BigDecimal(fuzzyMatcher.group(1)); + dto.setMinMoney(num.longValue()); + dto.setMaxMoney(null); + dto.setRemark(cleanText.replace(fuzzyMatcher.group(), "").trim()); + return dto; + } + + // 6. 月薪区间 3000-5000 + Matcher rangeMatcher = MONTH_RANGE_PATTERN.matcher(cleanText); + if (rangeMatcher.find()) { + dto.setSalaryType(SalaryType.MONTH_RANGE); + BigDecimal min = new BigDecimal(rangeMatcher.group(1)); + BigDecimal max = new BigDecimal(rangeMatcher.group(2)); + dto.setMinMoney(min.longValue()); + dto.setMaxMoney(max.longValue()); + dto.setRemark(cleanText.replace(rangeMatcher.group(), "").trim()); + return dto; + } + + // 7. 固定月薪 + Matcher fixMatcher = MONTH_FIX_PATTERN.matcher(cleanText); + if (fixMatcher.find()) { + dto.setSalaryType(SalaryType.MONTH_FIX); + BigDecimal val = new BigDecimal(fixMatcher.group(2)); + dto.setMinMoney(val.longValue()); + dto.setMaxMoney(val.longValue()); + dto.setRemark(cleanText.replace(fixMatcher.group(), "").trim()); + return dto; + } + + // 兜底:无法识别归为面议 + dto.setSalaryType(SalaryType.FACE_TO_FACE); + dto.setRemark(cleanText); + return dto; + } + + // 测试方法 +// public static void main(String[] args) { +// String test1 = "5000-6000元\n五险"; +// String test2 = "工资面议,包吃包住"; +// String test3 = "200-300/天"; +// String test4 = "年薪14万元,包食宿"; +// String test5 = "3500左右"; +// String test6 = "到手3100"; +// String test7 = "100元/小时"; +// String test8 = "底薪3000+提成"; +// +// System.out.println(parse(test1)); +// System.out.println(parse(test2)); +// System.out.println(parse(test3)); +// System.out.println(parse(test4)); +// System.out.println(parse(test5)); +// System.out.println(parse(test6)); +// System.out.println(parse(test7)); +// System.out.println(parse(test8)); +// } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/SalaryType.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/SalaryType.java new file mode 100644 index 0000000..3b4a3ca --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/SalaryType.java @@ -0,0 +1,11 @@ +package com.ruoyi.cms.util.excel; + +public enum SalaryType { + FACE_TO_FACE, // 面议 + MONTH_RANGE, // 月薪区间 + MONTH_FIX, // 固定月薪 + DAY_SALARY, // 日薪 + HOUR_SALARY, // 时薪 + YEAR_SALARY, // 年薪 + FUZZY_MONTH // 模糊(3500左右、5000+) +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/VacancyLongConverter.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/VacancyLongConverter.java new file mode 100644 index 0000000..b1acceb --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/VacancyLongConverter.java @@ -0,0 +1,63 @@ +package com.ruoyi.cms.util.excel; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; +import org.apache.commons.lang3.StringUtils; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 招聘人数文本转Long转换器 + */ +public class VacancyLongConverter implements Converter { + + private static final Pattern DIGIT_PATTERN = Pattern.compile("\\d+"); + + /** + * 读取Excel时,文本转Long + */ + @Override + public Long convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { + String source = cellData.getStringValue(); + return extractVacancyNum(source); + } + + /** + * 你的原有提取逻辑完整放入转换器内部 + */ + private 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; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public Class supportJavaTypeKey() { + return Long.class; + } +} \ No newline at end of file From 633d563f1e34a8ba7462c5b9c187ce164f137a58 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Tue, 7 Jul 2026 18:48:01 +0800 Subject: [PATCH 08/61] =?UTF-8?q?=E6=B7=BB=E5=8A=A0es=E4=B8=AD=E5=B2=97?= =?UTF-8?q?=E4=BD=8D=E8=81=94=E7=B3=BB=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/cms/domain/ESJobDocument.java | 4 ++++ .../com/ruoyi/cms/service/impl/ESJobSearchImpl.java | 3 +++ .../src/main/resources/mapper/app/JobMapper.xml | 13 ++++++++++--- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/ESJobDocument.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/ESJobDocument.java index 8500007..b4bab02 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/ESJobDocument.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/ESJobDocument.java @@ -161,6 +161,10 @@ public class ESJobDocument @IndexField(fieldType = FieldType.TEXT) private String companyVoJson; + @ApiModelProperty("岗位联系人信息") + @IndexField(fieldType = FieldType.TEXT) + private String jobContactVoJson; + @ApiModelProperty("是否发布 0未发布 1发布") private Integer isPublish; } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index b6cf01c..8630adb 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -188,8 +188,11 @@ public class ESJobSearchImpl implements IESJobSearchService esJobDocument.setJobCategory(resolveJobCategoryLabel(job.getJobCategory())); //类型转换导致赋值问题,重新赋值 esJobDocument.setScale(org.apache.commons.lang3.StringUtils.isNotEmpty(job.getScale()) ? Integer.parseInt(job.getScale()) : 0); + //企业信息 CompanyVo vo=job.getCompanyVo(); esJobDocument.setCompanyVoJson(JSON.toJSONString(vo)); + //岗位联系人 + esJobDocument.setJobContactVoJson(JSON.toJSONString(job.getJobContactList())); esJobDocument.setAppJobUrl("https://www.xjksly.cn/app#/packageA/pages/post/post?jobId="+ job.getJobId()); if(!StringUtil.isEmptyOrNull(job.getScale())){ esJobDocument.setScale(Integer.valueOf(job.getScale())); diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml index f80131a..f921f1c 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml @@ -85,6 +85,7 @@ + @@ -100,6 +101,11 @@ + + + + + select job_id, job_title, min_salary, max_salary, education, experience, company_name, job_location, posting_date, vacancies, del_flag, create_by, create_time, update_by, update_time, remark, latitude, longitude, "view", company_id , is_hot ,is_urgent,apply_num,is_publish, description,job_location_area_code,data_source,job_url,job_category,is_explain,explain_url,cover,job_type,job_address, review_status from job @@ -285,10 +291,11 @@ ) @@ -62,6 +66,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + update file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/File.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/File.java index e67f28a..62a1c42 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/File.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/File.java @@ -34,4 +34,16 @@ public class File extends BaseEntity @ApiModelProperty("业务id") private Long bussinessid; + @ApiModelProperty("审核状态 0待审核 1审核通过 2审核未通过") + private String reviewStatus; + + @ApiModelProperty("审核备注") + private String reviewRemark; + + @ApiModelProperty("审核人") + private String reviewBy; + + @ApiModelProperty("审核时间") + private String reviewTime; + } diff --git a/sql/migration_showcase_review.sql b/sql/migration_showcase_review.sql new file mode 100644 index 0000000..60c4f48 --- /dev/null +++ b/sql/migration_showcase_review.sql @@ -0,0 +1,51 @@ +-- ============================================= +-- 风采审核功能 — 数据库迁移 +-- 在 file 表新增审核相关字段 +-- 执行方式: 逐条执行以下 ALTER TABLE 语句 +-- 注意: 当前库 file 表在 shz schema 下(由 currentSchema 决定),无需加 schema 前缀 +-- ============================================= + +ALTER TABLE "shz"."file" ADD COLUMN "review_status" char(1) DEFAULT '0'; +COMMENT ON COLUMN "shz"."file"."review_status" IS '审核状态:0-待审核,1-审核通过,2-审核未通过'; + +ALTER TABLE "shz"."file" ADD COLUMN "review_remark" text; +COMMENT ON COLUMN "shz"."file"."review_remark" IS '审核备注(驳回原因)'; + +ALTER TABLE "shz"."file" ADD COLUMN "review_by" varchar(64); +COMMENT ON COLUMN "shz"."file"."review_by" IS '审核人'; + +ALTER TABLE "shz"."file" ADD COLUMN "review_time" timestamp(0); +COMMENT ON COLUMN "shz"."file"."review_time" IS '审核时间'; + +-- 可选:将已有数据批量设为审核通过 +-- UPDATE "shz"."file" SET "review_status" = '1' WHERE "review_status" IS NULL OR "review_status" = '0'; + +-- ============================================= +-- 菜单和权限配置(通过后台菜单管理页面配置,或执行以下 SQL) +-- 注意: parent_id 和 order_num 请根据实际菜单结构调整 +-- ============================================= + +-- 1. 新增菜单: 风采审核(请替换 parent_id 为实际的 management 菜单 ID) +-- INSERT INTO "shz"."sys_menu" ( +-- "menu_name", "parent_id", "order_num", "path", "component", +-- "visible", "status", "perms", "icon", "menu_type" +-- ) VALUES ( +-- '风采审核', , 10, +-- 'management/showcase-review', 'Management/ShowcaseReview', +-- '0', '0', 'cms:showcase:review:list', 'audit', 'C' +-- ); + +-- 2. 给管理员角色授权(请替换 role_id 为实际的管理员角色 ID) +-- INSERT INTO "shz"."sys_role_menu" ("role_id", "menu_id") +-- SELECT , "menu_id" FROM "shz"."sys_menu" +-- WHERE "perms" = 'cms:showcase:review:list'; + +-- 3. 如果用角色-权限直接关联方式,可执行: +-- 先在 sys_menu 中创建按钮级权限: +-- INSERT INTO "shz"."sys_menu" ( +-- "menu_name", "parent_id", "order_num", "path", "component", +-- "visible", "status", "perms", "menu_type" +-- ) VALUES +-- ('风采审核列表', <风采审核_menu_id>, 1, '', '', '0', '0', 'cms:showcase:review:list', 'F'), +-- ('风采审核操作', <风采审核_menu_id>, 2, '', '', '0', '0', 'cms:showcase:review', 'F'); +-- 然后将这些权限分配给需要的角色 From 480e9090726a36a3766f0a00a2a94ae5a8f5e2aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E8=BE=89?= Date: Tue, 7 Jul 2026 21:20:15 +0800 Subject: [PATCH 11/61] =?UTF-8?q?=E9=A3=8E=E9=87=87=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/mapper/app/FileMapper.xml | 21 ++++++++++++++----- .../ruoyi/common/core/domain/entity/File.java | 14 +++++++++++++ sql/migration_showcase_review.sql | 5 ++++- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml index 5da9d44..e0f0040 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml @@ -17,6 +17,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + @@ -67,12 +70,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/File.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/File.java index 62a1c42..bac1cf9 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/File.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/File.java @@ -46,4 +46,18 @@ public class File extends BaseEntity @ApiModelProperty("审核时间") private String reviewTime; + /** --- 以下为 JOIN 查询 transient 字段,非 file 表列 --- */ + + @TableField(exist = false) + @ApiModelProperty("用户名称") + private String userName; + + @TableField(exist = false) + @ApiModelProperty("用户类型(0企业 1求职者 2网格员 3政府人员)") + private String userType; + + @TableField(exist = false) + @ApiModelProperty("用户手机号码") + private String userPhone; + } diff --git a/sql/migration_showcase_review.sql b/sql/migration_showcase_review.sql index 60c4f48..54a2dd7 100644 --- a/sql/migration_showcase_review.sql +++ b/sql/migration_showcase_review.sql @@ -2,9 +2,12 @@ -- 风采审核功能 — 数据库迁移 -- 在 file 表新增审核相关字段 -- 执行方式: 逐条执行以下 ALTER TABLE 语句 --- 注意: 当前库 file 表在 shz schema 下(由 currentSchema 决定),无需加 schema 前缀 -- ============================================= +-- 先补上 file 表缺失的标准 RuoYi 字段(其他表都有,file 表漏了) +ALTER TABLE "shz"."file" ADD COLUMN "remark" varchar(500) DEFAULT NULL; +COMMENT ON COLUMN "shz"."file"."remark" IS '备注'; + ALTER TABLE "shz"."file" ADD COLUMN "review_status" char(1) DEFAULT '0'; COMMENT ON COLUMN "shz"."file"."review_status" IS '审核状态:0-待审核,1-审核通过,2-审核未通过'; From 10f4b83d6a15cf5f695317c7644a4ceba63e4c2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E8=BE=89?= Date: Tue, 7 Jul 2026 21:37:24 +0800 Subject: [PATCH 12/61] =?UTF-8?q?=E4=BC=81=E4=B8=9A=E9=A3=8E=E9=87=87?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E5=88=97=E8=A1=A8=E5=AD=97=E6=AE=B5=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cms/controller/cms/CmsFileController.java | 2 +- .../java/com/ruoyi/cms/mapper/FileMapper.java | 3 +- .../com/ruoyi/cms/service/IFileService.java | 3 +- .../cms/service/impl/FileServiceImpl.java | 3 +- .../main/resources/mapper/app/FileMapper.xml | 6 +++- .../ruoyi/common/core/domain/entity/File.java | 14 ---------- .../common/core/domain/vo/FileReviewVO.java | 28 +++++++++++++++++++ 7 files changed, 40 insertions(+), 19 deletions(-) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/vo/FileReviewVO.java diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsFileController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsFileController.java index bb6cfb4..6250560 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsFileController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsFileController.java @@ -34,7 +34,7 @@ public class CmsFileController extends BaseController { @GetMapping("/review/list") public TableDataInfo reviewList(File file) { startPage(); - List list = fileService.selectFileListForReview(file); + List list = fileService.selectFileListForReview(file); return getDataTable(list); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/FileMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/FileMapper.java index e888fda..3437c18 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/FileMapper.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/FileMapper.java @@ -2,6 +2,7 @@ package com.ruoyi.cms.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.common.core.domain.entity.File; +import com.ruoyi.common.core.domain.vo.FileReviewVO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -30,5 +31,5 @@ public interface FileMapper extends BaseMapper /** * 查询风采审核列表(后台管理用) */ - public List selectFileListForReview(File file); + public List selectFileListForReview(File file); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IFileService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IFileService.java index 6e945ca..8697b40 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IFileService.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IFileService.java @@ -2,6 +2,7 @@ package com.ruoyi.cms.service; import com.ruoyi.common.core.domain.entity.File; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.vo.FileReviewVO; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; @@ -62,7 +63,7 @@ public interface IFileService /** * 查询风采审核列表(后台管理用) */ - public List selectFileListForReview(File file); + public List selectFileListForReview(File file); /** * 审核风采文件 diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/FileServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/FileServiceImpl.java index 29aa7d8..5bf6b05 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/FileServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/FileServiceImpl.java @@ -9,6 +9,7 @@ import java.util.Arrays; import com.ruoyi.cms.util.StringUtil; import com.ruoyi.common.core.domain.entity.File; +import com.ruoyi.common.core.domain.vo.FileReviewVO; import com.ruoyi.cms.mapper.FileMapper; import com.ruoyi.cms.service.IFileService; import com.ruoyi.common.core.domain.AjaxResult; @@ -174,7 +175,7 @@ public class FileServiceImpl extends ServiceImpl implements IF } @Override - public List selectFileListForReview(File file) { + public List selectFileListForReview(File file) { return fileMapper.selectFileListForReview(file); } diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml index e0f0040..112181f 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml @@ -17,6 +17,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + @@ -69,7 +73,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select f.id, f.file_url, f.bussinessid, f.del_flag, f.create_by, f.create_time, f.update_by, f.update_time, f.review_status, f.review_remark, f.review_by, f.review_time, diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/File.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/File.java index bac1cf9..62a1c42 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/File.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/File.java @@ -46,18 +46,4 @@ public class File extends BaseEntity @ApiModelProperty("审核时间") private String reviewTime; - /** --- 以下为 JOIN 查询 transient 字段,非 file 表列 --- */ - - @TableField(exist = false) - @ApiModelProperty("用户名称") - private String userName; - - @TableField(exist = false) - @ApiModelProperty("用户类型(0企业 1求职者 2网格员 3政府人员)") - private String userType; - - @TableField(exist = false) - @ApiModelProperty("用户手机号码") - private String userPhone; - } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/vo/FileReviewVO.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/vo/FileReviewVO.java new file mode 100644 index 0000000..39b1e0e --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/vo/FileReviewVO.java @@ -0,0 +1,28 @@ +package com.ruoyi.common.core.domain.vo; + +import com.ruoyi.common.core.domain.entity.File; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 风采审核列表 VO —— 扩展 File 实体,携带 JOIN app_user 的用户信息 + * + * @author admin + * @date 2026-07-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("风采审核视图对象") +public class FileReviewVO extends File { + + @ApiModelProperty("用户名称") + private String userName; + + @ApiModelProperty("用户类型(0企业 1求职者 2网格员 3政府人员)") + private String userType; + + @ApiModelProperty("用户手机号码") + private String userPhone; +} From 4e57fbd979aaf23322a04f32cc792de9dd4ccd5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E8=BE=89?= Date: Tue, 7 Jul 2026 21:46:55 +0800 Subject: [PATCH 13/61] 11 --- .../cms/controller/cms/CmsFileController.java | 2 +- .../java/com/ruoyi/cms/mapper/FileMapper.java | 3 +- .../com/ruoyi/cms/service/IFileService.java | 3 +- .../cms/service/impl/FileServiceImpl.java | 3 +- .../main/resources/mapper/app/FileMapper.xml | 6 +--- .../ruoyi/common/core/domain/entity/File.java | 14 ++++++++++ .../common/core/domain/vo/FileReviewVO.java | 28 ------------------- 7 files changed, 19 insertions(+), 40 deletions(-) delete mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/vo/FileReviewVO.java diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsFileController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsFileController.java index 6250560..bb6cfb4 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsFileController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsFileController.java @@ -34,7 +34,7 @@ public class CmsFileController extends BaseController { @GetMapping("/review/list") public TableDataInfo reviewList(File file) { startPage(); - List list = fileService.selectFileListForReview(file); + List list = fileService.selectFileListForReview(file); return getDataTable(list); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/FileMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/FileMapper.java index 3437c18..e888fda 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/FileMapper.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/FileMapper.java @@ -2,7 +2,6 @@ package com.ruoyi.cms.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.common.core.domain.entity.File; -import com.ruoyi.common.core.domain.vo.FileReviewVO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -31,5 +30,5 @@ public interface FileMapper extends BaseMapper /** * 查询风采审核列表(后台管理用) */ - public List selectFileListForReview(File file); + public List selectFileListForReview(File file); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IFileService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IFileService.java index 8697b40..6e945ca 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IFileService.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IFileService.java @@ -2,7 +2,6 @@ package com.ruoyi.cms.service; import com.ruoyi.common.core.domain.entity.File; import com.ruoyi.common.core.domain.AjaxResult; -import com.ruoyi.common.core.domain.vo.FileReviewVO; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; @@ -63,7 +62,7 @@ public interface IFileService /** * 查询风采审核列表(后台管理用) */ - public List selectFileListForReview(File file); + public List selectFileListForReview(File file); /** * 审核风采文件 diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/FileServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/FileServiceImpl.java index 5bf6b05..29aa7d8 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/FileServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/FileServiceImpl.java @@ -9,7 +9,6 @@ import java.util.Arrays; import com.ruoyi.cms.util.StringUtil; import com.ruoyi.common.core.domain.entity.File; -import com.ruoyi.common.core.domain.vo.FileReviewVO; import com.ruoyi.cms.mapper.FileMapper; import com.ruoyi.cms.service.IFileService; import com.ruoyi.common.core.domain.AjaxResult; @@ -175,7 +174,7 @@ public class FileServiceImpl extends ServiceImpl implements IF } @Override - public List selectFileListForReview(File file) { + public List selectFileListForReview(File file) { return fileMapper.selectFileListForReview(file); } diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml index 112181f..e0f0040 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml @@ -17,10 +17,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - - - @@ -73,7 +69,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select f.id, f.file_url, f.bussinessid, f.del_flag, f.create_by, f.create_time, f.update_by, f.update_time, f.review_status, f.review_remark, f.review_by, f.review_time, diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/File.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/File.java index 62a1c42..370368c 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/File.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/File.java @@ -46,4 +46,18 @@ public class File extends BaseEntity @ApiModelProperty("审核时间") private String reviewTime; + // ---- JOIN 查询字段(非 file 表列) ---- + + @TableField(exist = false) + @ApiModelProperty("用户名称") + private String userName; + + @TableField(exist = false) + @ApiModelProperty("用户类型(0企业 1求职者 2网格员 3政府人员)") + private String userType; + + @TableField(exist = false) + @ApiModelProperty("用户手机号码") + private String userPhone; + } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/vo/FileReviewVO.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/vo/FileReviewVO.java deleted file mode 100644 index 39b1e0e..0000000 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/vo/FileReviewVO.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.ruoyi.common.core.domain.vo; - -import com.ruoyi.common.core.domain.entity.File; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - * 风采审核列表 VO —— 扩展 File 实体,携带 JOIN app_user 的用户信息 - * - * @author admin - * @date 2026-07-07 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@ApiModel("风采审核视图对象") -public class FileReviewVO extends File { - - @ApiModelProperty("用户名称") - private String userName; - - @ApiModelProperty("用户类型(0企业 1求职者 2网格员 3政府人员)") - private String userType; - - @ApiModelProperty("用户手机号码") - private String userPhone; -} From 110c5e30dfb402a5326b038463c36e49a6304d00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E8=BE=89?= Date: Tue, 7 Jul 2026 22:05:12 +0800 Subject: [PATCH 14/61] 11 --- ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml index e0f0040..2c9eaad 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml @@ -75,7 +75,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" f.review_status, f.review_remark, f.review_by, f.review_time, u.name as user_name, u.is_company_user as user_type, u.phone as user_phone from file f - left join app_user u on f.bussinessid = u.user_id + left join sys_user su on su.user_id = f.bussinessid and su.del_flag = '0' + left join app_user u on u.user_id = COALESCE(su.app_user_id, f.bussinessid) f.del_flag = '0' and f.review_status = #{reviewStatus} From fdfe4276a388a08f0c62e6883bf11344ac39f85e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E8=BE=89?= Date: Tue, 7 Jul 2026 22:16:31 +0800 Subject: [PATCH 15/61] 11 --- ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml index 2c9eaad..3348571 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/FileMapper.xml @@ -80,9 +80,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" f.del_flag = '0' and f.review_status = #{reviewStatus} - and u.name like concat('%', #{userName}, '%') + and u.name like '%' || #{userName} || '%' and u.is_company_user = #{userType} - and u.phone like concat('%', #{userPhone}, '%') + and u.phone like '%' || #{userPhone} || '%' order by f.create_time desc From f56fbe9591a2ed9cc32e99039aed1c7e4538372e Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Wed, 8 Jul 2026 10:59:23 +0800 Subject: [PATCH 16/61] =?UTF-8?q?app/job/list=E4=BF=AE=E6=94=B9=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=9D=A1=E4=BB=B6=EF=BC=8C=E5=B7=A5=E4=BD=9C=E7=BB=8F?= =?UTF-8?q?=E9=AA=8C=E5=92=8C=E8=96=AA=E8=B5=84=E8=8C=83=E5=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cms/service/impl/ESJobSearchImpl.java | 22 ++++++------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index aa95ef8..ca8d517 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -671,24 +671,16 @@ public class ESJobSearchImpl implements IESJobSearchService List integers = StringUtil.convertStringToIntegerList(jobQuery.getArea().trim()); wrapper.and(x->x.in(ESJobDocument::getJobLocationAreaCode,integers)); } - if(hasText(jobQuery.getExperience())){ - // 支持逗号分隔的多值筛选,取最大值(最宽松的经验要求) - String expStr = jobQuery.getExperience().trim(); - if (expStr.contains(",")) { - Integer maxExp = StringUtil.findMaxValue(expStr); - if (maxExp != null) { - wrapper.and(a->a.le(ESJobDocument::getExperience,maxExp.toString())); - } - } else { - wrapper.and(a->a.le(ESJobDocument::getExperience,expStr)); - } + if(!StringUtil.isEmptyOrNull(jobQuery.getExperience())){ + List integers = StringUtil.convertStringToIntegerList(jobQuery.getExperience()); + wrapper.and(a->a.in(ESJobDocument::getExperience,integers)); } // 薪资范围:岗位最高薪资必须在用户筛选范围内 - if(Objects.nonNull(jobQuery.getMaxSalary())){ - wrapper.and(x->x.le(ESJobDocument::getMaxSalary,jobQuery.getMaxSalary())); + if (Objects.nonNull(jobQuery.getMinSalary())) { + wrapper.filter(x -> x.ge(ESJobDocument::getMaxSalary, jobQuery.getMinSalary())); } - if(Objects.nonNull(jobQuery.getMinSalary())){ - wrapper.and(x->x.ge(ESJobDocument::getMaxSalary,jobQuery.getMinSalary())); + if (Objects.nonNull(jobQuery.getMaxSalary())) { + wrapper.filter(x -> x.le(ESJobDocument::getMinSalary, jobQuery.getMaxSalary())); } if(hasText(jobQuery.getScaleDictCode())){ wrapper.and(a->a.eq(ESJobDocument::getScaleDictCode,jobQuery.getScaleDictCode().trim())); From cd3d7a4d6a09860621baa7025b710392747a1e7c Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Wed, 8 Jul 2026 11:10:41 +0800 Subject: [PATCH 17/61] =?UTF-8?q?app/job/list=E4=BF=AE=E6=94=B9=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=9D=A1=E4=BB=B6=E8=96=AA=E8=B5=84=E8=8C=83=E5=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index ca8d517..2f6a45f 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -675,12 +675,13 @@ public class ESJobSearchImpl implements IESJobSearchService List integers = StringUtil.convertStringToIntegerList(jobQuery.getExperience()); wrapper.and(a->a.in(ESJobDocument::getExperience,integers)); } - // 薪资范围:岗位最高薪资必须在用户筛选范围内 + Long userMinSalary = Objects.nonNull(jobQuery.getSalaryMin()) ? jobQuery.getSalaryMin() : jobQuery.getMinSalary(); + Long userMaxSalary = Objects.nonNull(jobQuery.getSalaryMax()) ? jobQuery.getSalaryMax() : jobQuery.getMaxSalary(); if (Objects.nonNull(jobQuery.getMinSalary())) { - wrapper.filter(x -> x.ge(ESJobDocument::getMaxSalary, jobQuery.getMinSalary())); + wrapper.filter(x -> x.ge(ESJobDocument::getMaxSalary, userMinSalary)); } if (Objects.nonNull(jobQuery.getMaxSalary())) { - wrapper.filter(x -> x.le(ESJobDocument::getMinSalary, jobQuery.getMaxSalary())); + wrapper.filter(x -> x.le(ESJobDocument::getMinSalary, userMaxSalary)); } if(hasText(jobQuery.getScaleDictCode())){ wrapper.and(a->a.eq(ESJobDocument::getScaleDictCode,jobQuery.getScaleDictCode().trim())); From 9f81dbac50fe5dd4e398263463e98aaf432ea2e0 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Wed, 8 Jul 2026 11:23:14 +0800 Subject: [PATCH 18/61] =?UTF-8?q?app/job/list=E4=BF=AE=E6=94=B9=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=9D=A1=E4=BB=B6=E8=96=AA=E8=B5=84=E8=8C=83=E5=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/cms/controller/cms/CmsJobController.java | 1 + .../main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsJobController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsJobController.java index 0107bd6..b768518 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsJobController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsJobController.java @@ -431,6 +431,7 @@ public class CmsJobController extends BaseController job.setJobLocation(job.getJobAddress()); job.setCompanyId(getCompanyId(allCompany, job.getCompanyName())); job.setPostingDate(DateUtils.getTime()); + job.setEducation("0"); String companyName=StringUtils.isNotEmpty(job.getCompanyName())?job.getCompanyName():null; // 联系方式转换 List contactList = new ArrayList<>(); diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index 2f6a45f..9cdbe71 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -677,10 +677,10 @@ public class ESJobSearchImpl implements IESJobSearchService } Long userMinSalary = Objects.nonNull(jobQuery.getSalaryMin()) ? jobQuery.getSalaryMin() : jobQuery.getMinSalary(); Long userMaxSalary = Objects.nonNull(jobQuery.getSalaryMax()) ? jobQuery.getSalaryMax() : jobQuery.getMaxSalary(); - if (Objects.nonNull(jobQuery.getMinSalary())) { + if (Objects.nonNull(userMinSalary)) { wrapper.filter(x -> x.ge(ESJobDocument::getMaxSalary, userMinSalary)); } - if (Objects.nonNull(jobQuery.getMaxSalary())) { + if (Objects.nonNull(userMaxSalary)) { wrapper.filter(x -> x.le(ESJobDocument::getMinSalary, userMaxSalary)); } if(hasText(jobQuery.getScaleDictCode())){ From 3db8786e890c0a400e8a55d77766f91a8ae5597b Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Wed, 8 Jul 2026 11:39:37 +0800 Subject: [PATCH 19/61] =?UTF-8?q?app/job/list=E4=BF=AE=E6=94=B9=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=9D=A1=E4=BB=B6=E6=8E=92=E5=BA=8F=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cms/service/impl/ESJobSearchImpl.java | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index 9cdbe71..962c11d 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -618,18 +618,25 @@ public class ESJobSearchImpl implements IESJobSearchService // 先开启打分、优先按匹配分数排序(关键词前台命中越高越靠前) wrapper.trackScores(); wrapper.sortByScore(SortOrder.DESC); - if(Objects.nonNull(esJobSearch.getOrder())){ - wrapper.sort(SortBuilders.fieldSort("postingDate").order(SortOrder.DESC).missing("_last")); - if(esJobSearch.getOrder()==1){ - wrapper.orderByDesc(ESJobDocument::getIsHot); + switch (esJobSearch.getOrder()) { + case 0: // 推荐:权重 → 最新发布 + wrapper.sort(SortBuilders.fieldSort("postingDate").order(SortOrder.DESC).missing("_last")); + break; + case 1: // 最热:权重 → 热度 + wrapper.orderByDesc(ESJobDocument::getIsHot); + wrapper.orderByDesc(ESJobDocument::getApplyNum); + wrapper.orderByDesc(ESJobDocument::getView); + break; + case 2: // 最新发布:权重 → 最新发布 + wrapper.sort(SortBuilders.fieldSort("postingDate").order(SortOrder.DESC).missing("_last")); + break; + case 3: // 最大薪资:权重 → 最高薪资 + wrapper.orderByDesc(ESJobDocument::getMaxSalary); + break; + default: // 默认:权重 → 最新发布 + wrapper.sort(SortBuilders.fieldSort("postingDate").order(SortOrder.DESC).missing("_last")); } - if(esJobSearch.getOrder()==3){ - wrapper.orderByDesc(ESJobDocument::getMaxSalary); - } - }else{ - //默认按照发布时间倒叙 - wrapper.sort(SortBuilders.fieldSort("postingDate").order(SortOrder.DESC).missing("_last")); } //企业用户排除es去除jobIds boolean isCompanyUser = StringUtil.IS_COMPANY_USER.equals(esJobSearch.getUserType()); From 96a4b1503d99edfd614fc164cf5a8d5fa508d92c Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Wed, 8 Jul 2026 12:40:59 +0800 Subject: [PATCH 20/61] =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/cms/domain/vo/JobLocalExcelVo.java | 15 ++--- .../cms/util/excel/PostingDateConverter.java | 67 +++++++++++++++++++ 2 files changed, 73 insertions(+), 9 deletions(-) create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/PostingDateConverter.java diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/JobLocalExcelVo.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/JobLocalExcelVo.java index bd35463..bbf2b61 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/JobLocalExcelVo.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/JobLocalExcelVo.java @@ -3,10 +3,7 @@ package com.ruoyi.cms.domain.vo; import com.alibaba.excel.annotation.ExcelProperty; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.cms.domain.JobContact; -import com.ruoyi.cms.util.excel.ContactParseConverter; -import com.ruoyi.cms.util.excel.EducationConverter; -import com.ruoyi.cms.util.excel.SalaryParseConverter; -import com.ruoyi.cms.util.excel.VacancyLongConverter; +import com.ruoyi.cms.util.excel.*; import com.ruoyi.common.annotation.Excel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -68,6 +65,11 @@ public class JobLocalExcelVo @ApiModelProperty("岗位收集人") private String gwsjr; + @ExcelProperty(value = "需求月份", index = 12,converter = PostingDateConverter.class) + @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty("发布时间") + private String postingDate; + @ExcelProperty(value = "联系人") @ApiModelProperty("联系人") private String contactPerson; @@ -110,11 +112,6 @@ public class JobLocalExcelVo @ApiModelProperty("工作地点区县字典代码") private Integer jobLocationAreaCode; - @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "发布时间", width = 30, dateFormat = "yyyy-MM-dd") - @ApiModelProperty("发布时间") - private String postingDate; - @ApiModelProperty("数据来源") private String dataSource; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/PostingDateConverter.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/PostingDateConverter.java new file mode 100644 index 0000000..91f7a48 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/excel/PostingDateConverter.java @@ -0,0 +1,67 @@ +package com.ruoyi.cms.util.excel; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.Date; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class PostingDateConverter implements Converter { + private static final Pattern MONTH_PATTERN = Pattern.compile("^(\\d{1,2})月$"); + + @Override + public Class supportJavaTypeKey() { + return Date.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public Date convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { + String value = cellData.getStringValue(); + if (isBlank(value)) { + return null; + } + String trimStr = value.trim(); + Matcher matcher = MONTH_PATTERN.matcher(trimStr); + if (!matcher.matches()) { + return null; + } + int month = Integer.parseInt(matcher.group(1)); + if (month < 1 || month > 12) { + return null; + } + int currentYear = LocalDate.now().getYear(); + LocalDate localDate = LocalDate.of(currentYear, month, 1); + return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + } + + @Override + public WriteCellData convertToExcelData(Date value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { + if (value == null) { + return new WriteCellData<>(""); + } + LocalDate localDate = value.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + return new WriteCellData<>(localDate.getMonthValue() + "月"); + } + + public static boolean isBlank(String str) { + if (str == null) { + return true; + } + for (int i = 0; i < str.length(); i++) { + if (!Character.isWhitespace(str.charAt(i))) { + return false; + } + } + return true; + } +} \ No newline at end of file From c8a9eb56301aa4a0c017710bd621168a04f8fe3b Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Wed, 8 Jul 2026 12:51:41 +0800 Subject: [PATCH 21/61] =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=91=E5=B8=83=E6=97=B6=E9=97=B4=E4=B8=BA?= =?UTF-8?q?=E8=A1=A8=E6=A0=BC=E4=B8=AD=E7=9A=84=E6=9C=88=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/cms/controller/cms/CmsJobController.java | 4 ++-- .../main/java/com/ruoyi/cms/domain/vo/JobLocalExcelVo.java | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsJobController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsJobController.java index b768518..09d6386 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsJobController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsJobController.java @@ -430,8 +430,8 @@ public class CmsJobController extends BaseController job.setCreateBy(string); job.setJobLocation(job.getJobAddress()); job.setCompanyId(getCompanyId(allCompany, job.getCompanyName())); - job.setPostingDate(DateUtils.getTime()); - job.setEducation("0"); + job.setExperience("0");//经验不限 + job.setJobType("0");//疆内 String companyName=StringUtils.isNotEmpty(job.getCompanyName())?job.getCompanyName():null; // 联系方式转换 List contactList = new ArrayList<>(); diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/JobLocalExcelVo.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/JobLocalExcelVo.java index bbf2b61..4e795c6 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/JobLocalExcelVo.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/JobLocalExcelVo.java @@ -8,6 +8,7 @@ import com.ruoyi.common.annotation.Excel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.Date; import java.util.List; /** @@ -68,7 +69,7 @@ public class JobLocalExcelVo @ExcelProperty(value = "需求月份", index = 12,converter = PostingDateConverter.class) @JsonFormat(pattern = "yyyy-MM-dd") @ApiModelProperty("发布时间") - private String postingDate; + private Date postingDate; @ExcelProperty(value = "联系人") @ApiModelProperty("联系人") From 7aae0f29ea8dd68d233a21a1c3eac68b0771dbe1 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Wed, 8 Jul 2026 13:25:52 +0800 Subject: [PATCH 22/61] =?UTF-8?q?=E4=BF=AE=E6=94=B9es=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E4=BC=81=E4=B8=9A=E7=B1=BB=E5=9E=8B=E4=B8=BA=E4=B8=AA=E4=BD=93?= =?UTF-8?q?=E5=B7=A5=E5=95=86=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index 962c11d..b13530c 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -215,7 +215,7 @@ public class ESJobSearchImpl implements IESJobSearchService esJobDocument.setLatAndLon(esJobDocument.getLatitude().toString() + "," + esJobDocument.getLongitude().toString()); } if(StringUtil.isEmptyOrNull(job.getCompanyNature())){ - esJobDocument.setCompanyNature("6"); + esJobDocument.setCompanyNature("4"); } if (StringUtils.isNotEmpty(job.getPostingDate())) { Date date = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS,job.getPostingDate()); From 20e4cb1bb78441d6a9c4151113650f54765c3499 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Wed, 8 Jul 2026 16:11:43 +0800 Subject: [PATCH 23/61] =?UTF-8?q?=E4=BF=AE=E6=94=B9es=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=92=8C=E6=88=AA=E8=87=B3=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index b13530c..5e4dcfd 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -718,12 +718,11 @@ public class ESJobSearchImpl implements IESJobSearchService wrapper.and(a->a.eq(ESJobDocument::getType,jobQuery.getType().trim())); } //开始时间 - if(Objects.nonNull(jobQuery.getEndDate())){ - wrapper.and(x->x.le(ESJobDocument::getPostingDate,jobQuery.getEndDate())); + if (Objects.nonNull(jobQuery.getStartDate())) { + wrapper.ge(ESJobDocument::getPostingDate, jobQuery.getStartDate()); } - //截至时间 - if(Objects.nonNull(jobQuery.getStartDate())){ - wrapper.and(x->x.ge(ESJobDocument::getPostingDate,jobQuery.getStartDate())); + if (Objects.nonNull(jobQuery.getEndDate())) { + wrapper.le(ESJobDocument::getPostingDate, jobQuery.getEndDate()); } // 先开启打分、优先按匹配分数排序(关键词前台命中越高越靠前) wrapper.trackScores(); From f42ef9c83a02630b71582ea1e4fa1fd76d7e1e93 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Wed, 8 Jul 2026 16:19:58 +0800 Subject: [PATCH 24/61] =?UTF-8?q?=E4=BF=AE=E6=94=B9es=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=92=8C=E6=88=AA=E8=87=B3=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/cms/service/impl/ESJobSearchImpl.java | 12 ++++++++---- .../main/java/com/ruoyi/common/utils/DateUtils.java | 5 +++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index 5e4dcfd..4c08b70 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -718,11 +718,15 @@ public class ESJobSearchImpl implements IESJobSearchService wrapper.and(a->a.eq(ESJobDocument::getType,jobQuery.getType().trim())); } //开始时间 - if (Objects.nonNull(jobQuery.getStartDate())) { - wrapper.ge(ESJobDocument::getPostingDate, jobQuery.getStartDate()); + Date startDate = jobQuery.getStartDate(); + Date endDate = jobQuery.getEndDate(); + if (Objects.nonNull(startDate)) { + String startStr = DateUtils.UTC_FORMATTER.format(startDate.toInstant()); + wrapper.ge(ESJobDocument::getPostingDate, startStr); } - if (Objects.nonNull(jobQuery.getEndDate())) { - wrapper.le(ESJobDocument::getPostingDate, jobQuery.getEndDate()); + if (Objects.nonNull(endDate)) { + String endStr = DateUtils.UTC_FORMATTER.format(endDate.toInstant()); + wrapper.le(ESJobDocument::getPostingDate, endStr); } // 先开启打分、优先按匹配分数排序(关键词前台命中越高越靠前) wrapper.trackScores(); diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java index 8385bc7..df7423d 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java @@ -8,6 +8,7 @@ import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZoneId; import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; import java.util.Date; import org.apache.commons.lang3.time.DateFormatUtils; @@ -36,6 +37,10 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; + public static final DateTimeFormatter UTC_FORMATTER = DateTimeFormatter + .ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ") + .withZone(ZoneId.of("UTC")); + /** * 获取当前Date型日期 * From d692c7915fd1245c93a314e21f47f3b8916a991a Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Wed, 8 Jul 2026 16:29:07 +0800 Subject: [PATCH 25/61] =?UTF-8?q?=E4=BF=AE=E6=94=B9es=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=92=8C=E6=88=AA=E8=87=B3=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cms/service/impl/ESJobSearchImpl.java | 18 +++++++++++------- .../java/com/ruoyi/common/utils/DateUtils.java | 4 ++-- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index 4c08b70..f4997d1 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -720,13 +720,17 @@ public class ESJobSearchImpl implements IESJobSearchService //开始时间 Date startDate = jobQuery.getStartDate(); Date endDate = jobQuery.getEndDate(); - if (Objects.nonNull(startDate)) { - String startStr = DateUtils.UTC_FORMATTER.format(startDate.toInstant()); - wrapper.ge(ESJobDocument::getPostingDate, startStr); - } - if (Objects.nonNull(endDate)) { - String endStr = DateUtils.UTC_FORMATTER.format(endDate.toInstant()); - wrapper.le(ESJobDocument::getPostingDate, endStr); + if (Objects.nonNull(startDate) || Objects.nonNull(endDate)) { + wrapper.and(w -> { + if (Objects.nonNull(startDate)) { + String startStr = DateUtils.ES_DATE_FORMATTER.format(startDate.toInstant()); + w.ge(ESJobDocument::getPostingDate, startStr); + } + if (Objects.nonNull(endDate)) { + String endStr = DateUtils.ES_DATE_FORMATTER.format(endDate.toInstant()); + w.le(ESJobDocument::getPostingDate, endStr); + } + }); } // 先开启打分、优先按匹配分数排序(关键词前台命中越高越靠前) wrapper.trackScores(); diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java index df7423d..ee22065 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java @@ -37,8 +37,8 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; - public static final DateTimeFormatter UTC_FORMATTER = DateTimeFormatter - .ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ") + public static final DateTimeFormatter ES_DATE_FORMATTER = DateTimeFormatter + .ofPattern("yyyy-MM-dd HH:mm:ss") .withZone(ZoneId.of("UTC")); /** From e70109ec561fc3dc64dedc2845220c6f109682f6 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Wed, 8 Jul 2026 16:32:43 +0800 Subject: [PATCH 26/61] =?UTF-8?q?=E4=BF=AE=E6=94=B9es=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=92=8C=E6=88=AA=E8=87=B3=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cms/service/impl/ESJobSearchImpl.java | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index f4997d1..5b31815 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -720,17 +720,13 @@ public class ESJobSearchImpl implements IESJobSearchService //开始时间 Date startDate = jobQuery.getStartDate(); Date endDate = jobQuery.getEndDate(); - if (Objects.nonNull(startDate) || Objects.nonNull(endDate)) { - wrapper.and(w -> { - if (Objects.nonNull(startDate)) { - String startStr = DateUtils.ES_DATE_FORMATTER.format(startDate.toInstant()); - w.ge(ESJobDocument::getPostingDate, startStr); - } - if (Objects.nonNull(endDate)) { - String endStr = DateUtils.ES_DATE_FORMATTER.format(endDate.toInstant()); - w.le(ESJobDocument::getPostingDate, endStr); - } - }); + if (Objects.nonNull(startDate) && Objects.nonNull(endDate)) { + wrapper.and(w -> w.ge(ESJobDocument::getPostingDate, DateUtils.ES_DATE_FORMATTER.format(startDate.toInstant())) + .le(ESJobDocument::getPostingDate, DateUtils.ES_DATE_FORMATTER.format(endDate.toInstant()))); + } else if (Objects.nonNull(startDate)) { + wrapper.ge(ESJobDocument::getPostingDate, DateUtils.ES_DATE_FORMATTER.format(startDate.toInstant())); + } else if (Objects.nonNull(endDate)) { + wrapper.le(ESJobDocument::getPostingDate, DateUtils.ES_DATE_FORMATTER.format(endDate.toInstant())); } // 先开启打分、优先按匹配分数排序(关键词前台命中越高越靠前) wrapper.trackScores(); From 303900ad4fad3cf1f0843f9ab37fb340b98cccae Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Wed, 8 Jul 2026 16:38:03 +0800 Subject: [PATCH 27/61] =?UTF-8?q?=E4=BF=AE=E6=94=B9es=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=92=8C=E6=88=AA=E8=87=B3=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/cms/service/impl/ESJobSearchImpl.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index 5b31815..754c2e5 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -721,12 +721,12 @@ public class ESJobSearchImpl implements IESJobSearchService Date startDate = jobQuery.getStartDate(); Date endDate = jobQuery.getEndDate(); if (Objects.nonNull(startDate) && Objects.nonNull(endDate)) { - wrapper.and(w -> w.ge(ESJobDocument::getPostingDate, DateUtils.ES_DATE_FORMATTER.format(startDate.toInstant())) - .le(ESJobDocument::getPostingDate, DateUtils.ES_DATE_FORMATTER.format(endDate.toInstant()))); - } else if (Objects.nonNull(startDate)) { - wrapper.ge(ESJobDocument::getPostingDate, DateUtils.ES_DATE_FORMATTER.format(startDate.toInstant())); + wrapper.and(w -> w.ge(ESJobDocument::getPostingDate, startDate) + .le(ESJobDocument::getPostingDate, endDate)); + }else if (Objects.nonNull(startDate)) { + wrapper.ge(ESJobDocument::getPostingDate, startDate); } else if (Objects.nonNull(endDate)) { - wrapper.le(ESJobDocument::getPostingDate, DateUtils.ES_DATE_FORMATTER.format(endDate.toInstant())); + wrapper.le(ESJobDocument::getPostingDate, endDate); } // 先开启打分、优先按匹配分数排序(关键词前台命中越高越靠前) wrapper.trackScores(); From 67e54abdcb8a355a5a89633a61ac1e43ca2f87e3 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Wed, 8 Jul 2026 16:43:04 +0800 Subject: [PATCH 28/61] =?UTF-8?q?=E4=BF=AE=E6=94=B9es=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=92=8C=E6=88=AA=E8=87=B3=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/cms/service/impl/ESJobSearchImpl.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index 754c2e5..5b31815 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -721,12 +721,12 @@ public class ESJobSearchImpl implements IESJobSearchService Date startDate = jobQuery.getStartDate(); Date endDate = jobQuery.getEndDate(); if (Objects.nonNull(startDate) && Objects.nonNull(endDate)) { - wrapper.and(w -> w.ge(ESJobDocument::getPostingDate, startDate) - .le(ESJobDocument::getPostingDate, endDate)); - }else if (Objects.nonNull(startDate)) { - wrapper.ge(ESJobDocument::getPostingDate, startDate); + wrapper.and(w -> w.ge(ESJobDocument::getPostingDate, DateUtils.ES_DATE_FORMATTER.format(startDate.toInstant())) + .le(ESJobDocument::getPostingDate, DateUtils.ES_DATE_FORMATTER.format(endDate.toInstant()))); + } else if (Objects.nonNull(startDate)) { + wrapper.ge(ESJobDocument::getPostingDate, DateUtils.ES_DATE_FORMATTER.format(startDate.toInstant())); } else if (Objects.nonNull(endDate)) { - wrapper.le(ESJobDocument::getPostingDate, endDate); + wrapper.le(ESJobDocument::getPostingDate, DateUtils.ES_DATE_FORMATTER.format(endDate.toInstant())); } // 先开启打分、优先按匹配分数排序(关键词前台命中越高越靠前) wrapper.trackScores(); From 84dd9b8092290f329e6863eaf7dd4fa5f3653d34 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Wed, 8 Jul 2026 16:55:57 +0800 Subject: [PATCH 29/61] =?UTF-8?q?=E4=BF=AE=E6=94=B9es=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=92=8C=E6=88=AA=E8=87=B3=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cms/service/impl/ESJobSearchImpl.java | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index 5b31815..e1cb838 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -34,7 +34,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; -import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -605,15 +604,16 @@ public class ESJobSearchImpl implements IESJobSearchService wrapper.and(x->x.like(ESJobDocument::getCompanyName,esJobSearch.getCompanyName())); } //按时间段来查询数据 - if(esJobSearch.getStartDate() != null){ - Date startDateTime = esJobSearch.getStartDate(); - String formattedStartDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(startDateTime); - wrapper.and(x->x.ge(ESJobDocument::getPostingDate, formattedStartDate)); - } - if(esJobSearch.getEndDate() != null){ - Date endDateTime = esJobSearch.getEndDate(); - String formattedEndDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(endDateTime); - wrapper.and(x->x.le(ESJobDocument::getPostingDate, formattedEndDate)); + Date startDate = esJobSearch.getStartDate(); + Date endDate = esJobSearch.getEndDate(); + if (Objects.nonNull(startDate) && Objects.nonNull(endDate)) { + String startStr = DateUtils.ES_DATE_FORMATTER.format(startDate.toInstant()); + String endStr = DateUtils.ES_DATE_FORMATTER.format(endDate.toInstant()); + wrapper.between(ESJobDocument::getPostingDate, startStr, endStr); + } else if (Objects.nonNull(startDate)) { + wrapper.ge(ESJobDocument::getPostingDate, DateUtils.ES_DATE_FORMATTER.format(startDate.toInstant())); + } else if (Objects.nonNull(endDate)) { + wrapper.le(ESJobDocument::getPostingDate, DateUtils.ES_DATE_FORMATTER.format(endDate.toInstant())); } // 先开启打分、优先按匹配分数排序(关键词前台命中越高越靠前) wrapper.trackScores(); @@ -721,8 +721,9 @@ public class ESJobSearchImpl implements IESJobSearchService Date startDate = jobQuery.getStartDate(); Date endDate = jobQuery.getEndDate(); if (Objects.nonNull(startDate) && Objects.nonNull(endDate)) { - wrapper.and(w -> w.ge(ESJobDocument::getPostingDate, DateUtils.ES_DATE_FORMATTER.format(startDate.toInstant())) - .le(ESJobDocument::getPostingDate, DateUtils.ES_DATE_FORMATTER.format(endDate.toInstant()))); + String startStr = DateUtils.ES_DATE_FORMATTER.format(startDate.toInstant()); + String endStr = DateUtils.ES_DATE_FORMATTER.format(endDate.toInstant()); + wrapper.between(ESJobDocument::getPostingDate, startStr, endStr); } else if (Objects.nonNull(startDate)) { wrapper.ge(ESJobDocument::getPostingDate, DateUtils.ES_DATE_FORMATTER.format(startDate.toInstant())); } else if (Objects.nonNull(endDate)) { From f52d7f0edad7347597e952e8b61fe1cd94c2b9da Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Wed, 8 Jul 2026 17:10:46 +0800 Subject: [PATCH 30/61] =?UTF-8?q?=E6=94=BF=E7=AD=96=E8=A1=A8=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=94=BF=E7=AD=96=E5=88=86=E7=B1=BB=EF=BC=88=E5=8F=AF?= =?UTF-8?q?=E5=88=86=E4=B8=BA=E4=BA=BA=E6=89=8D=E5=BC=95=E8=BF=9B=E3=80=81?= =?UTF-8?q?=E4=BA=BA=E6=89=8D=E5=9F=B9=E5=85=BB=E3=80=81=E4=BA=BA=E6=89=8D?= =?UTF-8?q?=E6=BF=80=E5=8A=B1=E7=AD=89=E7=B1=BB=E5=88=AB=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/cms/domain/policy/PolicyInfo.java | 3 +++ .../main/java/com/ruoyi/cms/domain/policy/PolicyInfoQuery.java | 3 +++ .../src/main/resources/mapper/policy/PolicyInfoMapper.xml | 3 +++ 3 files changed, 9 insertions(+) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/policy/PolicyInfo.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/policy/PolicyInfo.java index c714f25..f59534e 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/policy/PolicyInfo.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/policy/PolicyInfo.java @@ -64,6 +64,9 @@ public class PolicyInfo extends BaseEntity { @ApiModelProperty("浏览数") private Integer viewNum; + @ApiModelProperty("政策分类(0人才引进、1人才培养、2人才激励)") + private String policyCategory; + //标签 /** 1-大龄人员;2-低保人员;3-残疾人员;4-失地农名或联队职工;5-防止返贫;6-未就业大中专毕业生;7-退役军人;8-长期失业人员;9-城镇零就业家庭成员;10.刑满释放人员 **/ private String policyTag; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/policy/PolicyInfoQuery.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/policy/PolicyInfoQuery.java index b16e892..cf8c348 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/policy/PolicyInfoQuery.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/policy/PolicyInfoQuery.java @@ -31,5 +31,8 @@ public class PolicyInfoQuery { @ApiModelProperty("状态(0启用 1禁用),空表示不过滤") private String status; + @ApiModelProperty("政策分类(0人才引进、1人才培养、2人才激励)") + private String policyCategory; + private List policyTags; } diff --git a/ruoyi-bussiness/src/main/resources/mapper/policy/PolicyInfoMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/policy/PolicyInfoMapper.xml index be674b0..dd87df7 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/policy/PolicyInfoMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/policy/PolicyInfoMapper.xml @@ -57,6 +57,9 @@ and (status IS NULL or status = #{query.status}) + + and policy_category = #{query.policyCategory} + order by publish_time desc, create_time desc From 3703b8e2bc9280e40311734ba8496428eb93a592 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Wed, 8 Jul 2026 19:32:40 +0800 Subject: [PATCH 31/61] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=94=BF=E7=AD=96?= =?UTF-8?q?=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-bussiness/pom.xml | 6 + .../cms/CmsPolicyInfoController.java | 11 ++ .../ruoyi/cms/util/pdf/OpenPdfPolicyUtil.java | 154 ++++++++++++++++++ 3 files changed, 171 insertions(+) create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/pdf/OpenPdfPolicyUtil.java diff --git a/ruoyi-bussiness/pom.xml b/ruoyi-bussiness/pom.xml index fb4b41d..1d774d4 100644 --- a/ruoyi-bussiness/pom.xml +++ b/ruoyi-bussiness/pom.xml @@ -116,6 +116,12 @@ com.fasterxml.jackson.datatype jackson-datatype-jsr310 + + + com.github.librepdf + openpdf + 1.3.30 +
\ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsPolicyInfoController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsPolicyInfoController.java index d9d9315..001a361 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsPolicyInfoController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsPolicyInfoController.java @@ -3,6 +3,7 @@ package com.ruoyi.cms.controller.cms; import com.ruoyi.cms.domain.policy.PolicyInfo; import com.ruoyi.cms.domain.policy.PolicyInfoQuery; import com.ruoyi.cms.service.policy.IPolicyInfoService; +import com.ruoyi.cms.util.pdf.OpenPdfPolicyUtil; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; @@ -17,6 +18,7 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.time.LocalDate; @@ -168,4 +170,13 @@ public class CmsPolicyInfoController extends BaseController { return error("文件上传失败:" + e.getMessage()); } } + + @GetMapping("/exportUtil") + public void pdfByUtil(@RequestParam Long id, HttpServletResponse response) throws Exception { + PolicyInfo policyInfo=policyInfoService.selectById(id); + if (policyInfo == null) { + throw new RuntimeException("未查询到对应政策信息"); + } + OpenPdfPolicyUtil.exportPolicyPdf(policyInfo, response); + } } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/pdf/OpenPdfPolicyUtil.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/pdf/OpenPdfPolicyUtil.java new file mode 100644 index 0000000..99a501f --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/pdf/OpenPdfPolicyUtil.java @@ -0,0 +1,154 @@ +package com.ruoyi.cms.util.pdf; + +import com.lowagie.text.*; +import com.lowagie.text.pdf.BaseFont; +import com.lowagie.text.pdf.PdfWriter; +import com.ruoyi.cms.domain.policy.PolicyInfo; + +import javax.servlet.http.HttpServletResponse; +import java.io.OutputStream; +import java.net.URLEncoder; +import java.text.SimpleDateFormat; + +/** + * OpenPDF 政策PDF导出工具 + * 优化:表格列宽、文本清洗、自动换行、去除多余空行、增加边框区分 + */ +public class OpenPdfPolicyUtil { + private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); + private static BaseFont baseFont; + + static { + try { + // OpenPDF内置中文字体,无需外部ttf,Linux/Windows通用 + baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); + } catch (Exception e) { + throw new RuntimeException("初始化PDF宋体字体失败", e); + } + } + + public static void exportPolicyPdf(PolicyInfo policy, HttpServletResponse response) throws Exception { + String rawName = getCleanText(policy.getZcmc()); + String fileName = URLEncoder.encode(rawName + ".pdf", "UTF-8"); + response.setContentType("application/pdf"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName); + response.setHeader("Cache-Control", "no-cache"); + + try (OutputStream out = response.getOutputStream(); + Document document = new Document(PageSize.A4, 40, 40, 60, 60)) { + + PdfWriter writer = PdfWriter.getInstance(document, out); + document.open(); + + // ========== 1、文档主标题 ========== + Font titleFont = new Font(baseFont, 20, Font.BOLD); + Paragraph titlePara = new Paragraph(getCleanText(policy.getZcmc()), titleFont); + titlePara.setAlignment(Element.ALIGN_CENTER); + titlePara.setSpacingAfter(25); + document.add(titlePara); + + // ========== 2、基础信息表格(调整列宽20/30/20/30,加宽标题列) ========== + Font tableHeadFont = new Font(baseFont, 12, Font.BOLD); + Font tableValFont = new Font(baseFont, 12); + Table infoTable = new Table(4); + float[] colWidth = new float[]{20, 30, 20, 30}; + infoTable.setWidths(colWidth); + infoTable.setWidth(100); + infoTable.setBorderWidth(0.6f); // 增加边框,区分单元格 + + // 第一行 + infoTable.addCell(buildCell(getCleanText("政策类型"), tableHeadFont)); + infoTable.addCell(buildCell(getCleanText(policy.getZclx()), tableValFont)); + infoTable.addCell(buildCell(getCleanText("政策级别"), tableHeadFont)); + infoTable.addCell(buildCell(getCleanText(policy.getZcLevel()), tableValFont)); + + // 第二行 + infoTable.addCell(buildCell(getCleanText("发文单位"), tableHeadFont)); + infoTable.addCell(buildCell(getCleanText(policy.getSourceUnit()), tableValFont)); + infoTable.addCell(buildCell(getCleanText("受理单位"), tableHeadFont)); + infoTable.addCell(buildCell(getCleanText(policy.getAcceptUnit()), tableValFont)); + + // 第三行 + String publishDate = policy.getPublishTime() == null ? "无" : DATE_FORMAT.format(policy.getPublishTime()); + infoTable.addCell(buildCell(getCleanText("发文时间"), tableHeadFont)); + infoTable.addCell(buildCell(publishDate, tableValFont)); + infoTable.addCell(buildCell(getCleanText("浏览数量"), tableHeadFont)); + infoTable.addCell(buildCell(String.valueOf(policy.getViewNum()), tableValFont)); + + document.add(infoTable); + document.add(new Paragraph(" ")); + + // ========== 3、政策四大章节 ========== + Font sectionTitleFont = new Font(baseFont, 14, Font.BOLD); + Font contentFont = new Font(baseFont, 11); + float lineMulti = 1.45f; + + addSection(document, "一、政策内容", policy.getZcContent(), sectionTitleFont, contentFont, lineMulti); + addSection(document, "二、补贴标准", policy.getSubsidyStandard(), sectionTitleFont, contentFont, lineMulti); + addSection(document, "三、申报条件", policy.getApplyCondition(), sectionTitleFont, contentFont, lineMulti); + addSection(document, "四、经办渠道", policy.getHandleChannel(), sectionTitleFont, contentFont, lineMulti); + + /*// ========== 4、附件信息 ========== + Paragraph fileTitlePara = new Paragraph("五、附件文件信息", sectionTitleFont); + fileTitlePara.setSpacingBefore(18); + fileTitlePara.setSpacingAfter(8); + document.add(fileTitlePara); + + String fileInfo = "文件名称:" + getCleanText(policy.getFileName()) + "\n文件地址:" + getCleanText(policy.getFileUrl()); + Paragraph filePara = new Paragraph(fileInfo, contentFont); + filePara.setMultipliedLeading(lineMulti); + filePara.setIndentationLeft(5); + document.add(filePara);*/ + + document.close(); + writer.flush(); + out.flush(); + } + } + + /** + * 构建单元格:移除多余\n换行,仅靠段落间距,消除大量空白行 + */ + private static Cell buildCell(String text, Font font) { + Cell cell = new Cell(); + Paragraph cellPara = new Paragraph(text, font); + cellPara.setSpacingBefore(4); + cellPara.setSpacingAfter(4); + cell.add(cellPara); + return cell; + } + + /** + * 新增:统一处理章节标题+正文,自动清洗文本、缩进、行间距 + */ + private static void addSection(Document doc, String title, String rawContent, Font titleFont, Font contentFont, float lineHeight) throws DocumentException { + Paragraph titlePara = new Paragraph(title, titleFont); + titlePara.setSpacingBefore(14); + titlePara.setSpacingAfter(7); + doc.add(titlePara); + + String cleanContent = getCleanText(rawContent); + Paragraph contentPara = new Paragraph(cleanContent, contentFont); + contentPara.setMultipliedLeading(lineHeight); + contentPara.setIndentationLeft(5); + doc.add(contentPara); + } + + /** + * 核心文本清洗:清除多余换行、空格、统一全角符号,解决公文排版错乱 + */ + private static String getCleanText(String str) { + if (str == null || str.trim().isEmpty()) { + return "无"; + } + // 去除首尾空白 + String temp = str.trim(); + // 多个换行替换为单个换行 + temp = temp.replaceAll("\\s*\n\\s*", "\n"); + // 多个空格压缩为单个 + temp = temp.replaceAll(" +", " "); + // 全角顿号统一(可选,按需开启) + temp = temp.replace("、", "、"); + return temp; + } +} \ No newline at end of file From 041a5b696ec26efeee591783a07a572c8ce71773 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Wed, 8 Jul 2026 21:04:52 +0800 Subject: [PATCH 32/61] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=94=BF=E7=AD=96?= =?UTF-8?q?=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/mapper/policy/PolicyInfoMapper.xml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ruoyi-bussiness/src/main/resources/mapper/policy/PolicyInfoMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/policy/PolicyInfoMapper.xml index dd87df7..980c371 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/policy/PolicyInfoMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/policy/PolicyInfoMapper.xml @@ -25,17 +25,18 @@ + - select id, zcmc, zclx, zc_level, source_unit, accept_unit, publish_time, view_num, create_time, policy_tag, status + select id, zcmc, zclx, zc_level, source_unit, accept_unit, publish_time, view_num, create_time, policy_tag, status,policy_category from policy_info select id, zcmc, zclx, zc_level, source_unit, accept_unit, publish_time, zc_content, subsidy_standard, handle_channel, apply_condition, - file_url, file_name, view_num, create_by, create_time, update_by, update_time, remark, policy_tag, status + file_url, file_name, view_num, create_by, create_time, update_by, update_time, remark, policy_tag, status,policy_category from policy_info @@ -77,11 +78,11 @@ insert into policy_info ( zcmc, zclx, zc_level, source_unit, accept_unit, publish_time, zc_content, subsidy_standard, handle_channel, apply_condition, - file_url, file_name, view_num, create_by, create_time, del_flag, remark, policy_tag, status + file_url, file_name, view_num, create_by, create_time, del_flag, remark, policy_tag, status,policy_category ) values ( #{zcmc}, #{zclx}, #{zcLevel}, #{sourceUnit}, #{acceptUnit}, #{publishTime}, #{zcContent}, #{subsidyStandard}, #{handleChannel}, #{applyCondition}, - #{fileUrl}, #{fileName}, #{viewNum}, #{createBy}, now(), '0', #{remark}, #{policyTag}, #{status} + #{fileUrl}, #{fileName}, #{viewNum}, #{createBy}, now(), '0', #{remark}, #{policyTag}, #{status},#{policyCategory} ) @@ -103,6 +104,7 @@ remark = #{remark}, policy_tag = #{policyTag}, status = #{status}, + policy_category = #{policyCategory}, update_by = #{updateBy}, update_time = now() From 8a152a2854bbfd09d9a52fc487a250d2a8b957e9 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Wed, 8 Jul 2026 23:10:24 +0800 Subject: [PATCH 33/61] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=AA=E4=BA=BA?= =?UTF-8?q?=E5=B1=8F=E8=94=BD=E4=BC=81=E4=B8=9A=EF=BC=8C=E5=B9=B6=E4=B8=94?= =?UTF-8?q?=E6=8E=A8=E8=8D=90=E5=B2=97=E4=BD=8D=E6=97=B6=EF=BC=8C=E5=B9=B6?= =?UTF-8?q?=E4=B8=94=E4=BC=81=E4=B8=9A=E5=AF=B9=E5=BA=94=E7=9A=84=E5=B2=97?= =?UTF-8?q?=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/AppUserBlockCompanyController.java | 82 ++++++++++++++ .../cms/CmsUserBlockCompanyController.java | 105 ++++++++++++++++++ .../ruoyi/cms/domain/AppUserBlockCompany.java | 25 +++++ .../cms/mapper/AppUserBlockCompanyMapper.java | 32 ++++++ .../service/AppUserBlockCompanyService.java | 38 +++++++ .../impl/AppUserBlockCompanyServiceImpl.java | 70 ++++++++++++ .../cms/service/impl/ESJobSearchImpl.java | 46 +++++++- .../java/com/ruoyi/cms/util/RoleUtils.java | 13 +++ .../mapper/app/AppUserBlockCompanyMapper.xml | 52 +++++++++ 9 files changed, 457 insertions(+), 6 deletions(-) create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserBlockCompanyController.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserBlockCompanyController.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserBlockCompany.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserBlockCompanyMapper.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/AppUserBlockCompanyService.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserBlockCompanyServiceImpl.java create mode 100644 ruoyi-bussiness/src/main/resources/mapper/app/AppUserBlockCompanyMapper.xml diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserBlockCompanyController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserBlockCompanyController.java new file mode 100644 index 0000000..4a34b53 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserBlockCompanyController.java @@ -0,0 +1,82 @@ +package com.ruoyi.cms.controller.app; + +import com.ruoyi.cms.domain.AppUserBlockCompany; +import com.ruoyi.cms.service.AppUserBlockCompanyService; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.utils.SiteSecurityUtils; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@RestController +@RequestMapping("/app/blockCompany") +public class AppUserBlockCompanyController extends BaseController { + + @Resource + private AppUserBlockCompanyService blockCompanyService; + + /** + * 新增屏蔽企业 + */ + @ApiOperation("新增屏蔽企业") + @PostMapping + public AjaxResult add(@RequestBody AppUserBlockCompany entity) { + if(!SiteSecurityUtils.isLogin()){ + return error("未登录!"); + } + if(entity.getUserId()==null){ + entity.setUserId(SiteSecurityUtils.getUserId()); + } + return toAjax(blockCompanyService.addBlockCompany(entity)); + } + + /** + * 取消屏蔽企业 + */ + @ApiOperation("取消屏蔽企业") + @DeleteMapping("/{userIds}") + public AjaxResult cancel(@PathVariable Long[] userIds) { + if(!SiteSecurityUtils.isLogin()){ + return error("未登录!"); + } + return toAjax(blockCompanyService.cancelBlock(userIds)); + } + + /** + * 获取当前用户屏蔽企业列表 + */ + @ApiOperation("获取当前用户屏蔽企业列表") + @GetMapping("/list") + public TableDataInfo list(AppUserBlockCompany appUserBlockCompany){ + if(appUserBlockCompany.getUserId()==null){ + appUserBlockCompany.setUserId(SiteSecurityUtils.getUserId()); + } + startPage(); + List list=blockCompanyService.listByUserId(appUserBlockCompany.getUserId()); + return getDataTable(list); + } + + /** + * 查询当前用户屏蔽的企业ID集合(用于过滤职位) + */ + @ApiOperation("查询当前用户屏蔽的企业ID集合") + @GetMapping("/ids") + public AjaxResult getBlockIds() { + List ids = blockCompanyService.getBlockCompanyIds(SiteSecurityUtils.getUserId()); + return AjaxResult.success(ids); + } + + /** + * 校验是否屏蔽该企业 + */ + @ApiOperation("校验是否屏蔽该企业") + @GetMapping("/check") + public AjaxResult check(@RequestParam Long companyId) { + boolean blocked = blockCompanyService.isBlocked(SiteSecurityUtils.getUserId(), companyId); + return AjaxResult.success(blocked); + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserBlockCompanyController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserBlockCompanyController.java new file mode 100644 index 0000000..fbd6d16 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserBlockCompanyController.java @@ -0,0 +1,105 @@ +package com.ruoyi.cms.controller.cms; + +import com.ruoyi.cms.domain.AppUserBlockCompany; +import com.ruoyi.cms.service.AppUserBlockCompanyService; +import com.ruoyi.cms.util.RoleUtils; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.utils.SecurityUtils; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +@RestController +@RequestMapping("/cms/blockCompany") +public class CmsUserBlockCompanyController extends BaseController { + + @Resource + private AppUserBlockCompanyService blockCompanyService; + + /** + * 新增屏蔽企业 + */ + @ApiOperation("新增屏蔽企业") + @PreAuthorize("@ss.hasPermi('cms:blockCompany:add')") + @PostMapping + public AjaxResult add(@RequestBody AppUserBlockCompany entity) { + if(!SecurityUtils.isLogin()){ + return error("未登录!"); + } + if(entity.getUserId()==null){ + Long userId=RoleUtils.getSysAppuserId(); + if(userId==null){ + return error("未绑定移动端用户"); + } + entity.setUserId(userId); + } + return toAjax(blockCompanyService.addBlockCompany(entity)); + } + + /** + * 取消屏蔽企业 + */ + @ApiOperation("取消屏蔽企业") + @PreAuthorize("@ss.hasPermi('cms:blockCompany:cancel')") + @DeleteMapping("/{userIds}") + public AjaxResult cancel(@PathVariable Long[] userIds) { + if(!SecurityUtils.isLogin()){ + return error("未登录!"); + } + return toAjax(blockCompanyService.cancelBlock(userIds)); + } + + /** + * 获取当前用户屏蔽企业列表 + */ + @ApiOperation("获取当前用户屏蔽企业列表") + @PreAuthorize("@ss.hasPermi('cms:blockCompany:list')") + @GetMapping("/list") + public TableDataInfo list(AppUserBlockCompany appUserBlockCompany){ + if(!SecurityUtils.isLogin()){ + return getDataTable(new ArrayList<>()); + } + if(appUserBlockCompany.getUserId()==null){ + appUserBlockCompany.setUserId(RoleUtils.getSysAppuserId()); + } + startPage(); + List list=blockCompanyService.listByUserId(appUserBlockCompany.getUserId()); + return getDataTable(list); + } + + /** + * 查询当前用户屏蔽的企业ID集合(用于过滤职位) + */ + @ApiOperation("查询当前用户屏蔽的企业ID集合") + @PreAuthorize("@ss.hasPermi('cms:blockCompany:ids')") + @GetMapping("/ids") + public AjaxResult getBlockIds() { + Long userId=RoleUtils.getSysAppuserId(); + if(RoleUtils.getSysAppuserId()==null){ + return error("未绑定移动端用户"); + } + List ids = blockCompanyService.getBlockCompanyIds(userId); + return AjaxResult.success(ids); + } + + /** + * 校验是否屏蔽该企业 + */ + @ApiOperation("校验是否屏蔽该企业") + @PreAuthorize("@ss.hasPermi('cms:blockCompany:check')") + @GetMapping("/check") + public AjaxResult check(@RequestParam Long companyId) { + Long userId=RoleUtils.getSysAppuserId(); + if(userId==null){ + return error("未绑定移动端用户"); + } + boolean blocked = blockCompanyService.isBlocked(userId, companyId); + return AjaxResult.success(blocked); + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserBlockCompany.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserBlockCompany.java new file mode 100644 index 0000000..13b0528 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserBlockCompany.java @@ -0,0 +1,25 @@ +package com.ruoyi.cms.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.ruoyi.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import lombok.Data; + +@Data +@ApiModel("用户屏蔽企业表") +@TableName("app_user_block_company") +public class AppUserBlockCompany extends BaseEntity { + + @TableField(exist = false) + private static final long serialVersionUID = 1L; + + /** 主键ID */ + @TableId(type = IdType.AUTO) + private Long id; + + /** APP用户ID */ + private Long userId; + + /** 被屏蔽企业ID */ + private Long companyId; +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserBlockCompanyMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserBlockCompanyMapper.java new file mode 100644 index 0000000..a282d42 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserBlockCompanyMapper.java @@ -0,0 +1,32 @@ +package com.ruoyi.cms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.cms.domain.AppUserBlockCompany; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface AppUserBlockCompanyMapper extends BaseMapper { + + /** + * 查询用户屏蔽的企业ID列表 + */ + List selectBlockCompanyIdsByUserId(@Param("userId") Long userId); + + /** + * 判断用户是否已屏蔽该企业 + */ + int checkUserBlockCompany(@Param("userId") Long userId, @Param("companyId") Long companyId); + + /** + * 根据用户ID查询全部屏蔽记录 + */ + List selectListByUserId(@Param("userId") Long userId); + + /** + * 根据用户id查询屏蔽的企业及企业的岗位 + * @param userId + * @return + */ + List selectBlockCompanyIdsByUserIdJobs(@Param("userId") Long userId); +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/AppUserBlockCompanyService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/AppUserBlockCompanyService.java new file mode 100644 index 0000000..210eb42 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/AppUserBlockCompanyService.java @@ -0,0 +1,38 @@ +package com.ruoyi.cms.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.cms.domain.AppUserBlockCompany; + +import java.util.List; + +public interface AppUserBlockCompanyService extends IService { + + /** + * 新增屏蔽企业(去重校验) + */ + int addBlockCompany(AppUserBlockCompany entity); + + /** + * 取消屏蔽(逻辑删除) + */ + int cancelBlock(Long[] ids); + + /** + * 获取用户所有屏蔽企业ID + */ + List getBlockCompanyIds(Long userId); + + /** + * 校验是否已屏蔽 + */ + boolean isBlocked(Long userId, Long companyId); + + /** + * 查询用户屏蔽列表 + */ + List listByUserId(Long userId); + + int batchCancelBlock(Long userId,List companyIdList); + + List selectListByUserId(Long userId); +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserBlockCompanyServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserBlockCompanyServiceImpl.java new file mode 100644 index 0000000..6f0b4d8 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserBlockCompanyServiceImpl.java @@ -0,0 +1,70 @@ +package com.ruoyi.cms.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.cms.domain.AppUserBlockCompany; +import com.ruoyi.cms.mapper.AppUserBlockCompanyMapper; +import com.ruoyi.cms.service.AppUserBlockCompanyService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +@Service +public class AppUserBlockCompanyServiceImpl extends ServiceImpl + implements AppUserBlockCompanyService { + + @Autowired + private AppUserBlockCompanyMapper appUserBlockCompanyMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + public int addBlockCompany(AppUserBlockCompany entity) { + if (isBlocked(entity.getUserId(), entity.getCompanyId())) { + throw new RuntimeException("已屏蔽该企业,无需重复操作"); + } + return baseMapper.insert(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int cancelBlock(Long[] ids) { + return appUserBlockCompanyMapper.deleteBatchIds(Arrays.asList(ids)); + } + + @Override + public List getBlockCompanyIds(Long userId) { + return baseMapper.selectBlockCompanyIdsByUserId(userId); + } + + @Override + public boolean isBlocked(Long userId, Long companyId) { + return baseMapper.checkUserBlockCompany(userId, companyId) > 0; + } + + @Override + public List listByUserId(Long userId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(AppUserBlockCompany::getUserId, userId) + .orderByDesc(AppUserBlockCompany::getCreateTime); + return baseMapper.selectList(wrapper); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int batchCancelBlock(Long userId, List companyIdList) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(AppUserBlockCompany::getUserId, userId) + .eq(AppUserBlockCompany::getDelFlag, "0") + .in(AppUserBlockCompany::getCompanyId, companyIdList); + AppUserBlockCompany updateEntity = new AppUserBlockCompany(); + updateEntity.setDelFlag("2"); + return baseMapper.update(updateEntity, wrapper); + } + + public List selectListByUserId(Long userId){ + return appUserBlockCompanyMapper.selectListByUserId(userId); + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index e1cb838..bc654df 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -2,6 +2,7 @@ package com.ruoyi.cms.service.impl; import com.alibaba.fastjson.JSON; import com.ruoyi.cms.domain.vo.CompanyVo; +import com.ruoyi.cms.mapper.AppUserBlockCompanyMapper; import com.ruoyi.cms.service.ICompanyService; import com.ruoyi.common.core.domain.entity.AppUser; import com.ruoyi.cms.domain.ESJobDocument; @@ -58,6 +59,8 @@ public class ESJobSearchImpl implements IESJobSearchService private ICompanyService iCompanyService; @Autowired private RedisCache redisCache; + @Autowired + private AppUserBlockCompanyMapper appUserBlockCompanyMapper; // 锁的key(唯一标识ES索引初始化) private static final String ES_INIT_LOCK_KEY = "es:job_document:init:lock"; @@ -241,6 +244,10 @@ public class ESJobSearchImpl implements IESJobSearchService //查询 if(SiteSecurityUtils.isLogin()){ AppUser appUser = appUserService.selectAppUserByUserId(SiteSecurityUtils.getUserId()); + List jobs=appUserBlockCompanyMapper.selectBlockCompanyIdsByUserIdJobs(appUser.getUserId()); + if (jobs != null) { + jobIds.addAll(jobs.stream().distinct().collect(Collectors.toList())); + } if (!StringUtil.isEmptyOrNull(esJobSearch.getCode())) { newSearch.setCode(esJobSearch.getCode()); } @@ -423,7 +430,13 @@ public class ESJobSearchImpl implements IESJobSearchService public EsPageInfo nearJob(ESJobSearch jobQuery) { Integer pageNum = jobQuery.getCurrent(); Integer pageSize = jobQuery.getPageSize(); - LambdaEsQueryWrapper wrapper = getWrapper(jobQuery,null); + //添加屏蔽的企业 + List jobIds=null; + if(SiteSecurityUtils.isLogin()) { + AppUser appUser = appUserService.selectAppUserByUserId(SiteSecurityUtils.getUserId()); + jobIds = appUserBlockCompanyMapper.selectBlockCompanyIdsByUserIdJobs(appUser.getUserId()); + } + LambdaEsQueryWrapper wrapper = getWrapper(jobQuery,jobIds); EsPageInfo esJobDocumentEsPageInfo = esJobDocumentMapper.pageQuery(wrapper, pageNum, pageSize); return esJobDocumentEsPageInfo; } @@ -433,6 +446,13 @@ public class ESJobSearchImpl implements IESJobSearchService Integer pageNum = jobQuery.getCurrent(); Integer pageSize = jobQuery.getPageSize(); LambdaEsQueryWrapper wrapper = getWrapper(jobQuery, null); + //添加屏蔽的企业 + List jobIds=null; + if(SiteSecurityUtils.isLogin()) { + AppUser appUser = appUserService.selectAppUserByUserId(SiteSecurityUtils.getUserId()); + jobIds = appUserBlockCompanyMapper.selectBlockCompanyIdsByUserIdJobs(appUser.getUserId()); + wrapper.not().in(ESJobDocument::getJobId, jobIds); + } if(jobQuery.getCountyIds()!=null){ wrapper.and(x->x.in(ESJobDocument::getJobLocationAreaCode,jobQuery.getCountyIds())); } @@ -444,7 +464,12 @@ public class ESJobSearchImpl implements IESJobSearchService public EsPageInfo subway(ESJobSearch jobQuery) { Integer pageNum = jobQuery.getCurrent(); Integer pageSize = jobQuery.getPageSize(); - LambdaEsQueryWrapper wrapper = getWrapper(jobQuery,null); + List jobIds=null; + if(SiteSecurityUtils.isLogin()) { + AppUser appUser = appUserService.selectAppUserByUserId(SiteSecurityUtils.getUserId()); + jobIds = appUserBlockCompanyMapper.selectBlockCompanyIdsByUserIdJobs(appUser.getUserId()); + } + LambdaEsQueryWrapper wrapper = getWrapper(jobQuery,jobIds); EsPageInfo esJobDocumentEsPageInfo = esJobDocumentMapper.pageQuery(wrapper, pageNum, pageSize); return esJobDocumentEsPageInfo; } @@ -453,7 +478,12 @@ public class ESJobSearchImpl implements IESJobSearchService public EsPageInfo commercialArea(ESJobSearch jobQuery) { Integer pageNum = jobQuery.getCurrent(); Integer pageSize = jobQuery.getPageSize(); - LambdaEsQueryWrapper wrapper = getWrapper(jobQuery,null); + List jobIds=null; + if(SiteSecurityUtils.isLogin()) { + AppUser appUser = appUserService.selectAppUserByUserId(SiteSecurityUtils.getUserId()); + jobIds = appUserBlockCompanyMapper.selectBlockCompanyIdsByUserIdJobs(appUser.getUserId()); + } + LambdaEsQueryWrapper wrapper = getWrapper(jobQuery,jobIds); if(jobQuery.getLongitude()!=null){ wrapper.geoDistance(ESJobDocument::getLatAndLon,Double.valueOf(jobQuery.getRadius()), DistanceUnit.KILOMETERS,new GeoPoint(Double.parseDouble(jobQuery.getLatitude().toString()), Double.parseDouble(jobQuery.getLongitude().toString()))); } @@ -652,13 +682,17 @@ public class ESJobSearchImpl implements IESJobSearchService Integer pageNum = jobQuery.getCurrent(); Integer pageSize = jobQuery.getPageSize(); LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>(); -// if(SiteSecurityUtils.isLogin()){ -// AppUser appUser = appUserService.selectAppUserByUserId(SiteSecurityUtils.getUserId()); + if(SiteSecurityUtils.isLogin()){ + AppUser appUser = appUserService.selectAppUserByUserId(SiteSecurityUtils.getUserId()); + List jobs=appUserBlockCompanyMapper.selectBlockCompanyIdsByUserIdJobs(appUser.getUserId()); + if (ListUtil.isListEmptyOrNull(jobs)) { + wrapper.not().in(ESJobDocument::getJobId, jobs); + } // if(!ListUtil.isEmptyOrNull(appUser.getJobTitle())){ // List jobTitle = appUser.getJobTitle(); // jobQuery.setJobTitle(String.join(",", jobTitle)); // } -// } + } if(hasText(jobQuery.getJobTitle())){ wrapper.and(a->a.match(ESJobDocument::getJobTitle,jobQuery.getJobTitle().trim(),5.0f) .or() diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/RoleUtils.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/RoleUtils.java index e9a4326..efd904d 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/RoleUtils.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/RoleUtils.java @@ -111,4 +111,17 @@ public class RoleUtils { } return null; } + + /** + * 获取app_user_id + * @return + */ + public static Long getSysAppuserId(){ + LoginUser loginUser = SecurityUtils.getLoginUser(); + SysUser sysUser = loginUser.getUser(); + if (sysUser == null) { + throw new IllegalArgumentException("用户信息为空,无法获取个人信息"); + } + return sysUser.getAppUserId(); + } } \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserBlockCompanyMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserBlockCompanyMapper.xml new file mode 100644 index 0000000..b62d767 --- /dev/null +++ b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserBlockCompanyMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + select id, user_id, company_id, del_flag, create_by, create_time, update_by, update_time, remark from app_user_block_company + + + + + + + + + + + From 827bb8ddfc1a65c7357642c7ab6dbd79b299bbc9 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Wed, 8 Jul 2026 23:15:43 +0800 Subject: [PATCH 34/61] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=AA=E4=BA=BA?= =?UTF-8?q?=E5=B1=8F=E8=94=BD=E4=BC=81=E4=B8=9A=EF=BC=8C=E5=B9=B6=E4=B8=94?= =?UTF-8?q?=E6=8E=A8=E8=8D=90=E5=B2=97=E4=BD=8D=E6=97=B6=EF=BC=8C=E5=B9=B6?= =?UTF-8?q?=E4=B8=94=E4=BC=81=E4=B8=9A=E5=AF=B9=E5=BA=94=E7=9A=84=E5=B2=97?= =?UTF-8?q?=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/app/AppUserBlockCompanyMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserBlockCompanyMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserBlockCompanyMapper.xml index b62d767..1802283 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserBlockCompanyMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserBlockCompanyMapper.xml @@ -46,7 +46,7 @@ FROM app_user_block_company a inner join company b on a.company_id=b.company_id and b.del_flag='0' inner join job j on b.company_id =j.company_id and j.del_flag='0' - WHERE user_id = #{userId} AND a.del_flag = '0' + WHERE a.user_id = #{userId} AND a.del_flag = '0' From 9f3260ab8d2b955f7edf9b57a6fcbdd1feb74ab4 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Thu, 9 Jul 2026 11:54:59 +0800 Subject: [PATCH 35/61] =?UTF-8?q?app=5Fuser=E6=B7=BB=E5=8A=A0email?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/app/AppUserMapper.xml | 3 ++- .../main/java/com/ruoyi/common/core/domain/entity/AppUser.java | 3 +++ .../main/java/com/ruoyi/framework/web/service/SsoService.java | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml index 2b54f4d..2319457 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml @@ -32,10 +32,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + - select user_id, name, age, sex, birth_date, education, political_affiliation, phone, avatar, salary_min, salary_max, area, status, del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark,job_title_id,is_recommend,id_card,work_experience,is_company_user,dw_userid from app_user + select user_id, name, age, sex, birth_date, education, political_affiliation, phone, avatar, salary_min, salary_max, area, status, del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark,job_title_id,is_recommend,id_card,work_experience,is_company_user,dw_userid,email from app_user + + + del_flag = '0' + + and user_id = #{userId} + + + and job_id = #{jobId} + + + and complaint_type = #{complaintType} + + + and complaint_status = #{complaintStatus} + + + and handle_user_id = #{handleUserId} + + + and create_time >= #{params.beginTime} + + + and create_time <= #{params.endTime} + + + order by create_time desc + + + + + + + \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/CompanyMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/CompanyMapper.xml index c047566..28f4524 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/CompanyMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/CompanyMapper.xml @@ -37,6 +37,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -166,4 +167,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select a.* from COMPANY a inner join job b on a.company_id=b.company_id and b.job_id=#{jobId} limit 1 + + update COMPANY set company_status=#{companyStatus},update_time=#{updateTime},update_by=#{updateBy} where company_id=#{companyId} and del_flag='0' + + diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml index f921f1c..e372b45 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml @@ -83,6 +83,7 @@ + @@ -137,7 +138,7 @@ job_title, min_salary, max_salary, education, experience, company_name, job_location, job_location_area_code, posting_date, vacancies, latitude, longitude, "view", company_id, is_hot, is_urgent, apply_num, description, is_publish, data_source, job_url, remark, del_flag, - create_by, create_time, row_id, job_category,job_type,job_address + create_by, create_time, row_id, job_category,job_type,job_address,job_status ) VALUES ( @@ -146,7 +147,7 @@ #{job.vacancies}, #{job.latitude}, #{job.longitude}, #{job.view}, #{job.companyId}, #{job.isHot}, #{job.isUrgent}, #{job.applyNum}, #{job.description}, #{job.isPublish}, #{job.dataSource}, #{job.jobUrl}, #{job.remark}, #{job.delFlag}, #{job.createBy}, #{job.createTime}, - #{job.rowId}, #{job.jobCategory},#{job.jobType},#{job.jobAddress} + #{job.rowId}, #{job.jobCategory},#{job.jobType},#{job.jobAddress},#{job.jobStatus} ) @@ -206,6 +207,7 @@ and is_hot = #{isHot} and apply_num = #{applyNum} and company_id in(select company_id from company where code=#{code}) + and job_status = #{jobStatus} and min_salary < 1750 @@ -254,6 +256,7 @@ and is_hot = #{isHot} and apply_num = #{applyNum} and is_publish = #{isPublish} + and job_status = #{jobStatus} and job_location_area_code in #{item} @@ -292,10 +295,10 @@ + + + update job set job_status=#{jobStatus},update_time=#{updateTime},update_by=#{updateBy} where job_id=#{jobId} and del_flag='0' + + + + update job set job_status='1', update_time = NOW() where del_flag='0' and company_id=#{companyId} and job_status='0' + + + + update job set job_status='0', update_time = NOW() where del_flag='0' and company_id=#{companyId} and job_status='1' + + \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java index 4eb123a..d10ebb9 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java @@ -49,4 +49,9 @@ public class CacheConstants *pc岗位ids */ public static final String SYS_JOB_IDS = "job_ids:"; + + /** + * 浪潮互联网token + */ + public static final String LC_HLW_TOKEN ="lc_hlw_token:"; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Company.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Company.java index 2418355..d6d0998 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Company.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Company.java @@ -124,6 +124,9 @@ public class Company extends BaseEntity @ApiModelProperty("法人联系方式") private String legalPhone; + @ApiModelProperty("是否下架(0上架,1下架)") + private String companyStatus; + /** * 岗位列表 */ diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java index 1969f00..12e88f3 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson2.JSONObject; import com.ruoyi.cms.service.ICompanyService; import com.ruoyi.cms.service.impl.AppUserServiceImpl; import com.ruoyi.cms.util.StringUtil; +import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.entity.AppUser; import com.ruoyi.common.core.domain.entity.Company; @@ -43,6 +44,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Optional; +import java.util.concurrent.TimeUnit; import java.util.stream.Stream; /** @@ -271,6 +273,8 @@ public class SsoService { //用户存在,生成本系统用户的token String token = loginSysUser(sysUser, userJson.getString("userName")); + //缓存浪潮互联网token + redisCache.setCacheObject(CacheConstants.LC_HLW_TOKEN+appUser.getUserId(),lcToken, 6, TimeUnit.HOURS); JSONObject backJson = new JSONObject(); backJson.put("token", token); backJson.put("lcToken", lcToken); @@ -355,6 +359,7 @@ public class SsoService { //用户存在,生成本系统用户的token String token = loginSysUser(sysUser, userJson.getString("userName")); + redisCache.setCacheObject(CacheConstants.LC_HLW_TOKEN+appUserId,lcToken, 6, TimeUnit.HOURS); JSONObject backJson = new JSONObject(); backJson.put("token", token); backJson.put("lcToken", lcToken); From 5f216fa68d0e460a427a715b3232ea29cf76e7c4 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Thu, 9 Jul 2026 18:59:36 +0800 Subject: [PATCH 37/61] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=A7=BB=E5=8A=A8?= =?UTF-8?q?=E7=AB=AF=E6=8A=95=E8=AF=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/AppUserBlockCompanyController.java | 2 + .../app/AppUserJobComplaintController.java | 95 +++++++++++++++++++ .../cms/CmsUserBlockCompanyController.java | 2 + .../cms/CmsUserJobComplaintController.java | 6 +- 4 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserJobComplaintController.java diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserBlockCompanyController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserBlockCompanyController.java index 4a34b53..98ba747 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserBlockCompanyController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserBlockCompanyController.java @@ -6,6 +6,7 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.utils.SiteSecurityUtils; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; @@ -14,6 +15,7 @@ import java.util.List; @RestController @RequestMapping("/app/blockCompany") +@Api(tags = "移动端:用户屏蔽企业") public class AppUserBlockCompanyController extends BaseController { @Resource diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserJobComplaintController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserJobComplaintController.java new file mode 100644 index 0000000..35450d4 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserJobComplaintController.java @@ -0,0 +1,95 @@ +package com.ruoyi.cms.controller.app; + +import com.ruoyi.cms.domain.AppUserJobComplaint; +import com.ruoyi.cms.service.IAppUserJobComplaintService; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.utils.SiteSecurityUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/app/jobComplaint") +@Api(tags = "移动端:用户投诉岗位") +public class AppUserJobComplaintController extends BaseController { + + @Autowired + private IAppUserJobComplaintService appUserJobComplaintService; + + /** + * 投诉列表分页 + */ + @ApiOperation("投诉列表分页") + @GetMapping("/list") + public TableDataInfo list(AppUserJobComplaint appUserJobComplaint) { + if(appUserJobComplaint.getUserId()==null){ + appUserJobComplaint.setUserId(SiteSecurityUtils.getUserId()); + } + startPage(); + List list = appUserJobComplaintService.selectAppUserJobComplaintList(appUserJobComplaint); + return getDataTable(list); + } + + /** + * 详情 + */ + @ApiOperation("详情") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return AjaxResult.success(appUserJobComplaintService.selectAppUserJobComplaintById(id)); + } + + /** + * 新增投诉(用户端提交可单独抽接口,这里后台新增) + */ + @ApiOperation("新增投诉") + @PostMapping + public AjaxResult add(@RequestBody AppUserJobComplaint appUserJobComplaint) { + if(!SiteSecurityUtils.isLogin()){ + return error("未登录!"); + } + if(appUserJobComplaint.getUserId()==null){ + appUserJobComplaint.setUserId(SiteSecurityUtils.getUserId()); + } + return toAjax(appUserJobComplaintService.insertAppUserJobComplaint(appUserJobComplaint)); + } + + /** + * 修改(处理投诉、填写回复) + */ + @ApiOperation("修改") + @PutMapping + public AjaxResult edit(@RequestBody AppUserJobComplaint appUserJobComplaint) { + if(!SiteSecurityUtils.isLogin()){ + return error("未登录!"); + } + if(appUserJobComplaint.getUserId()==null){ + appUserJobComplaint.setUserId(SiteSecurityUtils.getUserId()); + } + return toAjax(appUserJobComplaintService.updateAppUserJobComplaint(appUserJobComplaint)); + } + + /** + * 批量删除 + */ + @ApiOperation("批量删除") + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(appUserJobComplaintService.deleteAppUserJobComplaintByIds(ids)); + } + + /** + * 校验是否已投诉该岗位 + */ + @ApiOperation("校验是否已投诉该岗位") + @GetMapping("/checkComplaint") + public AjaxResult checkComplaint(Long userId, Long jobId) { + boolean has = appUserJobComplaintService.checkUserHasComplaint(userId, jobId); + return AjaxResult.success(has); + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserBlockCompanyController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserBlockCompanyController.java index fbd6d16..6fa46f4 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserBlockCompanyController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserBlockCompanyController.java @@ -7,6 +7,7 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.utils.SecurityUtils; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -17,6 +18,7 @@ import java.util.List; @RestController @RequestMapping("/cms/blockCompany") +@Api(tags = "后台:用户屏蔽企业") public class CmsUserBlockCompanyController extends BaseController { @Resource diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserJobComplaintController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserJobComplaintController.java index c251590..43fd0c5 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserJobComplaintController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserJobComplaintController.java @@ -7,17 +7,19 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; import java.util.List; @RestController @RequestMapping("/cms/jobComplaint") +@Api(tags = "后台:用户投诉企业") public class CmsUserJobComplaintController extends BaseController { - @Resource + @Autowired private IAppUserJobComplaintService appUserJobComplaintService; /** From b2784c0ac195d5528af95eb9b786a089bb94b9ee Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Thu, 9 Jul 2026 19:56:55 +0800 Subject: [PATCH 38/61] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=8A=95=E8=AF=89=E5=92=8C=E5=B1=8F=E8=94=BD=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cms/CmsUserBlockCompanyController.java | 18 ++++++++-- .../ruoyi/cms/domain/AppUserBlockCompany.java | 5 +++ .../ruoyi/cms/domain/AppUserJobComplaint.java | 9 +++++ .../cms/mapper/AppUserBlockCompanyMapper.java | 2 +- .../service/AppUserBlockCompanyService.java | 2 +- .../impl/AppUserBlockCompanyServiceImpl.java | 4 +-- .../mapper/app/AppUserBlockCompanyMapper.xml | 16 ++++++--- .../mapper/app/AppUserJobComplaintMapper.xml | 36 +++++++++++-------- 8 files changed, 67 insertions(+), 25 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserBlockCompanyController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserBlockCompanyController.java index 6fa46f4..07fdd91 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserBlockCompanyController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserBlockCompanyController.java @@ -61,9 +61,9 @@ public class CmsUserBlockCompanyController extends BaseController { * 获取当前用户屏蔽企业列表 */ @ApiOperation("获取当前用户屏蔽企业列表") - @PreAuthorize("@ss.hasPermi('cms:blockCompany:list')") - @GetMapping("/list") - public TableDataInfo list(AppUserBlockCompany appUserBlockCompany){ + @PreAuthorize("@ss.hasPermi('cms:blockCompany:listByUserId')") + @GetMapping("/listByUserId") + public TableDataInfo listByUserId(AppUserBlockCompany appUserBlockCompany){ if(!SecurityUtils.isLogin()){ return getDataTable(new ArrayList<>()); } @@ -75,6 +75,18 @@ public class CmsUserBlockCompanyController extends BaseController { return getDataTable(list); } + /** + * 获取当前用户屏蔽企业列表 + */ + @ApiOperation("获取屏蔽企业列表") + @PreAuthorize("@ss.hasPermi('cms:blockCompany:list')") + @GetMapping("/list") + public TableDataInfo list(AppUserBlockCompany appUserBlockCompany){ + startPage(); + List list=blockCompanyService.selectListByUserId(appUserBlockCompany); + return getDataTable(list); + } + /** * 查询当前用户屏蔽的企业ID集合(用于过滤职位) */ diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserBlockCompany.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserBlockCompany.java index 13b0528..7a7d3c4 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserBlockCompany.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserBlockCompany.java @@ -22,4 +22,9 @@ public class AppUserBlockCompany extends BaseEntity { /** 被屏蔽企业ID */ private Long companyId; + + @TableField(exist = false) + private String companyName; + @TableField(exist = false) + private String name; } \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserJobComplaint.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserJobComplaint.java index f67ffbb..cf45e00 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserJobComplaint.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserJobComplaint.java @@ -65,4 +65,13 @@ public class AppUserJobComplaint extends BaseEntity { /** 处理时间 */ @ApiModelProperty("处理时间") private LocalDateTime handleTime; + + @TableField(exist = false) + private Long companyId; + @TableField(exist = false) + private String companyName; + @TableField(exist = false) + private String jobTitle; + @TableField(exist = false) + private String name; } \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserBlockCompanyMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserBlockCompanyMapper.java index a282d42..a62ff4f 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserBlockCompanyMapper.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserBlockCompanyMapper.java @@ -21,7 +21,7 @@ public interface AppUserBlockCompanyMapper extends BaseMapper selectListByUserId(@Param("userId") Long userId); + List selectListByUserId(AppUserBlockCompany appUserBlockCompany); /** * 根据用户id查询屏蔽的企业及企业的岗位 diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/AppUserBlockCompanyService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/AppUserBlockCompanyService.java index 210eb42..be81c47 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/AppUserBlockCompanyService.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/AppUserBlockCompanyService.java @@ -34,5 +34,5 @@ public interface AppUserBlockCompanyService extends IService companyIdList); - List selectListByUserId(Long userId); + List selectListByUserId(AppUserBlockCompany appUserBlockCompany); } \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserBlockCompanyServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserBlockCompanyServiceImpl.java index 6f0b4d8..aad076b 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserBlockCompanyServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserBlockCompanyServiceImpl.java @@ -64,7 +64,7 @@ public class AppUserBlockCompanyServiceImpl extends ServiceImpl selectListByUserId(Long userId){ - return appUserBlockCompanyMapper.selectListByUserId(userId); + public List selectListByUserId(AppUserBlockCompany appUserBlockCompany){ + return appUserBlockCompanyMapper.selectListByUserId(appUserBlockCompany); } } \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserBlockCompanyMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserBlockCompanyMapper.xml index 1802283..47387c2 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserBlockCompanyMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserBlockCompanyMapper.xml @@ -14,10 +14,13 @@ + + + - select id, user_id, company_id, del_flag, create_by, create_time, update_by, update_time, remark from app_user_block_company + select t.id, t.user_id, t.company_id, t.del_flag, t.create_by, t.create_time, t.update_by, t.update_time, t.remark, ca.name as company_name,au.name - FROM app_user_block_company - WHERE user_id = #{userId} AND del_flag = '0' - ORDER BY create_time DESC + FROM app_user_block_company t + LEFT JOIN company ca ON t.company_id = ca.company_id + LEFT JOIN app_user au on t.user_id=au.user_id + + t.del_flag = '0' + and t.user_id = #{userId} + + ORDER BY t.create_time DESC - + - del_flag = '0' + t.del_flag = '0' - and user_id = #{userId} + and t.and user_id = #{userId} - and job_id = #{jobId} + and t.and job_id = #{jobId} - and complaint_type = #{complaintType} + and t.complaint_type = #{complaintType} - and complaint_status = #{complaintStatus} + and t.complaint_status = #{complaintStatus} - and handle_user_id = #{handleUserId} - - - and create_time >= #{params.beginTime} - - - and create_time <= #{params.endTime} + and t.handle_user_id = #{handleUserId} - order by create_time desc + order by t.create_time desc diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppUser.java index 567e857..5d75704 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppUser.java @@ -169,8 +169,8 @@ public class AppUser extends BaseEntity @ApiModelProperty("户籍地址") private String domicileAddress; - @ApiModelProperty("地纬userid") - private String dwUserid; + @ApiModelProperty("浪潮userid") + private String lcUserid; /** 1-大龄人员;2-低保人员;3-残疾人员;4-失地农名或联队职工;5-防止返贫;6-未就业大中专毕业生;7-退役军人;8-长期失业人员;9-城镇零就业家庭成员;10.刑满释放人员 **/ @ApiModelProperty("用户类型,以逗号分隔") From 5910a5d4b42fcafe8adead0b1387cd1c130a833d Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Thu, 9 Jul 2026 22:57:07 +0800 Subject: [PATCH 40/61] =?UTF-8?q?1.=E6=B7=BB=E5=8A=A0=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=B1=82=E8=81=8C=E8=80=85=E5=AF=86=E7=A0=81=202.=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E4=BF=AE=E6=94=B9=E7=AE=A1=E7=90=86=E5=91=98=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=B8=AA=E4=BA=BA=E5=92=8C=E4=BC=81=E4=B8=9A=E5=AF=86?= =?UTF-8?q?=E7=A0=81=E6=8E=A5=E5=8F=A3=203.=E6=B7=BB=E5=8A=A0=E5=90=AF?= =?UTF-8?q?=E7=94=A8=E5=92=8C=E7=A6=81=E7=94=A8=E4=BC=81=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-dev.yml | 2 +- .../src/main/resources/application-local.yml | 2 +- .../cms/controller/app/AppUserController.java | 1 + .../controller/cms/CmsAppUserController.java | 62 ++++++++++++++++++- .../ruoyi/cms/service/IAppUserService.java | 4 ++ .../cms/service/impl/AppUserServiceImpl.java | 62 +++++++++++++++---- .../com/ruoyi/cms/util/http/JsonUtil.java | 49 +++++++++++++++ .../common/core/domain/entity/AppUser.java | 2 +- .../common/core/domain/entity/SysUser.java | 14 +++++ .../com/ruoyi/common/utils/SecurityUtils.java | 31 +++++++++- .../ruoyi/common/utils/SiteSecurityUtils.java | 16 +++++ .../framework/web/service/SsoService.java | 16 +++-- .../resources/mapper/system/SysUserMapper.xml | 6 +- 13 files changed, 244 insertions(+), 23 deletions(-) create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/http/JsonUtil.java diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index 5fd01b5..f1bb066 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -135,7 +135,7 @@ lc_web_auth: appSecret: x14lueHbtLQL7Pz2G7gE4wcGCV6TDblO5xfeu9V2wGk= getTokenUrl: http://100.128.128.6:9081/prod-psout-api/auth/token getUserInfoUrl: http://100.128.128.6:9081/prod-psout-api/system/app/authorize/user/info - editUserInfoUrl: http://100.128.128.6:9081/prod-psout-api/system/auth/user/edit + editUserInfoUrl: http://100.128.128.6:9081/prod-psout-api/auth/user/edit lc_cms_auth: appId: cloud-9793ee8a8c3d47b8871007ffc4128502 diff --git a/ruoyi-admin/src/main/resources/application-local.yml b/ruoyi-admin/src/main/resources/application-local.yml index a2b5bcb..8456e59 100644 --- a/ruoyi-admin/src/main/resources/application-local.yml +++ b/ruoyi-admin/src/main/resources/application-local.yml @@ -141,7 +141,7 @@ lc_web_auth: appSecret: x14lueHbtLQL7Pz2G7gE4wcGCV6TDblO5xfeu9V2wGk= getTokenUrl: http://218.31.252.15:9081/prod-psout-api/auth/token getUserInfoUrl: http://218.31.252.15:9081/prod-psout-api/system/app/authorize/user/info - editUserInfoUrl: http://218.31.252.15:9081/prod-psout-api/system/auth/user/edit + editUserInfoUrl: http://218.31.252.15:9081/prod-psout-api/auth/user/edit #监管端: lc_cms_auth: appId: cloud-9793ee8a8c3d47b8871007ffc4128502 diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserController.java index e8e6634..52923b2 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserController.java @@ -188,6 +188,7 @@ public class AppUserController extends BaseController public AjaxResult editUserSafety(@RequestBody AppUser appUser) { appUser.setUserId(SiteSecurityUtils.getUserId()); + appUser.setLcUserid(SiteSecurityUtils.getlcUserid()); return AjaxResult.success(appUserService.editUserSafety(appUser)); } } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserController.java index 2f6943b..8ab995a 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserController.java @@ -16,7 +16,6 @@ import com.ruoyi.common.core.domain.entity.AppUserShow; import com.ruoyi.common.core.domain.model.RegisterBody; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; -import com.ruoyi.common.utils.SiteSecurityUtils; import com.ruoyi.common.utils.StringUtils; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; @@ -275,4 +274,65 @@ public class CmsAppUserController extends BaseController } return toAjax(appReviewJobService.insertAppReviewJob(appReviewJob)); } + + @ApiOperation("求职者求职安全保障") + @PreAuthorize("@ss.hasPermi('cms:appUser:editUserSafety')") + @PostMapping("/editUserSafety") + public AjaxResult editUserSafety(@RequestBody AppUser appUser) + { + if(!SecurityUtils.isLogin()){ + return error("未登录"); + } + appUser.setUserId(SecurityUtils.getAppuserId()); + appUser.setLcUserid(SecurityUtils.getlcUserid()); + return AjaxResult.success(appUserService.editUserSafety(appUser)); + } + + @ApiOperation("浪潮修改密码") + @PreAuthorize("@ss.hasPermi('cms:appUser:resetLcPsw')") + @PostMapping("/resetLcPsw") + public AjaxResult resetLcPsw(@RequestBody AppUser appUser){ + if (appUser == null) { + return AjaxResult.error("请求参数不能为空"); + } + if(!SecurityUtils.isLogin()){ + return error("未登录"); + } + if(SecurityUtils.getlcUserid()==null){ + return error("门户会话失效,请重新在门户登录"); + } + if(appUser.getUserId()==null){ + return error("用户id为空!"); + } + if(StringUtils.isBlank(appUser.getPassword())){ + return error("密码为空!"); + } + appUser.setLcUserid(SecurityUtils.getlcUserid()); + appUserService.resetLcPsw(appUser); + return success("密码重置成功"); + } + + @ApiOperation("浪潮启用和停用企业") + @PreAuthorize("@ss.hasPermi('cms:appUser:changeLcCompanyStatus')") + @PostMapping("/changeLcCompanyStatus") + public AjaxResult changeLcCompanyStatus(@RequestBody AppUser appUser){ + if (appUser == null) { + return AjaxResult.error("请求参数不能为空"); + } + if(!SecurityUtils.isLogin()){ + return error("未登录"); + } + if(SecurityUtils.getlcUserid()==null){ + return error("门户会话失效,请重新在门户登录"); + } + if(appUser.getUserId()==null){ + return error("用户id为空!"); + } + if(StringUtils.isBlank(appUser.getStatus())){ + return error("状态为空!"); + } + appUser.setLcUserid(SecurityUtils.getlcUserid()); + appUserService.changeLcCompanyStatus(appUser); + return success("密码重置成功"); + } } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserService.java index 0b5d324..59347a9 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserService.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserService.java @@ -85,4 +85,8 @@ public interface IAppUserService public List selectUserApplyList(AppUser appUser); int editUserSafety(AppUser appUser); + + void resetLcPsw(AppUser appUser); + + void changeLcCompanyStatus(AppUser appUser); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java index e728a87..6539239 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java @@ -3,11 +3,12 @@ package com.ruoyi.cms.service.impl; import java.util.*; import java.util.stream.Collectors; -import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.cms.util.http.HttpClientUtils; +import com.ruoyi.cms.util.http.JsonUtil; import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.core.domain.entity.MyChart; import com.ruoyi.common.core.domain.entity.File; @@ -58,6 +59,12 @@ public class AppUserServiceImpl extends ServiceImpl imple //互联网修改个人信息 @Value("${lc_web_auth.editUserInfoUrl}") String WEB_UPDATE_USER_INFO; + //修改密码接口 + @Value("${lc_cms_auth.resrtPwdUrl}") + String JG_RESET_PASSWORD_URL; + //启用和停用企业 + @Value("${lc_cms_auth.changeStatusUrl}") + String JG_UPDATE_COMPANY_URL; @Autowired private RedisCache redisCache; @@ -539,7 +546,7 @@ public class AppUserServiceImpl extends ServiceImpl imple public AppUser getUserInfo() { //查询用户信息 LoginUser loginUser=SecurityUtils.getLoginUser(); - System.out.println("loginUser========================"+JSON.toJSONString(loginUser)); + System.out.println("loginUser========================"+ JSON.toJSONString(loginUser)); SysUser sysUser=loginUser.getUser(); System.out.println("sysUser========================"+JSON.toJSONString(sysUser)); AppUser appUser=selectAppuserByIdcard(sysUser.getIdCard()); @@ -648,28 +655,59 @@ public class AppUserServiceImpl extends ServiceImpl imple @Override public int editUserSafety(AppUser appUser) { - appUserMapper.updateById(appUser); - String lcUserToken=redisCache.getCacheObject(CacheConstants.LC_HLW_TOKEN+appUser.getUserId()); + int i=appUserMapper.updateById(appUser); + String lcUserToken=redisCache.getCacheObject(CacheConstants.LC_HLW_TOKEN+appUser.getLcUserid()); if(StringUtils.isBlank(lcUserToken)){ throw new RuntimeException("token已失效"); } //修改门户个人信息 JSONObject pJson = new JSONObject(); if (StringUtils.isNotBlank(appUser.getEmail())) { - pJson.put("personEmail", appUser.getEmail()); + pJson.put("email", appUser.getEmail()); } if (StringUtils.isNotBlank(appUser.getPhone())) { - pJson.put("personPhone", appUser.getPhone()); + pJson.put("phonenumber", appUser.getPhone()); } if (StringUtils.isNotBlank(appUser.getPassword())) { pJson.put("password", appUser.getPassword()); } String result=httpClientUtils.sendHttpPost(WEB_UPDATE_USER_INFO,lcUserToken,pJson.toJSONString()); - if (StringUtils.isBlank(result)) { - throw new RuntimeException("调用门户修改用户信息接口响应为空"); - } - JSONObject json = JSONObject.parseObject(result); - System.out.println("门户修改个人信息返回:"+json); - return 0; + JSONObject respJson = JsonUtil.parsePortalResponse(result, "调用修改个人信息接口"); + JSONObject data = respJson.getJSONObject("data"); + System.out.println(data); + return i; } + + @Override + public void resetLcPsw(AppUser appUser) { + String lcUserToken=redisCache.getCacheObject(CacheConstants.LC_HLW_TOKEN+appUser.getLcUserid()); + if(StringUtils.isBlank(lcUserToken)){ + throw new RuntimeException("token已失效"); + } + //修改密码 + JSONObject pJson = new JSONObject(); + pJson.put("userId", appUser.getUserId()); + pJson.put("password", appUser.getPassword()); + String result=httpClientUtils.sendHttpPost(JG_RESET_PASSWORD_URL,lcUserToken,pJson.toJSONString()); + JSONObject respJson = JsonUtil.parsePortalResponse(result, "调用重置密码接口"); + JSONObject data = respJson.getJSONObject("data"); + System.out.println(data); + } + + @Override + public void changeLcCompanyStatus(AppUser appUser) { + String lcUserToken=redisCache.getCacheObject(CacheConstants.LC_HLW_TOKEN+appUser.getLcUserid()); + if(StringUtils.isBlank(lcUserToken)){ + throw new RuntimeException("token已失效"); + } + //启用禁用 + JSONObject pJson = new JSONObject(); + pJson.put("userId", appUser.getUserId()); + pJson.put("status", appUser.getStatus()); + String result=httpClientUtils.sendHttpPost(JG_UPDATE_COMPANY_URL,lcUserToken,pJson.toJSONString()); + JSONObject respJson = JsonUtil.parsePortalResponse(result, "调用停用和启用企业接口"); + JSONObject data = respJson.getJSONObject("data"); + System.out.println(data); + } + } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/http/JsonUtil.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/http/JsonUtil.java new file mode 100644 index 0000000..536d448 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/http/JsonUtil.java @@ -0,0 +1,49 @@ +package com.ruoyi.cms.util.http; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; + +public class JsonUtil { + + /** + * 解析门户接口返回并统一校验 + * @param result 接口原始响应字符串 + * @param apiDesc 接口业务描述(如:修改用户邮箱、查询用户信息) + * @return 解析后的JSONObject + */ + public static JSONObject parsePortalResponse(String result, String apiDesc) { + // 空响应校验 + if (StrUtil.isBlank(result)) { + throw new RuntimeException(apiDesc + "接口调用无返回数据,请检查服务连通性"); + } + + // 2. JSON解析 + JSONObject respJson; + try { + respJson = JSON.parseObject(result); + System.out.println(apiDesc + "返回:" + respJson); + } catch (Exception e) { + throw new RuntimeException(apiDesc + "接口返回数据格式异常,原始返回:" + result, e); + } + + //拦截404/500等SpringBoot错误体 + if (respJson.containsKey("status") && respJson.containsKey("error")) { + Integer httpStatus = respJson.getInteger("status"); + String errorMsg = respJson.getString("error"); + String path = respJson.getString("path"); + String errTemplate = "%s接口访问失败,HTTP状态码:%s,错误:%s,请求路径:%s,请核对接口地址是否正确"; + throw new RuntimeException(String.format(errTemplate, apiDesc, httpStatus, errorMsg, path)); + } + + //校验业务code=200 + Integer code = respJson.getInteger("code"); + if (!Integer.valueOf(200).equals(code)) { + String msg = respJson.getString("msg"); + String tip = StrUtil.isNotBlank(msg) ? msg : "未知业务异常"; + throw new RuntimeException(apiDesc + "失败:" + tip); + } + + return respJson; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppUser.java index 5d75704..0027f62 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppUser.java @@ -170,7 +170,7 @@ public class AppUser extends BaseEntity private String domicileAddress; @ApiModelProperty("浪潮userid") - private String lcUserid; + private Long lcUserid; /** 1-大龄人员;2-低保人员;3-残疾人员;4-失地农名或联队职工;5-防止返贫;6-未就业大中专毕业生;7-退役军人;8-长期失业人员;9-城镇零就业家庭成员;10.刑满释放人员 **/ @ApiModelProperty("用户类型,以逗号分隔") diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java index 47fc573..5152e0d 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java @@ -76,6 +76,11 @@ public class SysUser extends BaseEntity //appUserId private Long appUserId; + /** + * 浪潮用户lc_Userid + */ + private Long lcUserid; + //岗位名称组 private List jobTitles; @@ -341,6 +346,14 @@ public class SysUser extends BaseEntity this.experience = experience; } + public Long getLcUserid() { + return lcUserid; + } + + public void setLcUserid(Long lcUserid) { + this.lcUserid = lcUserid; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) @@ -367,6 +380,7 @@ public class SysUser extends BaseEntity .append("appUserId", getAppUserId()) .append("jobTitles", getJobTitles()) .append("experience", getExperience()) + .append("lcUserid", getLcUserid()) .toString(); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java index 243ce40..64a39a7 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java @@ -2,8 +2,8 @@ package com.ruoyi.common.utils; import java.util.Collection; import java.util.List; -import java.util.Objects; import java.util.stream.Collectors; + import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; @@ -189,4 +189,33 @@ public class SecurityUtils .anyMatch(x -> Constants.SUPER_ADMIN.equals(x) || PatternMatchUtils.simpleMatch(x, role)); } + /** + * 获取浪潮用户ID + **/ + public static Long getlcUserid() + { + try + { + return getLoginUser().getUser().getLcUserid(); + } + catch (Exception e) + { + throw new ServiceException("获取用户ID异常", HttpStatus.UNAUTHORIZED); + } + } + + /** + * @return + */ + public static Long getAppuserId() + { + try + { + return getLoginUser().getUser().getAppUserId(); + } + catch (Exception e) + { + throw new ServiceException("获取用户ID异常", HttpStatus.UNAUTHORIZED); + } + } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SiteSecurityUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SiteSecurityUtils.java index 5ba0ce6..a9e5e72 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SiteSecurityUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SiteSecurityUtils.java @@ -119,4 +119,20 @@ public class SiteSecurityUtils throw new ServiceException("获取用户信息异常", HttpStatus.UNAUTHORIZED); } } + + /** + * 获取lc_userid + * @return + */ + public static Long getlcUserid() + { + try + { + return getLoginSiteUser().getUser().getLcUserid(); + } + catch (Exception e) + { + throw new ServiceException("获取用户ID异常", HttpStatus.UNAUTHORIZED); + } + } } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java index 12e88f3..e4b93ab 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java @@ -235,6 +235,7 @@ public class SsoService { if (ObjectUtils.isEmpty(userJson)) { throw new RuntimeException("获取用户信息失败"); } + Long lcUserid=userJson.getLong("userId"); //用身份证号查询用户 用户类型(01:个人,02:企业) // 转换成本地:app角色:0企业,1求职者,2网格员 3内部政府人员 4其他(浪潮用) //userType对应appuser的isCompanyUser @@ -274,7 +275,7 @@ public class SsoService { //用户存在,生成本系统用户的token String token = loginSysUser(sysUser, userJson.getString("userName")); //缓存浪潮互联网token - redisCache.setCacheObject(CacheConstants.LC_HLW_TOKEN+appUser.getUserId(),lcToken, 6, TimeUnit.HOURS); + redisCache.setCacheObject(CacheConstants.LC_HLW_TOKEN+lcUserid,lcToken, 6, TimeUnit.HOURS); JSONObject backJson = new JSONObject(); backJson.put("token", token); backJson.put("lcToken", lcToken); @@ -326,6 +327,7 @@ public class SsoService { throw new RuntimeException("获取用户信息失败"); } + Long lcUserid=userJson.getLong("userId"); //用身份证号查询用户 用户类型(01:个人,02:企业) // 转换成本地:app角色:0企业,1求职者,2网格员 3内部政府人员 4其他(浪潮用) //取角色判断是网格员2,还是内部工作者3 @@ -359,7 +361,7 @@ public class SsoService { //用户存在,生成本系统用户的token String token = loginSysUser(sysUser, userJson.getString("userName")); - redisCache.setCacheObject(CacheConstants.LC_HLW_TOKEN+appUserId,lcToken, 6, TimeUnit.HOURS); + redisCache.setCacheObject(CacheConstants.LC_HLW_TOKEN+lcUserid,lcToken, 6, TimeUnit.HOURS); JSONObject backJson = new JSONObject(); backJson.put("token", token); backJson.put("lcToken", lcToken); @@ -438,7 +440,8 @@ public class SsoService { //保存appuser用户 private AppUser saveAppUser(JSONObject userJson, String isCompanyUser, String appId, String appSecret) { JSONObject info = userJson.containsKey("info") ? userJson.getJSONObject("info") : null; - System.out.println("userId===========" + userJson.getLong("userId")); + Long lcUserid=userJson.getLong("userId"); + System.out.println("userId===========" + lcUserid); System.out.println("userJson===========" + JSONObject.toJSONString(userJson)); AppUser appUser = new AppUser(); //app角色:0企业,1求职者,2网格员 3内部政府人员 4其他(浪潮用) @@ -451,6 +454,7 @@ public class SsoService { appUser.setLoginDate(new Date()); appUser.setCreateBy("system"); appUser.setLoginIp(IpUtils.getIpAddr()); + appUser.setLcUserid(lcUserid); //获取身份证,再获取年龄 String personCardNo = null; @@ -511,11 +515,12 @@ public class SsoService { */ private SysUser saveSysUser(JSONObject userJson, Long appUserId, String isCompanyUser, String appId, String appSecret) { JSONObject info = userJson.containsKey("info") ? userJson.getJSONObject("info") : null; - System.out.println("sysuserId==========" + userJson.getLong("userId")); + Long lcUserid=userJson.getLong("userId"); + System.out.println("sysuserId==========" + lcUserid); System.out.println("userJson==========" + JSONObject.toJSONString(userJson)); SysUser sysUser = new SysUser(); sysUser.setAppUserId(appUserId); - sysUser.setUserId(userJson.getLong("userId")); + sysUser.setUserId(lcUserid); sysUser.setUserName(userJson.getString("userName")); sysUser.setNickName(userJson.getString("nickName")); sysUser.setEmail(userJson.getString("email")); @@ -528,6 +533,7 @@ public class SsoService { sysUser.setLoginDate(new Date()); sysUser.setCreateBy("system"); sysUser.setLoginIp(IpUtils.getIpAddr()); + sysUser.setLcUserid(lcUserid); //获取身份证 String personCardNo=""; diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index e6b969b..0399b1d 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -25,6 +25,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -51,7 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, - r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status,u.id_card,u.app_user_id + r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status,u.id_card,u.app_user_id,u.lc_userid from sys_user u left join sys_dept d on u.dept_id = d.dept_id left join sys_user_role ur on u.user_id = ur.user_id @@ -172,6 +173,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" remark, id_card, app_user_id, + lc_userid, create_time )values( #{userId}, @@ -188,6 +190,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{remark}, #{idCard}, #{appUserId}, + #{lcUserid}, sysdate() ) @@ -209,6 +212,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update_by = #{updateBy}, remark = #{remark}, id_card = #{idCard}, + lc_userid = #{lcUserid}, update_time = sysdate() where user_id = #{userId} From 13c086db01b4e6efccdd0232929b22081bc1df9a Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Fri, 10 Jul 2026 10:56:29 +0800 Subject: [PATCH 41/61] =?UTF-8?q?1.=E6=B7=BB=E5=8A=A0=E4=BA=92=E8=81=94?= =?UTF-8?q?=E7=BD=91=E7=AB=AF=E6=9F=A5=E8=AF=A2=E6=88=91=E7=9A=84=E6=8A=95?= =?UTF-8?q?=E8=AF=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cms/CmsUserJobComplaintController.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserJobComplaintController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserJobComplaintController.java index 43fd0c5..e0bd5e5 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserJobComplaintController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserJobComplaintController.java @@ -7,11 +7,14 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.SecurityUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; import java.util.List; @RestController @@ -34,6 +37,22 @@ public class CmsUserJobComplaintController extends BaseController { return getDataTable(list); } + /** + * 投诉列表分页self + */ + @ApiOperation("投诉列表分页self") + @PreAuthorize("@ss.hasPermi('cms:jobComplaint:listSelf')") + @GetMapping("/listSelf") + public TableDataInfo listSelf(AppUserJobComplaint appUserJobComplaint) { + if(!SecurityUtils.isLogin()){ + return getDataTable(new ArrayList<>()); + } + appUserJobComplaint.setUserId(SecurityUtils.getAppuserId()); + startPage(); + List list = appUserJobComplaintService.selectAppUserJobComplaintList(appUserJobComplaint); + return getDataTable(list); + } + /** * 详情 */ From f6a957b1afb295b37d19687543dd0154eeb10c35 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Fri, 10 Jul 2026 11:27:18 +0800 Subject: [PATCH 42/61] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=9B=91=E7=AE=A1?= =?UTF-8?q?=E7=AB=AF=E5=AD=98token=E6=A0=87=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java | 4 ++-- .../main/java/com/ruoyi/common/constant/CacheConstants.java | 5 +++++ .../java/com/ruoyi/framework/web/service/SsoService.java | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java index 6539239..a86411d 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java @@ -680,7 +680,7 @@ public class AppUserServiceImpl extends ServiceImpl imple @Override public void resetLcPsw(AppUser appUser) { - String lcUserToken=redisCache.getCacheObject(CacheConstants.LC_HLW_TOKEN+appUser.getLcUserid()); + String lcUserToken=redisCache.getCacheObject(CacheConstants.LC_JGD_TOKEN+appUser.getLcUserid()); if(StringUtils.isBlank(lcUserToken)){ throw new RuntimeException("token已失效"); } @@ -696,7 +696,7 @@ public class AppUserServiceImpl extends ServiceImpl imple @Override public void changeLcCompanyStatus(AppUser appUser) { - String lcUserToken=redisCache.getCacheObject(CacheConstants.LC_HLW_TOKEN+appUser.getLcUserid()); + String lcUserToken=redisCache.getCacheObject(CacheConstants.LC_JGD_TOKEN+appUser.getLcUserid()); if(StringUtils.isBlank(lcUserToken)){ throw new RuntimeException("token已失效"); } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java index d10ebb9..f41134f 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java @@ -54,4 +54,9 @@ public class CacheConstants * 浪潮互联网token */ public static final String LC_HLW_TOKEN ="lc_hlw_token:"; + + /** + * 浪潮监管端token + */ + public static final String LC_JGD_TOKEN ="lc_jgd_token:"; } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java index e4b93ab..9d2bd8b 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java @@ -361,7 +361,7 @@ public class SsoService { //用户存在,生成本系统用户的token String token = loginSysUser(sysUser, userJson.getString("userName")); - redisCache.setCacheObject(CacheConstants.LC_HLW_TOKEN+lcUserid,lcToken, 6, TimeUnit.HOURS); + redisCache.setCacheObject(CacheConstants.LC_JGD_TOKEN+lcUserid,lcToken, 6, TimeUnit.HOURS); JSONObject backJson = new JSONObject(); backJson.put("token", token); backJson.put("lcToken", lcToken); From f638e552058a19d951606b7873f0b288eded1b34 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Fri, 10 Jul 2026 11:47:41 +0800 Subject: [PATCH 43/61] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=8A=95=E8=AF=89=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/mapper/app/AppUserJobComplaintMapper.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserJobComplaintMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserJobComplaintMapper.xml index fdca818..58664c6 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserJobComplaintMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserJobComplaintMapper.xml @@ -48,10 +48,10 @@ t.del_flag = '0' - and t.and user_id = #{userId} + and t.user_id = #{userId} - and t.and job_id = #{jobId} + and t.job_id = #{jobId} and t.complaint_type = #{complaintType} From c7714083df17c57c4399f49a7a068d6568b28676 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Fri, 10 Jul 2026 13:36:51 +0800 Subject: [PATCH 44/61] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/cms/controller/cms/CmsUserJobComplaintController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserJobComplaintController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserJobComplaintController.java index e0bd5e5..8507ac6 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserJobComplaintController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsUserJobComplaintController.java @@ -19,7 +19,7 @@ import java.util.List; @RestController @RequestMapping("/cms/jobComplaint") -@Api(tags = "后台:用户投诉企业") +@Api(tags = "后台:用户投诉岗位") public class CmsUserJobComplaintController extends BaseController { @Autowired From 1027530803e0d0e5ce7bb4abae392750d478deb7 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Fri, 10 Jul 2026 16:57:55 +0800 Subject: [PATCH 45/61] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=91=98=E4=B8=8B=E6=9E=B6=E4=BC=81=E4=B8=9A=E5=92=8C=E5=B2=97?= =?UTF-8?q?=E4=BD=8D=E4=BF=A1=E6=81=AF=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cms/controller/cms/CmsAppUserController.java | 2 +- .../com/ruoyi/cms/domain/AppUserJobComplaint.java | 4 ++++ .../mapper/app/AppUserJobComplaintMapper.xml | 15 ++++++++++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserController.java index 8ab995a..b3b0b21 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserController.java @@ -333,6 +333,6 @@ public class CmsAppUserController extends BaseController } appUser.setLcUserid(SecurityUtils.getlcUserid()); appUserService.changeLcCompanyStatus(appUser); - return success("密码重置成功"); + return success("操作成功!"); } } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserJobComplaint.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserJobComplaint.java index cf45e00..5317027 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserJobComplaint.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserJobComplaint.java @@ -74,4 +74,8 @@ public class AppUserJobComplaint extends BaseEntity { private String jobTitle; @TableField(exist = false) private String name; + @TableField(exist = false) + private String jobStatus; + @TableField(exist = false) + private String companyStatus; } \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserJobComplaintMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserJobComplaintMapper.xml index 58664c6..ad8ac5b 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserJobComplaintMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserJobComplaintMapper.xml @@ -25,6 +25,8 @@ + + @@ -37,9 +39,11 @@ select t.id, t.user_id, t.job_id, t.complaint_type, t.complaint_content, t.evidence_url, t.contact_phone, t.complaint_status, t.handle_user_id, t.handle_content, t.handle_time, t.del_flag, - t.create_by, t.create_time, t.update_by, t.update_time, t.remark,j.job_title,j.company_name,j.company_id,u.name + t.create_by, t.create_time, t.update_by, t.update_time, t.remark,j.job_title,j.company_name, + j.company_id,j.job_status,u.name,ca.company_status from app_user_job_complaint t LEFT JOIN job j ON t.job_id = j.job_id + LEFT JOIN company ca ON ca.company_id = j.company_id LEFT JOIN app_user u ON t.user_id = u.user_id @@ -62,6 +66,15 @@ and t.handle_user_id = #{handleUserId} + + and ca.name like '%' || #{companyName} || '%' + + + and j.job_title like '%' || #{jobTitle} || '%' + + + and u.name like '%' || #{name} || '%' + order by t.create_time desc From 5a66aa5d53f3c69e75701084a51a2f42cd0ce642 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Fri, 10 Jul 2026 17:53:48 +0800 Subject: [PATCH 46/61] =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E7=AB=AF=E6=88=91?= =?UTF-8?q?=E7=9A=84=E7=95=8C=E9=9D=A2=EF=BC=8C=E6=B7=BB=E5=8A=A0=E6=8A=95?= =?UTF-8?q?=E8=AF=89=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/cms/service/impl/JobApplyServiceImpl.java | 10 +++++++++- .../src/main/resources/mapper/app/AppUserMapper.xml | 3 ++- .../com/ruoyi/common/core/domain/entity/MyChart.java | 1 + 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobApplyServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobApplyServiceImpl.java index 8e244df..cae3353 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobApplyServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobApplyServiceImpl.java @@ -1,7 +1,9 @@ package com.ruoyi.cms.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.cms.domain.AppUserJobComplaint; import com.ruoyi.cms.domain.FairCollection; import com.ruoyi.cms.domain.Job; import com.ruoyi.cms.domain.JobApply; @@ -15,7 +17,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; @@ -39,6 +40,8 @@ public class JobApplyServiceImpl extends ServiceImpl im private FairCollectionMapper fairCollectionMapper; @Autowired private CompanyCollectionMapper companyCollectionMapper; + @Autowired + private AppUserJobComplaintMapper appUserJobComplaintMapper; /** * 查询岗位申请 @@ -113,11 +116,16 @@ public class JobApplyServiceImpl extends ServiceImpl im Integer collectionCompanyCount = companyCollectionMapper.collectionJob(SiteSecurityUtils.getUserId()).size(); Integer jobReviewCount = appReviewJobMapper.review(SiteSecurityUtils.getUserId(),new MineJobQuery()).size(); Integer fairCollecitonCount = fairCollectionMapper.selectList(Wrappers.lambdaQuery().eq(FairCollection::getUserId, SiteSecurityUtils.getUserId())).size(); + //投诉数量 + Integer plaintCount = Math.toIntExact(appUserJobComplaintMapper.selectCount( + new LambdaQueryWrapper().eq(AppUserJobComplaint::getUserId, SiteSecurityUtils.getUserId()).eq(AppUserJobComplaint::getDelFlag, "0") + )); HashMap map = new HashMap<>(); map.put("applyCount", applyCount); map.put("collectionCount", collectionJobCount+collectionCompanyCount); map.put("jobReviewCount", jobReviewCount); map.put("fairCollecitonCount", fairCollecitonCount); + map.put("plaintCount", plaintCount); return map; } diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml index 6d58ac5..48baa46 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml @@ -112,10 +112,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - SELECT t1.yzj,t2.ysc,t3.ytd,t4.yts,0 AS yyy FROM + SELECT t1.yzj,t2.ysc,t3.ytd,t4.yts,t5.ypbqys,0 AS yyy FROM (SELECT COUNT(user_id) AS yzj FROM app_review_job WHERE user_id = #{userId} AND del_flag = '0') t1 CROSS JOIN (SELECT COUNT(user_id) AS ysc FROM job_collection WHERE user_id = #{userId} AND del_flag = '0') t2 CROSS JOIN (SELECT COUNT(user_id) AS ytd FROM job_apply WHERE user_id = #{userId} AND del_flag = '0') t3 CROSS JOIN (SELECT COUNT(user_id) AS yts FROM app_user_job_complaint WHERE user_id = #{userId} AND del_flag = '0') t4 + CROSS JOIN (SELECT COUNT(user_id) AS ypbqys FROM app_user_block_company WHERE user_id = #{userId} AND del_flag = '0') t5 + + WHERE id = #{id} AND del_flag = '0' + + + + + + + + UPDATE hr_agency_consult_msg + SET agency_read = 1, update_by = #{updateBy}, update_time = NOW() + WHERE session_id = #{sessionId} AND del_flag = '0' AND agency_read = '0' + + + + UPDATE hr_agency_consult_msg + SET seeker_read = 1, update_by = #{updateBy}, update_time = NOW() + WHERE session_id = #{sessionId} AND del_flag = '0' AND seeker_read = '0' + + + \ No newline at end of file From 78ecff8435521b52dd3b8e12063476dd74b4fb70 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Sat, 11 Jul 2026 21:04:36 +0800 Subject: [PATCH 52/61] =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E7=AB=AF-=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E4=BA=BA=E5=8A=9B=E8=B5=84=E6=BA=90=E6=9C=BA=E6=9E=84?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cms/controller/app/AppCompanyController.java | 11 +++++++++++ .../src/main/resources/mapper/app/CompanyMapper.xml | 4 +++- .../com/ruoyi/common/core/domain/entity/Company.java | 3 +++ .../com/ruoyi/framework/web/service/SsoService.java | 1 + 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppCompanyController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppCompanyController.java index 7294d95..1bc03b0 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppCompanyController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppCompanyController.java @@ -1,6 +1,7 @@ package com.ruoyi.cms.controller.app; +import com.ruoyi.cms.domain.query.CompanySearch; import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.cms.domain.CompanyCard; import com.ruoyi.cms.domain.query.LabelQuery; @@ -95,6 +96,16 @@ public class AppCompanyController extends BaseController companyCardService.cardCollection(companyCardId); return success(); } + + @GetMapping("/hrsList") + @ApiOperation("查询人力资源机构列表") + public TableDataInfo hrsList(CompanySearch company) + { + company.setIsHrs("0");//查询人力资源机构 + startPage(); + return getDataTable(companyService.selectCompanyList(company)); + } + @BussinessLog(title = "取消收藏企业卡片") @DeleteMapping("/card/collection/{companyCardId}") @ApiOperation("取消收藏公司卡片") diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/CompanyMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/CompanyMapper.xml index 28f4524..2cbfb5b 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/CompanyMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/CompanyMapper.xml @@ -38,11 +38,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + - select company_id, name, location, industry, scale, del_flag, create_by, create_time, update_by, update_time, remark,code,description,nature,total_recruitment,registered_address,contact_person,contact_person_phone,is_abnormal,not_pass_reason,status,case when status='2' then update_time else null end reject_time,is_imp_company,imp_company_type,enterprise_type,legal_person,legal_id_card,legal_phone from company + select company_id, name, location, industry, scale, del_flag, create_by, create_time, update_by, update_time, remark,code,description,nature,total_recruitment,registered_address,contact_person,contact_person_phone,is_abnormal,not_pass_reason,status,case when status='2' then update_time else null end reject_time,is_imp_company,imp_company_type,enterprise_type,legal_person,legal_id_card,legal_phone,is_hrs from company @@ -128,6 +129,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and code = #{code} and status = #{status} and company_id = #{companyId} + and is_hrs = #{isHrs} and create_time >= #{startDate} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Company.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Company.java index d6d0998..1e4df1e 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Company.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Company.java @@ -127,6 +127,9 @@ public class Company extends BaseEntity @ApiModelProperty("是否下架(0上架,1下架)") private String companyStatus; + @ApiModelProperty("是否人力资源机构(0是,否)") + private String isHrs; + /** * 岗位列表 */ diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java index 9d2bd8b..7d48ae5 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java @@ -297,6 +297,7 @@ public class SsoService { company.setRegisteredAddress(object.getString("entRegisteredAddress")); company.setNature(object.getString("entType")); company.setDescription(object.getString("entIntro")); +// company.setIsHrs(object.getString("isServiceProvider").equals("Y")?"0":null);//是否是人力资源机构 // company.setScale(object.getString("entSize")); companyService.insertCompany(company); } From d9613c0b837b64a72dc94f29fecebd2e963a8c6d Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Sat, 11 Jul 2026 21:28:14 +0800 Subject: [PATCH 53/61] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E6=8E=A5=E5=8F=A3=EF=BC=8C=E4=BF=9D=E5=AD=98=E6=B5=AA?= =?UTF-8?q?=E6=BD=AE=E7=9A=84token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ruoyi/framework/web/service/SsoService.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java index 7d48ae5..f38a7fe 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java @@ -177,6 +177,7 @@ public class SsoService { throw new RuntimeException("获取用户信息失败"); } + Long lcUserid=userJson.getLong("userId"); //用身份证号查询用户 用户类型(01:个人,02:企业) // 转换成本地:app角色:0企业,1求职者,2网格员 3内部政府人员 4其他(浪潮用) String isCompanyUser = userJson.getString("userType"); @@ -202,6 +203,8 @@ public class SsoService { saveSysUser(userJson, appUser.getUserId(), isCompanyUser, webAppId, webAppSecret); //用户存在,生成本系统用户的token String token = loginAppUser(appUser, userJson.getString("userName")); + //缓存浪潮互联网token + redisCache.setCacheObject(CacheConstants.LC_HLW_TOKEN+lcUserid,lcToken, 6, TimeUnit.HOURS); JSONObject backJson = new JSONObject(); backJson.put("token", token); backJson.put("lcToken", lcToken); From 45842d94b74dbb969473ed9d2b7280c61e542b7c Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Sat, 11 Jul 2026 22:27:14 +0800 Subject: [PATCH 54/61] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=9B=91=E7=AE=A1?= =?UTF-8?q?=E7=AB=AF=E6=9F=A5=E8=AF=A2=E4=BC=81=E4=B8=9A=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E7=94=A8=E6=9D=A5=E4=BF=AE=E6=94=B9=E5=AF=86?= =?UTF-8?q?=E7=A0=81=E5=92=8C=E4=BF=AE=E6=94=B9=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cms/controller/cms/CompanyController.java | 13 ++++++++++ .../com/ruoyi/cms/mapper/CompanyMapper.java | 2 ++ .../ruoyi/cms/service/ICompanyService.java | 2 ++ .../cms/service/impl/CompanyServiceImpl.java | 5 ++++ .../resources/mapper/app/CompanyMapper.xml | 24 +++++++++++++++++++ .../common/core/domain/entity/Company.java | 6 ++++- 6 files changed, 51 insertions(+), 1 deletion(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CompanyController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CompanyController.java index b0e10ca..d994235 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CompanyController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CompanyController.java @@ -188,4 +188,17 @@ public class CompanyController extends BaseController return toAjax(companyService.companyUp(companyId)); } + + /** + * 管理员查询公司列表 + */ + @ApiOperation("管理员查询公司列表") + @PreAuthorize("@ss.hasPermi('cms:company:adminCompanyList')") + @GetMapping("/adminCompanyList") + public TableDataInfo adminCompanyList(CompanySearch company) + { + startPage(); + List list = companyService.selectAdminCompanyList(company); + return getDataTable(list); + } } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/CompanyMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/CompanyMapper.java index 61e74be..0f46547 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/CompanyMapper.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/CompanyMapper.java @@ -33,4 +33,6 @@ public interface CompanyMapper extends BaseMapper Company selectCompanyByJobId(Long jobId); int updateStatus(Company company); + + List selectAdminCompanyList(Company company); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/ICompanyService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/ICompanyService.java index 48257b3..b32a01c 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/ICompanyService.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/ICompanyService.java @@ -85,4 +85,6 @@ public interface ICompanyService int companyDown(Long companyId); int companyUp(Long companyId); + + List selectAdminCompanyList(Company company); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyServiceImpl.java index a7ca8f2..4dbaf88 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyServiceImpl.java @@ -387,4 +387,9 @@ public class CompanyServiceImpl extends ServiceImpl impl } return i; } + + @Override + public List selectAdminCompanyList(Company company) { + return companyMapper.selectAdminCompanyList(company); + } } diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/CompanyMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/CompanyMapper.xml index 2cbfb5b..5d1f809 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/CompanyMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/CompanyMapper.xml @@ -39,6 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -173,4 +174,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update COMPANY set company_status=#{companyStatus},update_time=#{updateTime},update_by=#{updateBy} where company_id=#{companyId} and del_flag='0' + + diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Company.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Company.java index 1e4df1e..a0fe470 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Company.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Company.java @@ -136,5 +136,9 @@ public class Company extends BaseEntity @TableField(exist = false) private List jobList; - + /** + * 浪潮userid + */ + @TableField(exist = false) + private Long lcUserid; } From cb38c9abd9b7a6081cf3ce9b714d3d2602d00fb4 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Sun, 12 Jul 2026 13:13:07 +0800 Subject: [PATCH 55/61] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E6=94=B6=E8=97=8F=E6=B1=82=E8=81=8C=E8=80=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cms/HrCompanyTalentCollectController.java | 118 ++++++++++++++++++ .../cms/domain/msg/HrAgencyConsultMsg.java | 2 + .../domain/msg/HrCompanyTalentCollect.java | 53 ++++++++ .../domain/msg/HrCompanyTalentCollectDTO.java | 52 ++++++++ .../msg/HrCompanyTalentCollectMapper.java | 23 ++++ .../msg/IHCompanyTalentCollectService.java | 39 ++++++ .../HrCompanyTalentCollectServiceImpl.java | 91 ++++++++++++++ .../resources/mapper/app/CompanyMapper.xml | 2 +- .../msg/HrCompanyTalentCollectMapper.xml | 104 +++++++++++++++ .../com/ruoyi/common/utils/SecurityUtils.java | 15 +++ 10 files changed, 498 insertions(+), 1 deletion(-) create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/HrCompanyTalentCollectController.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/msg/HrCompanyTalentCollect.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/msg/HrCompanyTalentCollectDTO.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/msg/HrCompanyTalentCollectMapper.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/msg/IHCompanyTalentCollectService.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/msg/impl/HrCompanyTalentCollectServiceImpl.java create mode 100644 ruoyi-bussiness/src/main/resources/mapper/msg/HrCompanyTalentCollectMapper.xml diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/HrCompanyTalentCollectController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/HrCompanyTalentCollectController.java new file mode 100644 index 0000000..abe565a --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/HrCompanyTalentCollectController.java @@ -0,0 +1,118 @@ +package com.ruoyi.cms.controller.cms; + +import com.ruoyi.cms.domain.msg.HrCompanyTalentCollect; +import com.ruoyi.cms.domain.msg.HrCompanyTalentCollectDTO; +import com.ruoyi.cms.service.ICompanyService; +import com.ruoyi.cms.service.msg.IHCompanyTalentCollectService; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.Company; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +/** + * 企业人才库收藏管理 + */ +@RestController +@RequestMapping("/cms/hrTalentCollect") +public class HrCompanyTalentCollectController extends BaseController +{ + @Autowired + private IHCompanyTalentCollectService hrCompanyTalentCollectService; + @Autowired + private ICompanyService companyService; + + /** + * 人才库收藏列表分页 + */ + @PreAuthorize("@ss.hasPermi('cms:hrTalentCollect:list')") + @GetMapping("/list") + public TableDataInfo list(HrCompanyTalentCollectDTO hrCompanyTalentCollect) + { + //未登录 + if(!SecurityUtils.isLogin()){ + return getDataTable(new ArrayList<>()); + } + //未绑定 + Company company=companyService.queryCodeCompany(SecurityUtils.getIdcard()); + if(company==null){ + return getDataTable(new ArrayList<>()); + } + startPage(); + hrCompanyTalentCollect.setCompanyId(company.getCompanyId()); + List list=hrCompanyTalentCollectService.selectHrCompanyTalentCollectList(hrCompanyTalentCollect); + return getDataTable(list); + } + + /** + * 获取单条详情 + */ + @PreAuthorize("@ss.hasPermi('cms:hrTalentCollect:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable Long id) + { + return AjaxResult.success(hrCompanyTalentCollectService.selectHrCompanyTalentCollectById(id)); + } + + /** + * 收藏求职者(加入人才库) + */ + @PreAuthorize("@ss.hasPermi('cms:hrTalentCollect:add')") + @Log(title = "收藏人才", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody HrCompanyTalentCollect hrCompanyTalentCollect) + { + if(!SecurityUtils.isLogin()){ + return error("未登录!"); + } + Company company=companyService.queryCodeCompany(SecurityUtils.getIdcard()); + if(company==null){ + return error("未查询到当前企业信息!"); + } + hrCompanyTalentCollect.setCompanyId(company.getCompanyId()); + int res = hrCompanyTalentCollectService.insertHrCompanyTalentCollect(hrCompanyTalentCollect); + if (res == 2) + { + return AjaxResult.error("该求职者已加入人才库,请勿重复收藏"); + } + return AjaxResult.success(); + } + + /** + * 修改收藏信息(意向等级、标签、备注等) + */ + @PreAuthorize("@ss.hasPermi('cms:hrTalentCollect:edit')") + @Log(title = "编辑人才收藏", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody HrCompanyTalentCollect hrCompanyTalentCollect) + { + if(!SecurityUtils.isLogin()){ + return error("未登录!"); + } + Company company=companyService.queryCodeCompany(SecurityUtils.getIdcard()); + if(company==null){ + return error("未查询到当前企业信息!"); + } + hrCompanyTalentCollect.setCompanyId(company.getCompanyId()); + return toAjax(hrCompanyTalentCollectService.updateHrCompanyTalentCollect(hrCompanyTalentCollect)); + } + + /** + * 移出人才库(逻辑删除) + */ + @PreAuthorize("@ss.hasPermi('cms:hrTalentCollect:remove')") + @Log(title = "移出人才库", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(hrCompanyTalentCollectService.deleteHrCompanyTalentCollectByIds(ids)); + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/msg/HrAgencyConsultMsg.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/msg/HrAgencyConsultMsg.java index 9317937..a5584f9 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/msg/HrAgencyConsultMsg.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/msg/HrAgencyConsultMsg.java @@ -3,6 +3,7 @@ package com.ruoyi.cms.domain.msg; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.core.domain.BaseEntity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -16,6 +17,7 @@ import lombok.Data; */ @Data @ApiModel("人力中介咨询消息实体") +@TableName(value = "hr_agency_consult_msg") public class HrAgencyConsultMsg extends BaseEntity { @TableField(exist = false) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/msg/HrCompanyTalentCollect.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/msg/HrCompanyTalentCollect.java new file mode 100644 index 0000000..f850539 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/msg/HrCompanyTalentCollect.java @@ -0,0 +1,53 @@ +package com.ruoyi.cms.domain.msg; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 企业人才库收藏记录表 hr_company_talent_collect + */ +@Data +@ApiModel("企业人才库收藏记录表") +@TableName(value = "hr_company_talent_collect") +public class HrCompanyTalentCollect extends BaseEntity +{ + @TableField(exist = false) + private static final long serialVersionUID = 1L; + + /** 主键ID */ + @TableId(type = IdType.AUTO) + @ApiModelProperty("主键ID") + private Long id; + + /** 企业后台用户ID */ + @ApiModelProperty("企业后台用户ID") + private Long companyId; + + /** 求职者简历ID */ + @ApiModelProperty("用户ID") + private Long userId; + + /** 意向等级 1高 2中 3低 */ + @ApiModelProperty("意向等级 1=高意向,2=中等意向,3=低意向") + private String intentionLevel; + + /** 意向岗位ID 逗号分隔 */ + @Excel(name = "意向岗位ID") + @ApiModelProperty("意向岗位ID") + private String intendJobIds; + + /** 自定义标签 逗号分隔 */ + @ApiModelProperty("人才标签") + private String collectTags; + + /** 收藏来源 1简历搜索 2投递 3面试邀约 4手动新增 */ + @ApiModelProperty("收藏来源 1=简历搜索,2=投递记录,3=邀约面试,4=手动录入") + private String sourceType; +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/msg/HrCompanyTalentCollectDTO.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/msg/HrCompanyTalentCollectDTO.java new file mode 100644 index 0000000..6ef9fc1 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/msg/HrCompanyTalentCollectDTO.java @@ -0,0 +1,52 @@ +package com.ruoyi.cms.domain.msg; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.domain.entity.AppUser; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 企业人才库收藏记录表 hr_company_talent_collect + */ +@Data +public class HrCompanyTalentCollectDTO extends AppUser +{ + @TableField(exist = false) + private static final long serialVersionUID = 1L; + + /** 主键ID */ + @TableId(type = IdType.AUTO) + @ApiModelProperty("主键ID") + private Long id; + + /** 企业后台用户ID */ + @ApiModelProperty("企业后台用户ID") + private Long companyId; + + /** 求职者简历ID */ + @ApiModelProperty("用户ID") + private Long userId; + + /** 意向等级 1高 2中 3低 */ + @ApiModelProperty("意向等级 1=高意向,2=中等意向,3=低意向") + private String intentionLevel; + + /** 意向岗位ID 逗号分隔 */ + @Excel(name = "意向岗位ID") + @ApiModelProperty("意向岗位ID") + private String intendJobIds; + + /** 自定义标签 逗号分隔 */ + @ApiModelProperty("人才标签") + private String collectTags; + + /** 收藏来源 1简历搜索 2投递 3面试邀约 4手动新增 */ + @ApiModelProperty("收藏来源 1=简历搜索,2=投递记录,3=邀约面试,4=手动录入") + private String sourceType; +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/msg/HrCompanyTalentCollectMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/msg/HrCompanyTalentCollectMapper.java new file mode 100644 index 0000000..e33eefc --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/msg/HrCompanyTalentCollectMapper.java @@ -0,0 +1,23 @@ +package com.ruoyi.cms.mapper.msg; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.cms.domain.msg.HrCompanyTalentCollect; +import com.ruoyi.cms.domain.msg.HrCompanyTalentCollectDTO; +import org.apache.ibatis.annotations.Param; +import java.util.List; + +/** + * 企业人才收藏Mapper + */ +public interface HrCompanyTalentCollectMapper extends BaseMapper +{ + /** + * 查询收藏列表(企业人才库分页) + */ + List selectHrCompanyTalentCollectList(HrCompanyTalentCollectDTO hrCompanyTalentCollect); + + /** + * 查询企业是否已收藏该简历(防重复) + */ + HrCompanyTalentCollect selectExistCollect(@Param("companyId") Long companyUserId, @Param("userId") Long userId); +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/msg/IHCompanyTalentCollectService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/msg/IHCompanyTalentCollectService.java new file mode 100644 index 0000000..854d020 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/msg/IHCompanyTalentCollectService.java @@ -0,0 +1,39 @@ +package com.ruoyi.cms.service.msg; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.cms.domain.msg.HrCompanyTalentCollect; +import com.ruoyi.cms.domain.msg.HrCompanyTalentCollectDTO; + +import java.util.List; + +/** + * 企业人才收藏Service接口 + */ +public interface IHCompanyTalentCollectService extends IService +{ + /** + * 查询人才收藏列表(分页) + */ + List selectHrCompanyTalentCollectList(HrCompanyTalentCollectDTO hrCompanyTalentCollect); + + /** + * 根据ID获取详情 + */ + HrCompanyTalentCollectDTO selectHrCompanyTalentCollectById(Long id); + + /** + * 新增收藏(收藏求职者进人才库,校验重复) + * @return 0成功 1已收藏 + */ + int insertHrCompanyTalentCollect(HrCompanyTalentCollect hrCompanyTalentCollect); + + /** + * 修改收藏信息 + */ + int updateHrCompanyTalentCollect(HrCompanyTalentCollect hrCompanyTalentCollect); + + /** + * 批量移出人才库 + */ + int deleteHrCompanyTalentCollectByIds(Long[] ids); +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/msg/impl/HrCompanyTalentCollectServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/msg/impl/HrCompanyTalentCollectServiceImpl.java new file mode 100644 index 0000000..24f37ef --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/msg/impl/HrCompanyTalentCollectServiceImpl.java @@ -0,0 +1,91 @@ +package com.ruoyi.cms.service.msg.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.cms.domain.msg.HrCompanyTalentCollect; +import com.ruoyi.cms.domain.msg.HrCompanyTalentCollectDTO; +import com.ruoyi.cms.mapper.AppSkillMapper; +import com.ruoyi.cms.mapper.AppUserMapper; +import com.ruoyi.cms.mapper.UserWorkExperiencesMapper; +import com.ruoyi.cms.mapper.msg.HrCompanyTalentCollectMapper; +import com.ruoyi.cms.service.msg.IHCompanyTalentCollectService; +import com.ruoyi.common.core.domain.entity.AppSkill; +import com.ruoyi.common.core.domain.entity.AppUser; +import com.ruoyi.common.core.domain.entity.UserWorkExperiences; +import com.ruoyi.common.utils.bean.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.Arrays; +import java.util.List; + +/** + * 企业人才收藏Service实现 + */ +@Service +public class HrCompanyTalentCollectServiceImpl extends ServiceImpl implements IHCompanyTalentCollectService +{ + @Autowired + private HrCompanyTalentCollectMapper hrCompanyTalentCollectMapper; + @Autowired + private AppSkillMapper skillMapper; + @Autowired + private UserWorkExperiencesMapper userWorkExperiencesMapper; + @Autowired + private AppUserMapper appUserMapper; + + @Override + public List selectHrCompanyTalentCollectList(HrCompanyTalentCollectDTO hrCompanyTalentCollect) + { + return hrCompanyTalentCollectMapper.selectHrCompanyTalentCollectList(hrCompanyTalentCollect); + } + + @Override + public HrCompanyTalentCollectDTO selectHrCompanyTalentCollectById(Long id) + { + HrCompanyTalentCollect talentCollect=hrCompanyTalentCollectMapper.selectById(id); + if(talentCollect==null){ + return null; + } + HrCompanyTalentCollectDTO dto=new HrCompanyTalentCollectDTO(); + AppUser appUser=appUserMapper.selectById(talentCollect.getUserId()); + BeanUtils.copyProperties(talentCollect, dto); + if(appUser!=null){ + BeanUtils.copyProperties(appUser, dto); + } + if(talentCollect.getUserId()!=null){ + //获取技能信息 + AppSkill appSkill=new AppSkill(); + appSkill.setUserId(talentCollect.getUserId()); + List skills=skillMapper.getList(appSkill); + UserWorkExperiences userWorkExperiences=new UserWorkExperiences(); + userWorkExperiences.setUserId(talentCollect.getUserId()); + List userWorkExperiencesList=userWorkExperiencesMapper.getWorkExperiencesList(userWorkExperiences); + dto.setAppSkillsList(skills); + dto.setExperiencesList(userWorkExperiencesList); + } + return dto; + } + + @Override + public int insertHrCompanyTalentCollect(HrCompanyTalentCollect collect) + { + // 校验是否已收藏 + HrCompanyTalentCollect exist = hrCompanyTalentCollectMapper.selectExistCollect(collect.getCompanyId(), collect.getUserId()); + if (exist != null) + { + return 2; + } + return hrCompanyTalentCollectMapper.insert(collect); + } + + @Override + public int updateHrCompanyTalentCollect(HrCompanyTalentCollect collect) + { + return hrCompanyTalentCollectMapper.updateById(collect); + } + + @Override + public int deleteHrCompanyTalentCollectByIds(Long[] ids) + { + return hrCompanyTalentCollectMapper.deleteBatchIds(Arrays.asList(ids)); + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/CompanyMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/CompanyMapper.xml index 5d1f809..249d7a4 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/CompanyMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/CompanyMapper.xml @@ -180,7 +180,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" then t.update_time else null end reject_time,t.is_imp_company,t.imp_company_type,t.enterprise_type,t.legal_person,t.legal_id_card,t.legal_phone,t.is_hrs, su.lc_userid from company t left join sys_user su on t.code=su.id_card - t.del_flag = '0' + t.del_flag = '0' and su.lc_userid is not null and t.name like concat('%', cast(#{name, jdbcType=VARCHAR} as varchar), '%') and t.scale = #{scale} and t.nature = #{nature} diff --git a/ruoyi-bussiness/src/main/resources/mapper/msg/HrCompanyTalentCollectMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/msg/HrCompanyTalentCollectMapper.xml new file mode 100644 index 0000000..e5f378b --- /dev/null +++ b/ruoyi-bussiness/src/main/resources/mapper/msg/HrCompanyTalentCollectMapper.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, company_id, user_id, intention_level, intend_job_ids, collect_tags, remark, + source_type, del_flag, create_by, create_time, update_by, update_time + from hr_company_talent_collect + + + + select htc.id, htc.company_id, htc.user_id, htc.intention_level, htc.intend_job_ids, htc.collect_tags, htc.remark, + htc.source_type, htc.del_flag, htc.create_by, htc.create_time, htc.update_by, htc.update_time, + au.name, au.age, au.sex, au.birth_date, au.education, au.political_affiliation, au.phone, au.avatar, au.salary_min, + au.salary_max, au.area, au.status, au.login_ip, au.login_date,au.job_title_id,au.is_recommend,au.id_card,au.work_experience, + au.is_company_user,au.lc_userid,au.email + from hr_company_talent_collect htc + left join app_user au on htc.user_id=au.user_id + + + + + + + \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java index 64a39a7..e0843ff 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java @@ -218,4 +218,19 @@ public class SecurityUtils throw new ServiceException("获取用户ID异常", HttpStatus.UNAUTHORIZED); } } + + /** + * 获取企业社会信用代码 + * @return + */ + public static String getIdcard(){ + try + { + return getLoginUser().getUser().getIdCard(); + } + catch (Exception e) + { + throw new ServiceException("获取用户ID异常", HttpStatus.UNAUTHORIZED); + } + } } From 75368125f7f33684b390a56b92209dcbf6c49838 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Mon, 13 Jul 2026 16:16:01 +0800 Subject: [PATCH 56/61] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=95=99=E8=82=B2?= =?UTF-8?q?=E7=BB=8F=E5=8E=86=E5=92=8C=E5=9F=B9=E8=AE=AD=E7=BB=8F=E5=8E=86?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/AppUserEducationController.java | 74 ++++++++++++++++ .../app/AppUserTrainController.java | 73 +++++++++++++++ .../cms/CmsAppUserEducationController.java | 88 +++++++++++++++++++ .../cms/CmsAppUserTrainController.java | 88 +++++++++++++++++++ .../ruoyi/cms/domain/AppUserEducation.java | 72 +++++++++++++++ .../com/ruoyi/cms/domain/AppUserTrain.java | 66 ++++++++++++++ .../cms/mapper/AppUserEducationMapper.java | 21 +++++ .../ruoyi/cms/mapper/AppUserTrainMapper.java | 22 +++++ .../cms/service/IAppUserEducationService.java | 38 ++++++++ .../cms/service/IAppUserTrainService.java | 38 ++++++++ .../impl/AppUserEducationServiceImpl.java | 54 ++++++++++++ .../service/impl/AppUserTrainServiceImpl.java | 54 ++++++++++++ .../mapper/app/AppUserEducationMapper.xml | 54 ++++++++++++ .../mapper/app/AppUserTrainMapper.xml | 51 +++++++++++ 14 files changed, 793 insertions(+) create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserEducationController.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserTrainController.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserEducationController.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserTrainController.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserEducation.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserTrain.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserEducationMapper.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserTrainMapper.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserEducationService.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserTrainService.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserEducationServiceImpl.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserTrainServiceImpl.java create mode 100644 ruoyi-bussiness/src/main/resources/mapper/app/AppUserEducationMapper.xml create mode 100644 ruoyi-bussiness/src/main/resources/mapper/app/AppUserTrainMapper.xml diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserEducationController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserEducationController.java new file mode 100644 index 0000000..5a0e302 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserEducationController.java @@ -0,0 +1,74 @@ +package com.ruoyi.cms.controller.app; + +import com.ruoyi.cms.domain.AppUserEducation; +import com.ruoyi.cms.service.IAppUserEducationService; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.SiteSecurityUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@RestController +@RequestMapping("/app/appUserEducation") +@Api(tags = "移动端:APP用户教育经历") +public class AppUserEducationController extends BaseController +{ + @Resource + private IAppUserEducationService appUserEducationService; + + /** + * APP端:根据用户ID查询全部学历经历 + */ + @ApiOperation("用户学历经历-根据用户ID查询全部学历经历") + @GetMapping("/getByUserId") + public AjaxResult getByUserId() + { + List dataList = appUserEducationService.selectEducationByUserId(SiteSecurityUtils.getUserId()); + return AjaxResult.success(dataList); + } + + /** + * 单条详情 + */ + @ApiOperation("用户学历经历-单条详情") + @GetMapping("/{id}") + public AjaxResult getInfo(@PathVariable Long id) + { + return AjaxResult.success(appUserEducationService.selectAppUserEducationById(id)); + } + + /** + * 新增学历 + */ + @ApiOperation("用户学历经历-新增学历") + @PostMapping + public AjaxResult add(@RequestBody AppUserEducation appUserEducation) + { + appUserEducation.setUserId(SiteSecurityUtils.getUserId()); + return toAjax(appUserEducationService.insertAppUserEducation(appUserEducation)); + } + + /** + * 修改学历 + */ + @ApiOperation("用户学历经历-修改学历") + @PutMapping + public AjaxResult edit(@RequestBody AppUserEducation appUserEducation) + { + return toAjax(appUserEducationService.updateAppUserEducation(appUserEducation)); + } + + /** + * 批量移出(逻辑删除) + */ + @ApiOperation("用户学历经历-批量移出") + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(appUserEducationService.deleteAppUserEducationByIds(ids)); + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserTrainController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserTrainController.java new file mode 100644 index 0000000..022027b --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserTrainController.java @@ -0,0 +1,73 @@ +package com.ruoyi.cms.controller.app; + +import com.ruoyi.cms.domain.AppUserTrain; +import com.ruoyi.cms.service.IAppUserTrainService; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.SiteSecurityUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@RestController +@RequestMapping("/app/appUserTrain") +@Api(tags = "移动端:APP用户培训经历") +public class AppUserTrainController extends BaseController +{ + @Resource + private IAppUserTrainService appUserTrainService; + + /** + * 根据用户ID查询全部培训经历(APP简历使用) + */ + @ApiOperation("用户培训经历-根据用户ID查询全部培训经历") + @GetMapping("/getByUserId") + public AjaxResult getByUserId() + { + List list = appUserTrainService.selectTrainByUserId(SiteSecurityUtils.getUserId()); + return AjaxResult.success(list); + } + + /** + * 单条详情 + */ + @ApiOperation("用户培训经历-单条详情") + @GetMapping("/{id}") + public AjaxResult getInfo(@PathVariable Long id) + { + return AjaxResult.success(appUserTrainService.selectAppUserTrainById(id)); + } + + /** + * 新增 + */ + @ApiOperation("用户培训经历-新增") + @PostMapping + public AjaxResult add(@RequestBody AppUserTrain appUserTrain) + { + return toAjax(appUserTrainService.insertAppUserTrain(appUserTrain)); + } + + /** + * 修改 + */ + @ApiOperation("用户培训经历-修改") + @PutMapping + public AjaxResult edit(@RequestBody AppUserTrain appUserTrain) + { + return toAjax(appUserTrainService.updateAppUserTrain(appUserTrain)); + } + + /** + * 删除 + */ + @ApiOperation("用户培训经历-删除") + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(appUserTrainService.deleteAppUserTrainByIds(ids)); + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserEducationController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserEducationController.java new file mode 100644 index 0000000..aab07c4 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserEducationController.java @@ -0,0 +1,88 @@ +package com.ruoyi.cms.controller.cms; + +import com.ruoyi.cms.domain.AppUserEducation; +import com.ruoyi.cms.service.IAppUserEducationService; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import io.swagger.annotations.Api; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import java.util.List; + +@RestController +@RequestMapping("/cms/appUserEducation") +@Api(tags = "后台:APP用户教育经历") +public class CmsAppUserEducationController extends BaseController +{ + @Resource + private IAppUserEducationService appUserEducationService; + + /** + * 后台分页列表 + */ + @PreAuthorize("@ss.hasPermi('cms:appUserEducation:list')") + @GetMapping("/list") + public TableDataInfo list(AppUserEducation appUserEducation) + { + startPage(); + List list=appUserEducationService.selectAppUserEducationList(appUserEducation); + return getDataTable(list); + } + + /** + * APP端:根据用户ID查询全部学历经历 + */ + @GetMapping("/getByUserId/{userId}") + public AjaxResult getByUserId(@PathVariable Long userId) + { + List dataList = appUserEducationService.selectEducationByUserId(userId); + return AjaxResult.success(dataList); + } + + /** + * 单条详情 + */ + @PreAuthorize("@ss.hasPermi('cms:appUserEducation:query')") + @GetMapping("/{id}") + public AjaxResult getInfo(@PathVariable Long id) + { + return AjaxResult.success(appUserEducationService.selectAppUserEducationById(id)); + } + + /** + * 新增学历 + */ + @PreAuthorize("@ss.hasPermi('cms:appUserEducation:add')") + @Log(title = "用户学历经历", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody AppUserEducation appUserEducation) + { + return toAjax(appUserEducationService.insertAppUserEducation(appUserEducation)); + } + + /** + * 修改学历 + */ + @PreAuthorize("@ss.hasPermi('cms:appUserEducation:edit')") + @Log(title = "用户学历经历", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody AppUserEducation appUserEducation) + { + return toAjax(appUserEducationService.updateAppUserEducation(appUserEducation)); + } + + /** + * 批量移出(逻辑删除) + */ + @PreAuthorize("@ss.hasPermi('cms:appUserEducation:remove')") + @Log(title = "用户学历经历", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(appUserEducationService.deleteAppUserEducationByIds(ids)); + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserTrainController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserTrainController.java new file mode 100644 index 0000000..a5437c6 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserTrainController.java @@ -0,0 +1,88 @@ +package com.ruoyi.cms.controller.cms; + +import com.ruoyi.cms.domain.AppUserTrain; +import com.ruoyi.cms.service.IAppUserTrainService; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import io.swagger.annotations.Api; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import java.util.List; + +@RestController +@RequestMapping("/cms/appUserTrain") +@Api(tags = "后台:APP用户培训经历") +public class CmsAppUserTrainController extends BaseController +{ + @Resource + private IAppUserTrainService appUserTrainService; + + /** + * 分页列表 + */ + @PreAuthorize("@ss.hasPermi('cms:appUserTrain:list')") + @GetMapping("/list") + public TableDataInfo list(AppUserTrain appUserTrain) + { + startPage(); + List list=appUserTrainService.selectAppUserTrainList(appUserTrain); + return getDataTable(list); + } + + /** + * 根据用户ID查询全部培训经历(APP简历使用) + */ + @GetMapping("/getByUserId/{userId}") + public AjaxResult getByUserId(@PathVariable Long userId) + { + List list = appUserTrainService.selectTrainByUserId(userId); + return AjaxResult.success(list); + } + + /** + * 单条详情 + */ + @PreAuthorize("@ss.hasPermi('cms:appUserTrain:query')") + @GetMapping("/{id}") + public AjaxResult getInfo(@PathVariable Long id) + { + return AjaxResult.success(appUserTrainService.selectAppUserTrainById(id)); + } + + /** + * 新增 + */ + @PreAuthorize("@ss.hasPermi('cms:appUserTrain:add')") + @Log(title = "用户培训经历", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody AppUserTrain appUserTrain) + { + return toAjax(appUserTrainService.insertAppUserTrain(appUserTrain)); + } + + /** + * 修改 + */ + @PreAuthorize("@ss.hasPermi('cms:appUserTrain:edit')") + @Log(title = "用户培训经历", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody AppUserTrain appUserTrain) + { + return toAjax(appUserTrainService.updateAppUserTrain(appUserTrain)); + } + + /** + * 删除 + */ + @PreAuthorize("@ss.hasPermi('cms:appUserTrain:remove')") + @Log(title = "用户培训经历", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(appUserTrainService.deleteAppUserTrainByIds(ids)); + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserEducation.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserEducation.java new file mode 100644 index 0000000..032ed8f --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserEducation.java @@ -0,0 +1,72 @@ +package com.ruoyi.cms.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel("APP求职者教育经历表") +@TableName("app_user_education") +public class AppUserEducation extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键ID */ + @TableId(type = IdType.AUTO) + private Long id; + + /** 求职者用户ID */ + @Excel(name = "用户ID") + @ApiModelProperty("用户ID") + private Long userId; + + /** 学校名称 */ + @Excel(name = "学校名称") + @ApiModelProperty("学校名称") + private String schoolName; + + /** 学历 */ + @Excel(name = "学历") + @ApiModelProperty("学历") + private Integer educationLevel; + + /** 专业 */ + @Excel(name = "专业") + @ApiModelProperty("专业") + private String major; + + /** 学位 */ + @Excel(name = "学位 1学士 2硕士 3博士") + @ApiModelProperty("学位") + private String degree; + + /** 学习形式 1全日制 2自考 3函授 4成人 */ + @Excel(name = "学习形式") + @ApiModelProperty("学习形式") + private String studyType; + + /** 入学时间(字符串模糊填写) */ + @Excel(name = "入学时间") + @ApiModelProperty("入学时间") + private String startTime; + + /** 毕业时间 */ + @Excel(name = "毕业时间") + @ApiModelProperty("毕业时间") + private String endTime; + + /** 在校经历描述 在校经历、获奖、主修课程 */ + @Excel(name = "在校经历") + @ApiModelProperty("在校经历") + private String content; + + /** 排序 */ + @Excel(name = "排序") + @ApiModelProperty("排序") + private Integer sort; +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserTrain.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserTrain.java new file mode 100644 index 0000000..21376fb --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserTrain.java @@ -0,0 +1,66 @@ +package com.ruoyi.cms.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +@Data +@ApiModel("APP求职者培训经历表") +@TableName("app_user_train") +public class AppUserTrain extends BaseEntity +{ + @TableField(exist = false) + private static final long serialVersionUID = 1L; + + /** 主键ID */ + @TableId(type = IdType.AUTO) + private Long id; + + /** 求职者用户ID */ + @Excel(name = "求职者用户ID") + @ApiModelProperty("求职者用户ID") + private Long userId; + + /** 培训机构 */ + @Excel(name = "培训机构") + @ApiModelProperty("培训机构") + private String trainOrg; + + /** 培训课程 */ + @Excel(name = "培训课程") + @ApiModelProperty("培训课程") + private String trainCourse; + + /** 培训开始时间(字符串自由填写) */ + @Excel(name = "开始时间") + @ApiModelProperty("开始时间") + private String startTime; + + /** 培训结束时间 */ + @Excel(name = "结束时间") + @ApiModelProperty("结束时间") + private String endTime; + + /** 培训证书 */ + @Excel(name = "培训证书") + @ApiModelProperty("培训证书") + private String trainCert; + + /** 培训内容 */ + @Excel(name = "培训内容") + @ApiModelProperty("培训内容") + private String trainContent; + + /** 排序 */ + @Excel(name = "排序") + @ApiModelProperty("排序") + private Integer sort; +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserEducationMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserEducationMapper.java new file mode 100644 index 0000000..1608884 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserEducationMapper.java @@ -0,0 +1,21 @@ +package com.ruoyi.cms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.cms.domain.AppUserEducation; +import org.apache.ibatis.annotations.Param; +import java.util.List; + +/** + * APP用户学历经历Mapper + */ +public interface AppUserEducationMapper extends BaseMapper +{ + /** + * 分页查询学历列表 + */ + List selectAppUserEducationList(AppUserEducation appUserEducation); + /** + * 根据用户ID查询全部学历(APP简历使用) + */ + List selectEducationListByUserId(@Param("userId") Long userId); +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserTrainMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserTrainMapper.java new file mode 100644 index 0000000..83a2319 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserTrainMapper.java @@ -0,0 +1,22 @@ +package com.ruoyi.cms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.cms.domain.AppUserTrain; +import org.apache.ibatis.annotations.Param; +import java.util.List; + +/** + * APP用户培训经历Mapper + */ +public interface AppUserTrainMapper extends BaseMapper +{ + /** + * 查询培训经历列表 + */ + List selectAppUserTrainList(AppUserTrain appUserTrain); + + /** + * 根据用户ID查询全部培训记录 + */ + List selectTrainListByUserId(@Param("userId") Long userId); +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserEducationService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserEducationService.java new file mode 100644 index 0000000..b25ed44 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserEducationService.java @@ -0,0 +1,38 @@ +package com.ruoyi.cms.service; + +import com.ruoyi.cms.domain.AppUserEducation; + +import java.util.List; + +public interface IAppUserEducationService +{ + /** + * 分页查询学历列表 + */ + List selectAppUserEducationList(AppUserEducation appUserEducation); + + /** + * 根据ID查询单条学历 + */ + AppUserEducation selectAppUserEducationById(Long id); + + /** + * 根据用户ID查询全部学历经历(APP简历接口) + */ + List selectEducationByUserId(Long userId); + + /** + * 新增学历经历 + */ + int insertAppUserEducation(AppUserEducation appUserEducation); + + /** + * 修改学历经历 + */ + int updateAppUserEducation(AppUserEducation appUserEducation); + + /** + * 批量删除学历 + */ + int deleteAppUserEducationByIds(Long[] ids); +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserTrainService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserTrainService.java new file mode 100644 index 0000000..3d1b761 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserTrainService.java @@ -0,0 +1,38 @@ +package com.ruoyi.cms.service; + +import com.ruoyi.cms.domain.AppUserTrain; + +import java.util.List; + +public interface IAppUserTrainService +{ + /** + * 分页查询培训经历列表 + */ + List selectAppUserTrainList(AppUserTrain appUserTrain); + + /** + * 根据id获取详情 + */ + AppUserTrain selectAppUserTrainById(Long id); + + /** + * 根据用户ID查询所有培训记录 + */ + List selectTrainByUserId(Long userId); + + /** + * 新增培训经历 + */ + int insertAppUserTrain(AppUserTrain appUserTrain); + + /** + * 修改培训经历 + */ + int updateAppUserTrain(AppUserTrain appUserTrain); + + /** + * 批量删除 + */ + int deleteAppUserTrainByIds(Long[] ids); +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserEducationServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserEducationServiceImpl.java new file mode 100644 index 0000000..0538e86 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserEducationServiceImpl.java @@ -0,0 +1,54 @@ +package com.ruoyi.cms.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.cms.domain.AppUserEducation; +import com.ruoyi.cms.mapper.AppUserEducationMapper; +import com.ruoyi.cms.service.IAppUserEducationService; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.List; + +@Service +public class AppUserEducationServiceImpl extends ServiceImpl implements IAppUserEducationService +{ + @Resource + private AppUserEducationMapper appUserEducationMapper; + + @Override + public List selectAppUserEducationList(AppUserEducation appUserEducation) + { + List list = appUserEducationMapper.selectAppUserEducationList(appUserEducation); + return list; + } + + @Override + public AppUserEducation selectAppUserEducationById(Long id) + { + return appUserEducationMapper.selectById(id); + } + + @Override + public List selectEducationByUserId(Long userId) + { + return appUserEducationMapper.selectEducationListByUserId(userId); + } + + @Override + public int insertAppUserEducation(AppUserEducation appUserEducation) + { + return appUserEducationMapper.insert(appUserEducation); + } + + @Override + public int updateAppUserEducation(AppUserEducation appUserEducation) + { + return appUserEducationMapper.updateById(appUserEducation); + } + + @Override + public int deleteAppUserEducationByIds(Long[] ids) + { + return appUserEducationMapper.deleteBatchIds(Arrays.asList(ids)); + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserTrainServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserTrainServiceImpl.java new file mode 100644 index 0000000..de3bada --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserTrainServiceImpl.java @@ -0,0 +1,54 @@ +package com.ruoyi.cms.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.cms.domain.AppUserTrain; +import com.ruoyi.cms.mapper.AppUserTrainMapper; +import com.ruoyi.cms.service.IAppUserTrainService; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.List; + +@Service +public class AppUserTrainServiceImpl extends ServiceImpl implements IAppUserTrainService +{ + @Resource + private AppUserTrainMapper appUserTrainMapper; + + @Override + public List selectAppUserTrainList(AppUserTrain appUserTrain) + { + List list = appUserTrainMapper.selectAppUserTrainList(appUserTrain); + return list; + } + + @Override + public AppUserTrain selectAppUserTrainById(Long id) + { + return appUserTrainMapper.selectById(id); + } + + @Override + public List selectTrainByUserId(Long userId) + { + return appUserTrainMapper.selectTrainListByUserId(userId); + } + + @Override + public int insertAppUserTrain(AppUserTrain appUserTrain) + { + return appUserTrainMapper.insert(appUserTrain); + } + + @Override + public int updateAppUserTrain(AppUserTrain appUserTrain) + { + return appUserTrainMapper.updateById(appUserTrain); + } + + @Override + public int deleteAppUserTrainByIds(Long[] ids) + { + return appUserTrainMapper.deleteBatchIds(Arrays.asList(ids)); + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserEducationMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserEducationMapper.xml new file mode 100644 index 0000000..92337af --- /dev/null +++ b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserEducationMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + select id, user_id, school_name, education_level, major, degree, study_type, + start_time, end_time, content, sort, del_flag, create_by, create_time, update_by, update_time + from app_user_education + + + + + + + \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserTrainMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserTrainMapper.xml new file mode 100644 index 0000000..3cb49e8 --- /dev/null +++ b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserTrainMapper.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + select id, user_id, train_org, train_course, start_time, end_time, train_cert, + train_content, sort, del_flag, create_by, create_time, update_by, update_time + from app_user_train + + + + + + + \ No newline at end of file From f6aee05682de9c57bf3c2c83ab4081afe3f2db4a Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Mon, 13 Jul 2026 16:45:25 +0800 Subject: [PATCH 57/61] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B2=97=E4=BD=8D?= =?UTF-8?q?=E6=8E=A8=E8=8D=90=E4=BA=BA=E5=91=98=EF=BC=8C=E5=8F=AA=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=8A=95=E9=80=92=E8=BF=87=E5=BD=93=E5=89=8D=E5=B2=97?= =?UTF-8?q?=E4=BD=8D=E7=9A=84=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml index e372b45..35dc9ec 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml @@ -415,7 +415,7 @@ END AS match_level FROM shz.job p JOIN shz.app_user r ON r.del_flag = '0' - LEFT JOIN shz.job_apply ja ON ja.user_id = r.user_id AND ja.job_id = p.job_id AND ja.del_flag = '0' + inner JOIN shz.job_apply ja ON ja.user_id = r.user_id AND ja.job_id = p.job_id AND ja.del_flag = '0' WHERE r.is_company_user = '1' and p.job_id = #{jobId} ) c ) t From fa4b5db5c566158f5e65692909c1beac9cb04bc3 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Mon, 13 Jul 2026 17:35:41 +0800 Subject: [PATCH 58/61] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E7=AE=80=E5=8E=86=E5=85=AC=E5=BC=80=E3=80=81?= =?UTF-8?q?=E4=BF=9D=E5=AF=86=E7=8A=B6=E6=80=81=EF=BC=8C=E5=B9=B6=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=AF=B9=E5=BA=94=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/cms/CmsAppUserController.java | 26 +++++++++++++++++++ .../java/com/ruoyi/cms/util/StringUtil.java | 6 +++++ .../resources/mapper/app/AppUserMapper.xml | 3 ++- .../common/core/domain/entity/AppUser.java | 3 +++ 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserController.java index b3b0b21..3cd5a32 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserController.java @@ -6,6 +6,7 @@ import java.util.Objects; import javax.servlet.http.HttpServletResponse; import com.ruoyi.cms.domain.AppReviewJob; +import com.ruoyi.cms.domain.ResumeStatusDTO; import com.ruoyi.cms.domain.vo.AppUserLky; import com.ruoyi.cms.service.IAppReviewJobService; import com.ruoyi.cms.util.DateValidateUtil; @@ -335,4 +336,29 @@ public class CmsAppUserController extends BaseController appUserService.changeLcCompanyStatus(appUser); return success("操作成功!"); } + + @ApiOperation("修改简历停用和启用") + @PreAuthorize("@ss.hasPermi('cms:appUser:changeResumeStatus')") + @PostMapping("/changeResumeStatus") + public AjaxResult changeResumeStatus(@RequestBody ResumeStatusDTO dto){ + if(!SecurityUtils.isLogin()){ + return error("未登录!"); + } + String status = dto.getResumeStatus(); + if (!StringUtil.RESUME_STATUS_PUBLIC.equals(status) && !StringUtil.RESUME_STATUS_SECRET.equals(status)) { + return AjaxResult.error("简历状态仅支持:1-公开、2-保密"); + } + AppUser targetUser = appUserService.selectAppUserByUserId(dto.getUserId()); + if (targetUser == null || "1".equals(targetUser.getDelFlag())) { + return AjaxResult.error("目标用户不存在或已删除"); + } + AppUser updateEntity = new AppUser(); + updateEntity.setUserId(dto.getUserId()); + updateEntity.setResumeStatus(status); + appUserService.updateAppUser(updateEntity); + String msg = StringUtil.RESUME_STATUS_PUBLIC.equals(status) + ? "简历已设置成公开!" + : "简历已设置成保密!"; + return success(msg); + } } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/StringUtil.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/StringUtil.java index d5a7e97..82a703d 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/StringUtil.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/StringUtil.java @@ -109,6 +109,12 @@ public class StringUtil { */ private static final Pattern DIGIT_PATTERN = Pattern.compile("\\d+"); + /** + * 简历状态 + */ + public static final String RESUME_STATUS_PUBLIC = "1"; // 公开 + public static final String RESUME_STATUS_SECRET = "2"; // 保密 + /** * 身份证规则 */ diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml index 05b5ac2..20f44d2 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml @@ -33,10 +33,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + - select user_id, name, age, sex, birth_date, education, political_affiliation, phone, avatar, salary_min, salary_max, area, status, del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark,job_title_id,is_recommend,id_card,work_experience,is_company_user,lc_userid,email from app_user + select user_id, name, age, sex, birth_date, education, political_affiliation, phone, avatar, salary_min, salary_max, area, status, del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark,job_title_id,is_recommend,id_card,work_experience,is_company_user,lc_userid,email,resume_status from app_user + + select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, + d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,u.id_card,u.app_user_id,u.lc_userid + from sys_user u left join sys_dept d on u.dept_id = d.dept_id + + + + + + \ No newline at end of file From b782793e25ce56331f8994f2681e94bd423f2c31 Mon Sep 17 00:00:00 2001 From: chenshaohua <635616957@qq.com> Date: Tue, 14 Jul 2026 13:00:57 +0800 Subject: [PATCH 61/61] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E7=BB=8F=E5=8E=86=E5=92=8C=E6=95=99=E8=82=B2=E7=BB=8F=E5=8E=86?= =?UTF-8?q?=E5=AE=9E=E4=BD=93=E7=B1=BB=E4=BD=8D=E7=BD=AE=EF=BC=8C=E6=96=B9?= =?UTF-8?q?=E4=BE=BF=E7=A7=BB=E5=8A=A8=E7=AB=AF=E7=94=A8=E6=88=B7=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E4=BF=AE=E6=94=B9=E8=87=AA=E5=B7=B1=E7=9A=84=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=202.=E4=BF=AE=E6=94=B9es=E6=8C=89=E7=85=A7=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E6=88=96=E8=80=85=E7=B1=BB=E5=9E=8B=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/AppUserEducationController.java | 2 +- .../app/AppUserTrainController.java | 2 +- .../cms/CmsAppUserEducationController.java | 2 +- .../cms/CmsAppUserTrainController.java | 2 +- .../cms/mapper/AppUserEducationMapper.java | 4 +- .../ruoyi/cms/mapper/AppUserTrainMapper.java | 4 +- .../cms/service/IAppUserEducationService.java | 2 +- .../cms/service/IAppUserTrainService.java | 2 +- .../impl/AppUserEducationServiceImpl.java | 2 +- .../cms/service/impl/AppUserServiceImpl.java | 50 +++++++++++++++++++ .../service/impl/AppUserTrainServiceImpl.java | 2 +- .../cms/service/impl/ESJobSearchImpl.java | 44 +++++++++------- .../mapper/app/AppUserEducationMapper.xml | 18 +++++++ .../mapper/app/AppUserTrainMapper.xml | 17 +++++++ .../core/domain/entity}/AppUserEducation.java | 2 +- .../core/domain/entity}/AppUserTrain.java | 4 +- .../core/domain/model/RegisterBody.java | 6 +++ 17 files changed, 134 insertions(+), 31 deletions(-) rename {ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain => ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity}/AppUserEducation.java (97%) rename {ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain => ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity}/AppUserTrain.java (92%) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserEducationController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserEducationController.java index 5a0e302..24c81e5 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserEducationController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserEducationController.java @@ -1,6 +1,6 @@ package com.ruoyi.cms.controller.app; -import com.ruoyi.cms.domain.AppUserEducation; +import com.ruoyi.common.core.domain.entity.AppUserEducation; import com.ruoyi.cms.service.IAppUserEducationService; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserTrainController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserTrainController.java index 022027b..9b88338 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserTrainController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserTrainController.java @@ -1,6 +1,6 @@ package com.ruoyi.cms.controller.app; -import com.ruoyi.cms.domain.AppUserTrain; +import com.ruoyi.common.core.domain.entity.AppUserTrain; import com.ruoyi.cms.service.IAppUserTrainService; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserEducationController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserEducationController.java index aab07c4..0e4cab4 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserEducationController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserEducationController.java @@ -1,6 +1,6 @@ package com.ruoyi.cms.controller.cms; -import com.ruoyi.cms.domain.AppUserEducation; +import com.ruoyi.common.core.domain.entity.AppUserEducation; import com.ruoyi.cms.service.IAppUserEducationService; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserTrainController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserTrainController.java index a5437c6..0fb63ad 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserTrainController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserTrainController.java @@ -1,6 +1,6 @@ package com.ruoyi.cms.controller.cms; -import com.ruoyi.cms.domain.AppUserTrain; +import com.ruoyi.common.core.domain.entity.AppUserTrain; import com.ruoyi.cms.service.IAppUserTrainService; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserEducationMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserEducationMapper.java index 1608884..6da44ff 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserEducationMapper.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserEducationMapper.java @@ -1,7 +1,7 @@ package com.ruoyi.cms.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.ruoyi.cms.domain.AppUserEducation; +import com.ruoyi.common.core.domain.entity.AppUserEducation; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -18,4 +18,6 @@ public interface AppUserEducationMapper extends BaseMapper * 根据用户ID查询全部学历(APP简历使用) */ List selectEducationListByUserId(@Param("userId") Long userId); + + void batchInsert(@Param("appUserEducations") List appUserEducations); } \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserTrainMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserTrainMapper.java index 83a2319..019f261 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserTrainMapper.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserTrainMapper.java @@ -1,7 +1,7 @@ package com.ruoyi.cms.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.ruoyi.cms.domain.AppUserTrain; +import com.ruoyi.common.core.domain.entity.AppUserTrain; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -19,4 +19,6 @@ public interface AppUserTrainMapper extends BaseMapper * 根据用户ID查询全部培训记录 */ List selectTrainListByUserId(@Param("userId") Long userId); + + void batchInsert(@Param("appUserTrains") List appUserTrains); } \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserEducationService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserEducationService.java index b25ed44..cc38cd7 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserEducationService.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserEducationService.java @@ -1,6 +1,6 @@ package com.ruoyi.cms.service; -import com.ruoyi.cms.domain.AppUserEducation; +import com.ruoyi.common.core.domain.entity.AppUserEducation; import java.util.List; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserTrainService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserTrainService.java index 3d1b761..6e354be 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserTrainService.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserTrainService.java @@ -1,6 +1,6 @@ package com.ruoyi.cms.service; -import com.ruoyi.cms.domain.AppUserTrain; +import com.ruoyi.common.core.domain.entity.AppUserTrain; import java.util.List; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserEducationServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserEducationServiceImpl.java index 0538e86..a8b5781 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserEducationServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserEducationServiceImpl.java @@ -1,7 +1,7 @@ package com.ruoyi.cms.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ruoyi.cms.domain.AppUserEducation; +import com.ruoyi.common.core.domain.entity.AppUserEducation; import com.ruoyi.cms.mapper.AppUserEducationMapper; import com.ruoyi.cms.service.IAppUserEducationService; import org.springframework.stereotype.Service; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java index a86411d..0e48494 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java @@ -7,6 +7,8 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.common.core.domain.entity.AppUserEducation; +import com.ruoyi.common.core.domain.entity.AppUserTrain; import com.ruoyi.cms.util.http.HttpClientUtils; import com.ruoyi.cms.util.http.JsonUtil; import com.ruoyi.common.constant.CacheConstants; @@ -55,6 +57,12 @@ public class AppUserServiceImpl extends ServiceImpl imple private FileMapper fileMapper; @Autowired private HttpClientUtils httpClientUtils; + //教育经历 + @Autowired + private AppUserEducationMapper appUserEducationMapper; + //培训经历 + @Autowired + private AppUserTrainMapper appUserTrainMapper; //互联网修改个人信息 @Value("${lc_web_auth.editUserInfoUrl}") @@ -587,6 +595,12 @@ public class AppUserServiceImpl extends ServiceImpl imple //修改技能 List skillList=registerBody.getAppSkillsList(); editSkill(skillList,userId); + //修改教育信息 + List educations=registerBody.getAppUserEducations(); + editAppUserEducation(educations,userId); + //修改培训信息 + List trains=registerBody.getAppUserTrains(); + editAppUserTrain(trains,userId); //修改用户信息 AppUser appUser=registerBody.getAppUser(); if(appUser!=null&&appUser.getUserId()!=null){ @@ -630,6 +644,42 @@ public class AppUserServiceImpl extends ServiceImpl imple } } + /** + * 修改教育经历 + * @param list + * @param userId + */ + public void editAppUserEducation(List list, Long userId){ + if(list!=null&&list.size()>0){ + List add=new ArrayList<>(); + list.forEach(it->{ + it.setUserId(userId); + if(it.getId()!=null){appUserEducationMapper.updateById(it);}else{add.add(it);} + }); + if(add.size()>0){ + appUserEducationMapper.batchInsert(add); + } + } + } + + /** + * 修改培训经历 + * @param list + * @param userId + */ + public void editAppUserTrain(List list, Long userId){ + if(list!=null&&list.size()>0){ + List add=new ArrayList<>(); + list.forEach(it->{ + it.setUserId(userId); + if(it.getId()!=null){appUserTrainMapper.updateById(it);}else{add.add(it);} + }); + if(add.size()>0){ + appUserTrainMapper.batchInsert(add); + } + } + } + @Override public List selectNoTmAppUserList(AppUser appUser) { diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserTrainServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserTrainServiceImpl.java index de3bada..13ac944 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserTrainServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserTrainServiceImpl.java @@ -1,7 +1,7 @@ package com.ruoyi.cms.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ruoyi.cms.domain.AppUserTrain; +import com.ruoyi.common.core.domain.entity.AppUserTrain; import com.ruoyi.cms.mapper.AppUserTrainMapper; import com.ruoyi.cms.service.IAppUserTrainService; import org.springframework.stereotype.Service; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index dde2fd8..41972bb 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -545,28 +545,38 @@ public class ESJobSearchImpl implements IESJobSearchService //优化岗位名称查询,只有命中岗位名称或者分类就行 String titleStr = esJobSearch.getJobTitle(); String cateStr = esJobSearch.getJobCategory(); - if (!StringUtil.isEmptyOrNull(titleStr) || !StringUtil.isEmptyOrNull(cateStr)) { + boolean hasTitle = !StringUtil.isEmptyOrNull(titleStr); + boolean hasCate = !StringUtil.isEmptyOrNull(cateStr); + + if (hasTitle || hasCate) { wrapper.and(sub -> { - boolean first = true; - sub.or(); - if (!StringUtil.isEmptyOrNull(titleStr)) { + if (hasTitle) { String[] words = titleStr.split(","); for (String w : words) { - if (!first) sub.or(); - // 同时匹配岗位名称和岗位分类(jobCategory 已存储为标签文字) - sub.match(ESJobDocument::getJobTitle, w, 5.0f); - sub.or(); - sub.match(ESJobDocument::getJobCategory, w, 5.0f); - first = false; + String word = w.trim(); + if (StringUtil.isEmptyOrNull(word)) { + continue; + } + sub.or(inner -> inner + .match(ESJobDocument::getJobTitle, word, 5.0f) + .or() + .match(ESJobDocument::getJobCategory, word, 5.0f) + ); } } - if (!StringUtil.isEmptyOrNull(cateStr)) { - // category 搜索时同时匹配 jobCategory 和 jobTitle,避免因 jobCategory 字段为空而搜不到 - if (!first) sub.or(); - sub.match(ESJobDocument::getJobCategory, cateStr, 5.0f); - first = false; - sub.or(); - sub.match(ESJobDocument::getJobTitle, cateStr, 5.0f); + if (hasCate) { + String[] words = cateStr.split(","); + for (String w : words) { + String word = w.trim(); + if (StringUtil.isEmptyOrNull(word)) { + continue; + } + sub.or(inner -> inner + .match(ESJobDocument::getJobTitle, word, 5.0f) + .or() + .match(ESJobDocument::getJobCategory, word, 5.0f) + ); + } } }); } diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserEducationMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserEducationMapper.xml index 92337af..5d61f3b 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserEducationMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserEducationMapper.xml @@ -20,6 +20,7 @@ + @@ -51,4 +52,21 @@ order by sort asc + + INSERT INTO app_user_education ( + user_id, school_name, education_level, major, degree, study_type, + start_time, end_time, content, sort, del_flag, create_by, create_time, + update_by, update_time,remark + ) VALUES + + ( + #{item.userId}, #{item.schoolName}, #{item.educationLevel}, + #{item.major}, #{item.degree}, #{item.studyType}, #{item.startTime}, + #{item.endTime}, #{item.content}, #{item.sort}, #{item.delFlag}, + #{item.createBy}, #{item.createTime}, #{item.updateBy}, #{item.updateTime}, + #{item.remark} + ) + + + \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserTrainMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserTrainMapper.xml index 3cb49e8..9278e9d 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserTrainMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserTrainMapper.xml @@ -17,6 +17,7 @@ + @@ -48,4 +49,20 @@ order by sort asc + + INSERT INTO app_user_train ( + user_id, train_org, train_course, start_time, end_time, + train_cert, train_content, sort, del_flag, create_by, create_time, + update_by, update_time,remark + ) VALUES + + ( + #{item.userId}, #{item.trainOrg}, #{item.trainCourse}, + #{item.startTime}, #{item.endTime}, #{item.trainCert}, #{item.trainContent}, + #{item.sort}, #{item.delFlag}, #{item.createBy}, #{item.createTime}, + #{item.updateBy}, #{item.updateTime}, #{item.remark} + ) + + + \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserEducation.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppUserEducation.java similarity index 97% rename from ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserEducation.java rename to ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppUserEducation.java index 032ed8f..8a1c313 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserEducation.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppUserEducation.java @@ -1,4 +1,4 @@ -package com.ruoyi.cms.domain; +package com.ruoyi.common.core.domain.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserTrain.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppUserTrain.java similarity index 92% rename from ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserTrain.java rename to ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppUserTrain.java index 21376fb..b2eb1cb 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUserTrain.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppUserTrain.java @@ -1,4 +1,4 @@ -package com.ruoyi.cms.domain; +package com.ruoyi.common.core.domain.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; @@ -9,8 +9,6 @@ import com.ruoyi.common.core.domain.BaseEntity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; @Data @ApiModel("APP求职者培训经历表") diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java index 3996efc..db5dc12 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java @@ -21,6 +21,12 @@ public class RegisterBody extends LoginBody @ApiModelProperty("技能列表") private List appSkillsList; + @ApiModelProperty("教育经历列表") + private List appUserEducations; + + @ApiModelProperty("培训经历列表") + private List appUserTrains; + @ApiModelProperty("公司信息") private Company company;