From 2502d9726b93f881db2f3e07dbc67542cf89fee8 Mon Sep 17 00:00:00 2001 From: sh Date: Thu, 16 Oct 2025 12:36:29 +0800 Subject: [PATCH 01/15] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9=E5=85=AC=E5=8F=B8?= =?UTF-8?q?=E6=9D=83=E9=99=90=E7=99=BB=E5=BD=95=E8=AE=BF=E9=97=AE=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=202.=E6=B7=BB=E5=8A=A0=E5=B2=97=E4=BD=8D=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E5=AF=BC=E5=87=BA-=E6=9C=AA=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysUserController.java | 1 + .../controller/cms/CmsAppUserController.java | 4 +-- .../cms/controller/cms/CmsJobController.java | 2 +- .../cms/controller/cms/CompanyController.java | 2 +- .../controller/cms/JobApplyController.java | 26 ++++++++++++++++--- .../com/ruoyi/cms/mapper/JobApplyMapper.java | 3 +++ .../ruoyi/cms/service/IJobApplyService.java | 3 +++ .../cms/service/impl/JobApplyServiceImpl.java | 7 +++++ .../resources/mapper/app/AppUserMapper.xml | 3 +-- .../resources/mapper/app/JobApplyMapper.xml | 12 +++++++++ .../common/core/domain/entity/AppUser.java | 8 +++--- 11 files changed, 58 insertions(+), 13 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java index b1f4136..2cd27d5 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java @@ -277,6 +277,7 @@ public class SysUserController extends BaseController sysUser.setPhonenumber(company1.getContactPersonPhone()); sysUser.setNickName(company1.getContactPersonPhone()); }else{ + sysUser.setPassword("123456"); sysUser.setUserName(company1.getName()); sysUser.setNickName(company1.getName()); } 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 2c2f2fd..20df889 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 @@ -41,7 +41,7 @@ public class CmsAppUserController extends BaseController * 查询APP用户列表 */ @ApiOperation("查询APP用户列表") - @PreAuthorize("@ss.hasPermi('bussiness:user:list')") + @PreAuthorize("@ss.hasPermi('cms:appUser:list')") @GetMapping("/list") public TableDataInfo list(AppUser appUser) { @@ -54,7 +54,7 @@ public class CmsAppUserController extends BaseController * 导出APP用户列表 */ @ApiOperation("导出APP用户列表") - @PreAuthorize("@ss.hasPermi('bussiness:user:export')") + @PreAuthorize("@ss.hasPermi('cms:appUser:export')") @Log(title = "APP用户", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, AppUser appUser) 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 ddaabc3..7f1127a 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 @@ -37,7 +37,7 @@ public class CmsJobController extends BaseController * 查询岗位列表 */ @ApiOperation("查询岗位列表") - @PreAuthorize("@ss.hasPermi('bussiness:job:list')") + @PreAuthorize("@ss.hasPermi('cms:job:list')") @GetMapping("/list") public TableDataInfo list(Job job) { 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 95fc571..5e6fa82 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 @@ -38,7 +38,7 @@ public class CompanyController extends BaseController * 查询公司列表 */ @ApiOperation("查询公司列表") - @PreAuthorize("@ss.hasPermi('app:company:list')") + @PreAuthorize("@ss.hasPermi('cms:company:list')") @GetMapping("/list") public TableDataInfo list(Company company) { diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/JobApplyController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/JobApplyController.java index 724806c..edd4879 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/JobApplyController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/JobApplyController.java @@ -2,15 +2,21 @@ package com.ruoyi.cms.controller.cms; import com.ruoyi.cms.domain.JobApply; import com.ruoyi.cms.service.IJobApplyService; +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.AppUser; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; 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.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; import java.util.HashMap; +import java.util.List; @RestController @RequestMapping("/cms/jobApply") @@ -26,4 +32,18 @@ public class JobApplyController extends BaseController { HashMap result = iJobApplyService.trendChart(jobApply); return success(result); } + + /** + * 导出APP用户列表 + */ + @ApiOperation("导出岗位申请APP用户") + @PreAuthorize("@ss.hasPermi('cms:jobApply:export')") + @Log(title = "APP用户", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, @PathVariable Long companyId) + { + List list = iJobApplyService.selectAppUserList(companyId); + ExcelUtil util = new ExcelUtil(AppUser.class); + util.exportExcel(response, list, "APP用户数据"); + } } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/JobApplyMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/JobApplyMapper.java index aa48413..7755962 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/JobApplyMapper.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/JobApplyMapper.java @@ -8,6 +8,7 @@ import java.util.List; import com.ruoyi.cms.domain.Job; import com.ruoyi.cms.domain.JobApply; import com.ruoyi.cms.domain.vo.CandidateVO; +import com.ruoyi.common.core.domain.entity.AppUser; /** * 岗位申请Mapper接口 @@ -30,4 +31,6 @@ public interface JobApplyMapper extends BaseMapper List candidates(Long jobId); HashMap trendChart(JobApply jobApply); + + List selectAppUserList(Long companyId); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IJobApplyService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IJobApplyService.java index 60acb30..42c58e9 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IJobApplyService.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IJobApplyService.java @@ -5,6 +5,7 @@ import java.util.List; import com.ruoyi.cms.domain.Job; import com.ruoyi.cms.domain.JobApply; +import com.ruoyi.common.core.domain.entity.AppUser; /** * 岗位申请Service接口 @@ -59,4 +60,6 @@ public interface IJobApplyService HashMap statistics(); HashMap trendChart(JobApply jobApply); + + List selectAppUserList(Long companyId); } 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 465f664..5f5f30a 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 @@ -8,11 +8,13 @@ import com.ruoyi.cms.domain.JobApply; import com.ruoyi.cms.domain.query.MineJobQuery; import com.ruoyi.cms.mapper.*; import com.ruoyi.cms.service.IJobApplyService; +import com.ruoyi.common.core.domain.entity.AppUser; import com.ruoyi.common.utils.SiteSecurityUtils; 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; @@ -121,4 +123,9 @@ public class JobApplyServiceImpl extends ServiceImpl im public HashMap trendChart(JobApply jobApply) { return jobApplyMapper.trendChart(jobApply); } + + @Override + public List selectAppUserList(Long companyId) { + return jobApplyMapper.selectAppUserList(companyId); + } } diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml index 7b2a3fb..113c900 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml @@ -29,11 +29,10 @@ 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,hire 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 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,hire from app_user + + + + \ No newline at end of file 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 5a32890..e93a110 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 @@ -104,10 +104,10 @@ public class AppUser extends BaseEntity @ApiModelProperty("身份证") private String idCard; - @ApiModelProperty("是否录用 0录用,1未录用") - private String hire; - - @ApiModelProperty("是否企业用户 0是,1否") + /** + * 是否企业用户 0是,1否改为(0企业,1求职者,2网格员) + */ + @ApiModelProperty("app角色:0企业,1求职者,2网格员") private String isCompanyUser; @TableField(exist = false) From 79941122835215f559a1d080673cbf5fd16b4272 Mon Sep 17 00:00:00 2001 From: sh Date: Thu, 16 Oct 2025 13:14:35 +0800 Subject: [PATCH 02/15] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B2=97=E4=BD=8D?= =?UTF-8?q?=E7=94=B3=E8=AF=B7=E5=AF=BC=E5=87=BA-=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/cms/JobApplyController.java | 9 +++-- .../com/ruoyi/cms/domain/vo/CandidateVO.java | 6 +++ .../com/ruoyi/cms/mapper/JobApplyMapper.java | 3 +- .../ruoyi/cms/service/IJobApplyService.java | 4 +- .../cms/service/impl/JobApplyServiceImpl.java | 7 ++-- .../resources/mapper/app/JobApplyMapper.xml | 38 ++++++++++++++++++- 6 files changed, 53 insertions(+), 14 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/JobApplyController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/JobApplyController.java index edd4879..b9d09d5 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/JobApplyController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/JobApplyController.java @@ -1,11 +1,12 @@ package com.ruoyi.cms.controller.cms; +import com.ruoyi.cms.domain.Job; import com.ruoyi.cms.domain.JobApply; +import com.ruoyi.cms.domain.vo.CandidateVO; import com.ruoyi.cms.service.IJobApplyService; 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.AppUser; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; import io.swagger.annotations.Api; @@ -40,10 +41,10 @@ public class JobApplyController extends BaseController { @PreAuthorize("@ss.hasPermi('cms:jobApply:export')") @Log(title = "APP用户", businessType = BusinessType.EXPORT) @PostMapping("/export") - public void export(HttpServletResponse response, @PathVariable Long companyId) + public void export(HttpServletResponse response, Job job) { - List list = iJobApplyService.selectAppUserList(companyId); - ExcelUtil util = new ExcelUtil(AppUser.class); + List list = iJobApplyService.selectAppUserList(job); + ExcelUtil util = new ExcelUtil(CandidateVO.class); util.exportExcel(response, list, "APP用户数据"); } } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/CandidateVO.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/CandidateVO.java index 3024f10..82a817d 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/CandidateVO.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/CandidateVO.java @@ -1,6 +1,7 @@ package com.ruoyi.cms.domain.vo; import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.entity.AppUser; import lombok.Data; @@ -12,4 +13,9 @@ public class CandidateVO extends AppUser { private Date applyDate; private Integer matchingDegree; private String applyId; + + @Excel(name = "公司名称", sort = 0) + private String companyName; + @Excel(name = "岗位名称", sort = 1) + private String jobName; } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/JobApplyMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/JobApplyMapper.java index 7755962..5dbfdb7 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/JobApplyMapper.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/JobApplyMapper.java @@ -8,7 +8,6 @@ import java.util.List; import com.ruoyi.cms.domain.Job; import com.ruoyi.cms.domain.JobApply; import com.ruoyi.cms.domain.vo.CandidateVO; -import com.ruoyi.common.core.domain.entity.AppUser; /** * 岗位申请Mapper接口 @@ -32,5 +31,5 @@ public interface JobApplyMapper extends BaseMapper HashMap trendChart(JobApply jobApply); - List selectAppUserList(Long companyId); + List selectAppUserList(Job job); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IJobApplyService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IJobApplyService.java index 42c58e9..a6e2ad9 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IJobApplyService.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IJobApplyService.java @@ -5,7 +5,7 @@ import java.util.List; import com.ruoyi.cms.domain.Job; import com.ruoyi.cms.domain.JobApply; -import com.ruoyi.common.core.domain.entity.AppUser; +import com.ruoyi.cms.domain.vo.CandidateVO; /** * 岗位申请Service接口 @@ -61,5 +61,5 @@ public interface IJobApplyService HashMap trendChart(JobApply jobApply); - List selectAppUserList(Long companyId); + List selectAppUserList(Job job); } 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 5f5f30a..999a2c0 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 @@ -6,15 +6,14 @@ import com.ruoyi.cms.domain.FairCollection; import com.ruoyi.cms.domain.Job; import com.ruoyi.cms.domain.JobApply; import com.ruoyi.cms.domain.query.MineJobQuery; +import com.ruoyi.cms.domain.vo.CandidateVO; import com.ruoyi.cms.mapper.*; import com.ruoyi.cms.service.IJobApplyService; -import com.ruoyi.common.core.domain.entity.AppUser; import com.ruoyi.common.utils.SiteSecurityUtils; 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; @@ -125,7 +124,7 @@ public class JobApplyServiceImpl extends ServiceImpl im } @Override - public List selectAppUserList(Long companyId) { - return jobApplyMapper.selectAppUserList(companyId); + public List selectAppUserList(Job job) { + return jobApplyMapper.selectAppUserList(job); } } diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/JobApplyMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/JobApplyMapper.xml index 165307b..7bec3d9 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/JobApplyMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/JobApplyMapper.xml @@ -59,12 +59,46 @@ 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,hire from app_user - + select b.job_title jobName,l.name companyName,e.* from job_apply a INNER join job b on a.job_id=b.job_id and b.del_flag='0' INNER join app_user e on a.user_id =e.user_id and e.del_flag='0' INNER join company l on b.company_id =l.company_id and l.del_flag='0' where a.del_flag='0' and a.hire='0' + and b.job_title like concat('%', cast(#{jobTitle, jdbcType=VARCHAR} as varchar), '%') + and b.education = #{education} + and b.experience = #{experience} + and b.company_name like concat('%', cast(#{companyName, jdbcType=VARCHAR} as varchar), '%') + and b.job_location = #{jobLocation} + and b.posting_date = #{postingDate} + and b.vacancies = #{vacancies} + and b.latitude = #{latitude} + and b.longitude = #{longitude} + and b."view" = #{view} + and b.company_id = #{companyId} + and b.is_hot = #{isHot} + and b.apply_num = #{applyNum} + and b.company_id in(select company_id from company where code=#{code}) + + + and b.min_salary < 1750 + + + and b.max_salary < 2000 and b.min_salary >= 1750 + + + and b.max_salary < 3000 and b.min_salary >= 2000 + + + and b.max_salary < 4000 and b.min_salary >= 3000 + + + and b.max_salary < 5000 and b.min_salary >= 4000 + + + and b.min_salary > 5000 + + \ No newline at end of file From ac2d427a7196faaa95b1d77955558310e1422ec2 Mon Sep 17 00:00:00 2001 From: sh Date: Thu, 16 Oct 2025 14:55:26 +0800 Subject: [PATCH 03/15] =?UTF-8?q?=E5=B2=97=E4=BD=8D-=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=B2=97=E4=BD=8D=E7=B1=BB=E5=9E=8B=EF=BC=880=E5=B8=B8?= =?UTF-8?q?=E8=A7=84=E5=B2=97=E4=BD=8D=201=E5=B0=B1=E4=B8=9A=E8=A7=81?= =?UTF-8?q?=E4=B9=A0=E5=B2=97=E4=BD=8D=202=E5=AE=9E=E4=B9=A0=E5=AE=9E?= =?UTF-8?q?=E8=AE=AD=E5=B2=97=E4=BD=8D=203=E7=A4=BE=E5=8C=BA=E5=AE=9E?= =?UTF-8?q?=E8=B7=B5=E5=B2=97=E4=BD=8D=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/ESJobDocument.java | 3 +++ ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Job.java | 3 +++ .../java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java | 6 ++++++ .../java/com/ruoyi/common/core/domain/entity/AppUser.java | 2 +- 4 files changed, 13 insertions(+), 1 deletion(-) 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 4f777d6..7fed79f 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 @@ -142,4 +142,7 @@ public class ESJobDocument @ApiModelProperty("岗位类型 0疆内 1疆外") private String jobType; + + @ApiModelProperty("类型 0常规岗位 1就业见习岗位 2实习实训岗位 3社区实践岗位 对应字段字典position_type") + private String type; } 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 cb5e47a..5910510 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 @@ -162,6 +162,9 @@ public class Job extends BaseEntity @ApiModelProperty("岗位类型 0疆内 1疆外") private String jobType; + @ApiModelProperty("类型 0常规岗位 1就业见习岗位 2实习实训岗位 3社区实践岗位 对应字段字典position_type") + private String type; + @TableField(exist = false) @ApiModelProperty("岗位联系人列表") private List jobContactList; 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 cc142ef..e981a63 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 @@ -175,6 +175,9 @@ public class ESJobSearchImpl implements IESJobSearchService if(!StringUtil.isEmptyOrNull(esJobSearch.getJobType())){ newSearch.setJobType(esJobSearch.getJobType()); } + if(!StringUtil.isEmptyOrNull(esJobSearch.getType())){ + newSearch.setType(esJobSearch.getType()); + } } LambdaEsQueryWrapper wrapper = getWrapper(newSearch,jobIds); @@ -399,6 +402,9 @@ public class ESJobSearchImpl implements IESJobSearchService if(!StringUtil.isEmptyOrNull(esJobSearch.getJobType())){ wrapper.and(x->x.eq(ESJobDocument::getJobType,esJobSearch.getJobType())); } + if(!StringUtil.isEmptyOrNull(esJobSearch.getType())){ + wrapper.and(x->x.eq(ESJobDocument::getType,esJobSearch.getType())); + } if(Objects.nonNull(esJobSearch.getOrder())){ if(esJobSearch.getOrder()==1){ wrapper.orderByDesc(ESJobDocument::getIsHot); 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 e93a110..2252586 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 @@ -107,7 +107,7 @@ public class AppUser extends BaseEntity /** * 是否企业用户 0是,1否改为(0企业,1求职者,2网格员) */ - @ApiModelProperty("app角色:0企业,1求职者,2网格员") + @ApiModelProperty("app角色:0企业,1求职者,2网格员 3内部政府人员") private String isCompanyUser; @TableField(exist = false) From da48a9c33a6ed74218eb2c38b0fc851e6a1ddf7e Mon Sep 17 00:00:00 2001 From: sh Date: Thu, 16 Oct 2025 19:39:06 +0800 Subject: [PATCH 04/15] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E7=BB=8F=E5=8E=86-=E6=B7=BB=E5=8A=A0=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/app/AppUserWorkExperiencesController.java | 7 ++++++- .../resources/mapper/app/UserWorkExperiencesMapper.xml | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserWorkExperiencesController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserWorkExperiencesController.java index 8bda4de..79b32c3 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserWorkExperiencesController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserWorkExperiencesController.java @@ -36,6 +36,9 @@ public class AppUserWorkExperiencesController extends BaseController { @ApiOperation("工作经历列表信息") @GetMapping("/list") public TableDataInfo list(UserWorkExperiences userWorkExperiences){ + if(userWorkExperiences.getUserId()==null){ + userWorkExperiences.setUserId(SiteSecurityUtils.getUserId()); + } startPage(); List list=userWorkExperiencesService.getWorkExperiencesList(userWorkExperiences); return getDataTable(list); @@ -57,7 +60,9 @@ public class AppUserWorkExperiencesController extends BaseController { @ApiOperation("新增工作经历") @PostMapping("/add") public AjaxResult add(@RequestBody UserWorkExperiences userWorkExperiences){ - userWorkExperiences.setUserId(SiteSecurityUtils.getUserId()); + if(userWorkExperiences.getUserId()==null){ + userWorkExperiences.setUserId(SiteSecurityUtils.getUserId()); + } return toAjax(userWorkExperiencesService.insertWorkExperiences(userWorkExperiences)); } diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/UserWorkExperiencesMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/UserWorkExperiencesMapper.xml index cfc5642..c20534f 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/UserWorkExperiencesMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/UserWorkExperiencesMapper.xml @@ -31,6 +31,7 @@ and company_name like concat('%', #{companyName}, '%') and position = #{position} and description = #{description} + and user_id = #{userId} From 47351f41eb93d6c705316be3976e56f176a143f3 Mon Sep 17 00:00:00 2001 From: sh Date: Mon, 20 Oct 2025 09:54:51 +0800 Subject: [PATCH 05/15] =?UTF-8?q?1.=E6=B7=BB=E5=8A=A0=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E9=AA=8C=E8=AF=81=E7=99=BB=E5=BD=95?= =?UTF-8?q?=202.=E6=B7=BB=E5=8A=A0=E6=95=8F=E6=84=9F=E8=AF=8D=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=203.=E4=BF=9D=E5=AD=98=E5=B7=A5=E4=BD=9C=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0=E6=97=B6=EF=BC=8C=E9=AA=8C=E8=AF=81=E6=95=8F=E6=84=9F?= =?UTF-8?q?=E8=AF=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysLoginController.java | 18 ++ .../cms/controller/app/AppUserController.java | 8 + .../cms/controller/cms/CmsJobController.java | 16 ++ .../cms/SensitiveWordDataController.java | 23 ++ .../java/com/ruoyi/cms/domain/Company.java | 6 + .../ruoyi/cms/domain/SensitiveWordData.java | 3 + .../cms/mapper/SensitiveWordDataMapper.java | 2 + .../ruoyi/cms/service/IAppUserService.java | 1 + .../cms/service/SensitiveWordDataService.java | 2 + .../cms/service/impl/AppUserServiceImpl.java | 6 + .../impl/SensitiveWordDataServiceImpl.java | 5 + .../com/ruoyi/cms/util/EasyExcelUtils.java | 198 ++++++++++++++++++ .../java/com/ruoyi/cms/util/WechatUtil.java | 58 +++++ .../sensitiveWord/SensitiveWordChecker.java | 105 ++++++++++ .../util/sensitiveWord/SensitiveWordTrie.java | 97 +++++++++ .../cms/util/sensitiveWord/TrieNode.java | 23 ++ .../mapper/app/SensitiveWordDataMapper.xml | 8 + .../common/core/domain/entity/AppUser.java | 11 + .../common/core/domain/model/LoginBody.java | 24 +++ .../web/service/SysLoginService.java | 67 ++++++ 20 files changed, 681 insertions(+) create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/EasyExcelUtils.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/sensitiveWord/SensitiveWordChecker.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/sensitiveWord/SensitiveWordTrie.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/sensitiveWord/TrieNode.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java index 312ddd7..e6cb963 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java @@ -2,6 +2,9 @@ package com.ruoyi.web.controller.system; import java.util.List; import java.util.Set; + +import com.ruoyi.common.core.domain.model.LoginSiteUser; +import com.ruoyi.common.utils.SiteSecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import com.ruoyi.common.constant.Constants; @@ -56,6 +59,21 @@ public class SysLoginController ajax.put(Constants.TOKEN, token); return ajax; } + + @PostMapping("/app/appLogin") + public AjaxResult appLogin(@RequestBody LoginBody loginBody) + { + AjaxResult ajax = AjaxResult.success(); + // 若携带令牌且有效,直接返回 + if (SiteSecurityUtils.isLogin()) { + LoginSiteUser loginSiteUser = SiteSecurityUtils.getLoginUser(); + ajax.put(Constants.TOKEN, loginSiteUser.getToken()); + }else{ + ajax=loginService.appLogin(loginBody); + } + return ajax; + } + /** * 获取用户信息 * 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 827d5dd..b9f650c 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 @@ -116,4 +116,12 @@ public class AppUserController extends BaseController HashMap result = jobApplyService.statistics(); return AjaxResult.success(result); } + + @ApiOperation("根据条件查询用户信息") + @GetMapping("/list") + public AjaxResult getUserList(AppUser appUser) + { + List list = appUserService.selectAppUserList(appUser); + return AjaxResult.success(list); + } } 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 7f1127a..97e7593 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 @@ -3,6 +3,7 @@ package com.ruoyi.cms.controller.cms; import com.ruoyi.cms.domain.Job; import com.ruoyi.cms.domain.vo.CandidateVO; import com.ruoyi.cms.service.IJobService; +import com.ruoyi.cms.util.sensitiveWord.SensitiveWordChecker; import com.ruoyi.common.annotation.Anonymous; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; @@ -33,6 +34,8 @@ public class CmsJobController extends BaseController { @Autowired private IJobService jobService; + @Autowired + SensitiveWordChecker sensitiveWordChecker; /** * 查询岗位列表 */ @@ -79,6 +82,13 @@ public class CmsJobController extends BaseController @PostMapping public AjaxResult add(@RequestBody Job job) { + // 校验描述中的敏感词 + List sensitiveWords = sensitiveWordChecker.checkSensitiveWords(job.getDescription()); + if (!sensitiveWords.isEmpty()) { + String errorMsg = "描述中包含敏感词:" + String.join("、", sensitiveWords); + return AjaxResult.error(errorMsg); + } + // 无敏感词,执行插入 return toAjax(jobService.insertJob(job)); } @@ -91,6 +101,12 @@ public class CmsJobController extends BaseController @PutMapping public AjaxResult edit(@RequestBody Job job) { + // 校验描述中的敏感词 + List sensitiveWords = sensitiveWordChecker.checkSensitiveWords(job.getDescription()); + if (!sensitiveWords.isEmpty()) { + String errorMsg = "描述中包含敏感词:" + String.join("、", sensitiveWords); + return AjaxResult.error(errorMsg); + } return toAjax(jobService.updateJob(job)); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/SensitiveWordDataController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/SensitiveWordDataController.java index 35f637f..1b9b35f 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/SensitiveWordDataController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/SensitiveWordDataController.java @@ -2,6 +2,7 @@ package com.ruoyi.cms.controller.cms; import com.ruoyi.cms.domain.SensitiveWordData; import com.ruoyi.cms.service.SensitiveWordDataService; +import com.ruoyi.cms.util.EasyExcelUtils; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; @@ -12,7 +13,9 @@ 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 org.springframework.web.multipart.MultipartFile; +import java.io.InputStream; import java.util.List; @@ -88,4 +91,24 @@ public class SensitiveWordDataController extends BaseController { return toAjax(sensitiveWordDataService.deleteSensitiveworddataIds(ids)); } + /** + * 通用上传请求(单个) + */ + @PostMapping("/exoprt") + public AjaxResult uploadFile(@RequestParam("file") MultipartFile file) throws Exception + { + try + { + InputStream inputStream = file.getInputStream(); + EasyExcelUtils.readExcelByBatch(inputStream, SensitiveWordData.class, 100, list -> { + // 处理逻辑:如批量保存到数据库 + sensitiveWordDataService.batchInsert(list); + }); + } + catch (Exception e) + { + return AjaxResult.error(e.getMessage()); + } + return AjaxResult.success(); + } } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Company.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Company.java index 868fd52..bd9a88a 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Company.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Company.java @@ -105,4 +105,10 @@ public class Company extends BaseEntity @TableField(exist = false) @ApiModelProperty("驳回时间") private String rejectTime; + + @ApiModelProperty("是否本地重点企业") + private String isImpCompany; + + @ApiModelProperty("本地重点发展产业") + private String impCompanyType; } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/SensitiveWordData.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/SensitiveWordData.java index 49ac2b8..7293329 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/SensitiveWordData.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/SensitiveWordData.java @@ -1,5 +1,6 @@ package com.ruoyi.cms.domain; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -31,11 +32,13 @@ public class SensitiveWordData extends BaseEntity { /** * 敏感词 */ + @ExcelProperty(value = "敏感词", index = 0) @ApiModelProperty("敏感词") private String sensitiveWord; /** * 类型 */ + @ExcelProperty(value = "类型", index = 1) @ApiModelProperty("类型") private String type; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/SensitiveWordDataMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/SensitiveWordDataMapper.java index 3fc6c6f..e7eafd3 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/SensitiveWordDataMapper.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/SensitiveWordDataMapper.java @@ -16,4 +16,6 @@ import java.util.List; public interface SensitiveWordDataMapper extends BaseMapper { List selectSensitiveworddataList(SensitiveWordData sensitiveWordData); + + int batchInsert(List list); } 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 d226ece..a6b0018 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 @@ -51,4 +51,5 @@ public interface IAppUserService */ public int deleteAppUserByUserIds(Long[] userIds); + public AppUser getPhone(String phone); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/SensitiveWordDataService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/SensitiveWordDataService.java index 1a51022..7a39a4c 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/SensitiveWordDataService.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/SensitiveWordDataService.java @@ -22,5 +22,7 @@ public interface SensitiveWordDataService { int updateSensitiveworddata(SensitiveWordData sensitiveWordData); int deleteSensitiveworddataIds(Long[] ids); + + int batchInsert(List list); } 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 0df2df7..d8257c8 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 @@ -4,6 +4,7 @@ import java.util.List; import java.util.Arrays; import java.util.stream.Collectors; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.cms.mapper.JobTitleMapper; import com.ruoyi.cms.util.StringUtil; import com.ruoyi.common.core.domain.entity.JobTitle; @@ -102,4 +103,9 @@ public class AppUserServiceImpl extends ServiceImpl imple return appUserMapper.deleteBatchIds(Arrays.asList(userIds)); } + @Override + public AppUser getPhone(String phone) { + return appUserMapper.selectOne(new LambdaQueryWrapper() + .eq(AppUser::getPhone, phone)); + } } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/SensitiveWordDataServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/SensitiveWordDataServiceImpl.java index bb3aea1..6cd4c8e 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/SensitiveWordDataServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/SensitiveWordDataServiceImpl.java @@ -40,4 +40,9 @@ public class SensitiveWordDataServiceImpl implements SensitiveWordDataService { public int deleteSensitiveworddataIds(Long[] ids) { return sensitiveWordDataMapper.deleteBatchIds(Arrays.asList(ids)); } + + @Override + public int batchInsert(List list) { + return sensitiveWordDataMapper.batchInsert(list); + } } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/EasyExcelUtils.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/EasyExcelUtils.java new file mode 100644 index 0000000..39f45fe --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/EasyExcelUtils.java @@ -0,0 +1,198 @@ +package com.ruoyi.cms.util; + +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder; +import com.alibaba.excel.write.metadata.style.WriteCellStyle; +import com.alibaba.excel.write.metadata.style.WriteFont; +import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.VerticalAlignment; + +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Consumer; + +/** + * EasyExcel 工具类(基于 alibaba easyexcel 3.x+) + */ +public class EasyExcelUtils { + + /** + * 读取 Excel 文件(一次性读取所有数据) + * + * @param file 上传的 Excel 文件 + * @param head 实体类字节码(需使用 @ExcelProperty 注解映射表头) + * @param 实体类泛型 + * @return 解析后的数据集 + */ + public static List readExcel(File file, Class head) { + return EasyExcel.read(file) + .head(head) + .sheet() + .doReadSync(); + } + + /** + * 读取 Excel 输入流(一次性读取所有数据) + * + * @param inputStream Excel 输入流(如 MultipartFile 的 getInputStream()) + * @param head 实体类字节码 + * @param 实体类泛型 + * @return 解析后的数据集 + */ + public static List readExcel(InputStream inputStream, Class head) { + return EasyExcel.read(inputStream) + .head(head) + .sheet() + .doReadSync(); + } + + /** + * 分批读取 Excel(适用于大数据量,避免内存溢出) + * + * @param inputStream Excel 输入流 + * @param head 实体类字节码 + * @param batchSize 每批处理的数据量 + * @param consumer 数据处理函数(如批量保存到数据库) + * @param 实体类泛型 + */ + public static void readExcelByBatch(InputStream inputStream, Class head, int batchSize, Consumer> consumer) { + EasyExcel.read(inputStream) + .head(head) + .sheet() + .registerReadListener(new AnalysisEventListener() { + private List batchList; // 临时存储批数据 + + @Override + public void invoke(T data, AnalysisContext context) { + if (batchList == null) { + batchList = new java.util.ArrayList<>(batchSize); + } + batchList.add(data); + // 达到批处理量时执行消费逻辑 + if (batchList.size() >= batchSize) { + consumer.accept(batchList); + batchList.clear(); // 清空集合,释放内存 + } + } + + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + // 处理剩余不足一批的数据 + if (batchList != null && !batchList.isEmpty()) { + consumer.accept(batchList); + } + } + }) + .doRead(); + } + + /** + * 生成 Excel 并写入到输出流(通用样式) + * + * @param outputStream 输出流(如 HttpServletResponse 的 getOutputStream()) + * @param data 数据集 + * @param head 实体类字节码 + * @param sheetName 工作表名称 + * @param 实体类泛型 + */ + public static void writeExcel(OutputStream outputStream, List data, Class head, String sheetName) { + // 构建通用样式策略(表头居中加粗,内容居中) + HorizontalCellStyleStrategy styleStrategy = getDefaultStyleStrategy(); + + ExcelWriterSheetBuilder writerBuilder = EasyExcel.write(outputStream, head) + .sheet(sheetName) + .registerWriteHandler(styleStrategy); + + writerBuilder.doWrite(data); + } + + /** + * 生成 Excel 并通过 HttpServletResponse 下载(前端直接触发下载) + * + * @param response HttpServletResponse + * @param data 数据集 + * @param head 实体类字节码 + * @param sheetName 工作表名称 + * @param fileName 下载的文件名(不带后缀) + * @param 实体类泛型 + * @throws IOException IO异常 + */ + public static void downloadExcel(HttpServletResponse response, List data, Class head, + String sheetName, String fileName) throws IOException { + // 设置响应头,触发前端下载 + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("UTF-8"); + // 文件名编码,避免中文乱码 + String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); + response.setHeader("Content-disposition", "attachment;filename*=UTF-8''" + encodedFileName + ".xlsx"); + + // 写入数据到响应流 + writeExcel(response.getOutputStream(), data, head, sheetName); + } + + /** + * 填充 Excel 模板(适用于带固定格式的模板文件) + * + * @param templateInputStream 模板文件输入流 + * @param outputStream 输出流(如响应流或文件流) + * @param dataMap 填充数据(key为模板中的占位符,value为填充值) + * @param sheetName 工作表名称 + */ + public static void fillTemplate(InputStream templateInputStream, OutputStream outputStream, + Map dataMap, String sheetName) { + EasyExcel.write(outputStream) + .withTemplate(templateInputStream) + .sheet(sheetName) + .doFill(dataMap); + } + + /** + * 获取默认单元格样式策略(表头加粗居中,内容居中) + */ + private static HorizontalCellStyleStrategy getDefaultStyleStrategy() { + // 表头样式 + WriteCellStyle headStyle = new WriteCellStyle(); + WriteFont headFont = new WriteFont(); + headFont.setBold(true); // 加粗 + headFont.setFontHeightInPoints((short) 11); + headStyle.setWriteFont(headFont); + headStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); // 水平居中 + headStyle.setVerticalAlignment(VerticalAlignment.CENTER); // 垂直居中 + + // 内容样式 + WriteCellStyle contentStyle = new WriteCellStyle(); + WriteFont contentFont = new WriteFont(); + contentFont.setFontHeightInPoints((short) 11); + contentStyle.setWriteFont(contentFont); + contentStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); + contentStyle.setVerticalAlignment(VerticalAlignment.CENTER); + + // 返回样式策略 + return new HorizontalCellStyleStrategy(headStyle, contentStyle); + } + + /** + * 关闭流(工具类内部使用) + */ + private static void closeStream(Closeable... closeables) { + if (closeables != null) { + for (Closeable closeable : closeables) { + if (Objects.nonNull(closeable)) { + try { + closeable.close(); + } catch (IOException e) { + // 日志记录(建议替换为实际项目的日志框架) + e.printStackTrace(); + } + } + } + } + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java index d01a0d4..d55a80e 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java @@ -11,10 +11,14 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import org.springframework.stereotype.Component; +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; +import java.util.Base64; import java.util.Formatter; import java.util.HashMap; import java.util.Map; @@ -210,6 +214,60 @@ public class WechatUtil { return result; } + /** + * 通过code获取微信用户的openid和session_key + * + * @param appid 小程序appid + * @param secret 小程序secret + * @param code 登录凭证code + * @return 包含openid、session_key、unionid的JSON对象 + */ + public JSONObject code2Session(String appid, String secret, String code) { + try { + String response = getAccessTokenData("https://api.weixin.qq.com/sns/jscode2session?appid="+appid+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code"); + JSONObject result = JSONObject.parseObject(response); + // 微信返回错误码处理 + if (result.containsKey("errcode") && result.getInteger("errcode") != 0) { + throw new RuntimeException("微信授权失败:" + result.getString("errmsg")); + } + return result; + } catch (Exception e) { + throw new RuntimeException("调用微信接口失败:" + e.getMessage()); + } + } + + /** + * 解密微信用户手机号(用户通过 getPhoneNumber 组件授权后返回的加密数据) + * @param encryptedData 微信返回的加密手机号数据 + * @param sessionKey 从 code2Session 接口获取的会话密钥 + * @param iv 微信返回的加密向量(与 encryptedData 配套) + * @return 解密后的 JSON 对象(包含 phoneNumber、purePhoneNumber 等字段) + * @throws RuntimeException 解密失败时抛出 + */ + public JSONObject decryptPhoneNumber(String encryptedData, String sessionKey, String iv) { + try { + // 1. Base64 解码(encryptedData、sessionKey、iv 均为 Base64 编码) + byte[] encryptedDataBytes = Base64.getDecoder().decode(encryptedData); + byte[] sessionKeyBytes = Base64.getDecoder().decode(sessionKey); + byte[] ivBytes = Base64.getDecoder().decode(iv); + + // 2. 初始化 AES-128-CBC 解密器(微信固定加密算法) + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding"); + SecretKeySpec keySpec = new SecretKeySpec(sessionKeyBytes, "AES"); + IvParameterSpec ivSpec = new IvParameterSpec(ivBytes); + cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec); + + // 3. 执行解密并转换为字符串 + byte[] decryptedBytes = cipher.doFinal(encryptedDataBytes); + String decryptedStr = new String(decryptedBytes, StandardCharsets.UTF_8); + + // 4. 解析为 JSON 并返回(包含手机号等信息) + return JSONObject.parseObject(decryptedStr); + } catch (Exception e) { + throw new RuntimeException("解密用户手机号失败:" + e.getMessage(), e); + } + } + private String create_nonce_str() { return IdUtil.simpleUUID(); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/sensitiveWord/SensitiveWordChecker.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/sensitiveWord/SensitiveWordChecker.java new file mode 100644 index 0000000..85dab98 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/sensitiveWord/SensitiveWordChecker.java @@ -0,0 +1,105 @@ +package com.ruoyi.cms.util.sensitiveWord; + +import com.ruoyi.cms.domain.SensitiveWordData; +import com.ruoyi.cms.mapper.SensitiveWordDataMapper; +import com.ruoyi.common.core.redis.RedisCache; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Component; +import javax.annotation.PostConstruct; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +@Component +public class SensitiveWordChecker { + + @Autowired + private SensitiveWordDataMapper sensitiveWordDataMapper; + + @Autowired + private SensitiveWordTrie trie; // 注入前缀树 + // 缓存键常量 + private static final String SENSITIVE_WORD_CACHE_KEY = "sensitive:words"; + @Autowired + private RedisCache redisCache; + + /** + * 项目启动时初始化敏感词库到前缀树 + */ + @PostConstruct + public void init() { + List sensitiveWords = getSensitiveWordsFromCache(); + if (sensitiveWords.isEmpty()) { + // 缓存未命中,从数据库加载 + sensitiveWords = loadSensitiveWordsFromDbAndCache(); + } + // 初始化前缀树 + trie.batchAddWords(sensitiveWords); + } + + /** + * 检测文本中的敏感词 + * @param text 待检测文本(如job.getDescription()) + * @return 敏感词列表(空列表表示无敏感词) + */ + public List checkSensitiveWords(String text) { + return trie.findAllSensitiveWords(text); + } + + /** + * 从缓存获取敏感词列表 + */ + @Cacheable(value = SENSITIVE_WORD_CACHE_KEY) + public List getSensitiveWordsFromCache() { + // 从Redis获取 + Object cachedWords = redisCache.getCacheObject(SENSITIVE_WORD_CACHE_KEY); + if (cachedWords instanceof List) { + return ((List) cachedWords).stream() + .filter(obj -> obj instanceof String) + .map(obj -> (String) obj) + .collect(Collectors.toList()); + } + return Collections.emptyList(); + } + + /** + * 从数据库加载敏感词并更新缓存 + */ + public List loadSensitiveWordsFromDbAndCache() { + List wordList = sensitiveWordDataMapper.selectSensitiveworddataList(new SensitiveWordData()); + List sensitiveWords = wordList.stream() + .map(SensitiveWordData::getSensitiveWord) + .collect(Collectors.toList()); + // 缓存有效期设置为24小时,可根据实际需求调整 + redisCache.setCacheObject(SENSITIVE_WORD_CACHE_KEY, sensitiveWords, 24, TimeUnit.HOURS); + return sensitiveWords; + } + + /** + * 敏感词更新时清除缓存(需在敏感词管理服务中调用) + */ + @CacheEvict(value = SENSITIVE_WORD_CACHE_KEY, allEntries = true) + public void clearSensitiveWordCache() { + // 清除缓存后可重新加载 + loadSensitiveWordsFromDbAndCache(); + // 重新初始化前缀树 + trie.clear(); + init(); + } + + /** + * 新增/修改敏感词后更新缓存和前缀树 + */ + public void updateCacheAfterModify() { + // 1. 清除旧缓存 + redisCache.deleteObject(SENSITIVE_WORD_CACHE_KEY); + // 2. 从数据库重新加载最新数据并更新缓存 + List latestWords = loadSensitiveWordsFromDbAndCache(); + // 3. 重建前缀树 + trie.clear(); + trie.batchAddWords(latestWords); + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/sensitiveWord/SensitiveWordTrie.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/sensitiveWord/SensitiveWordTrie.java new file mode 100644 index 0000000..3a0bd59 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/sensitiveWord/SensitiveWordTrie.java @@ -0,0 +1,97 @@ +package com.ruoyi.cms.util.sensitiveWord; + +import org.springframework.stereotype.Component; + +import java.util.*; + +/** + * 前缀树(Trie树)节点 + */ + + +/** + * 前缀树(Trie树)工具类 + */ +@Component +public class SensitiveWordTrie { + // 根节点(无实际字符) + private final TrieNode root = new TrieNode(); + + /** + * 向前缀树中添加敏感词 + */ + public void addWord(String word) { + if (word == null || word.isEmpty()) { + return; + } + TrieNode current = root; + for (char c : word.toCharArray()) { + // 若子节点中不存在该字符,则创建新节点 + current.getChildren().putIfAbsent(c, new TrieNode()); + // 移动到子节点 + current = current.getChildren().get(c); + } + // 标记当前节点为敏感词结尾 + current.setEnd(true); + } + + /** + * 检测文本中所有敏感词(去重) + * @param text 待检测文本 + * @return 敏感词列表 + */ + public List findAllSensitiveWords(String text) { + if (text == null || text.isEmpty()) { + return new ArrayList<>(); + } + + Set sensitiveWords = new HashSet<>(); + TrieNode current = root; + StringBuilder currentWord = new StringBuilder(); // 记录当前匹配的字符 + + for (int i = 0; i < text.length(); i++) { + char c = text.charAt(i); + + // 若当前字符不在子节点中,重置匹配状态 + if (!current.getChildren().containsKey(c)) { + current = root; // 回到根节点 + currentWord.setLength(0); // 清空当前匹配的字符 + continue; + } + + // 匹配到字符,移动到子节点 + current = current.getChildren().get(c); + currentWord.append(c); + + // 若当前节点是敏感词结尾,记录该敏感词 + if (current.isEnd()) { + sensitiveWords.add(currentWord.toString()); + } + } + + return new ArrayList<>(sensitiveWords); + } + + /** + * 批量添加敏感词到前缀树 + * @param words 敏感词列表 + */ + public void batchAddWords(List words) { + if (words == null || words.isEmpty()) { + return; + } + // 批量处理比循环单次添加更高效,减少重复判断 + for (String word : words) { + addWord(word); + } + } + + /** + * 清空前缀树所有节点 + */ + public void clear() { + // 清空根节点的子节点映射,达到清空整个前缀树的效果 + root.getChildren().clear(); + } + +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/sensitiveWord/TrieNode.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/sensitiveWord/TrieNode.java new file mode 100644 index 0000000..fb429fa --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/sensitiveWord/TrieNode.java @@ -0,0 +1,23 @@ +package com.ruoyi.cms.util.sensitiveWord; + +import java.util.HashMap; +import java.util.Map; + +class TrieNode { + // 子节点:key=字符,value=子节点 + private final Map children = new HashMap<>(); + // 标记当前节点是否为敏感词的结尾 + private boolean isEnd = false; + + public Map getChildren() { + return children; + } + + public boolean isEnd() { + return isEnd; + } + + public void setEnd(boolean end) { + isEnd = end; + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/SensitiveWordDataMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/SensitiveWordDataMapper.xml index 0144446..b8af9bb 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/SensitiveWordDataMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/SensitiveWordDataMapper.xml @@ -29,4 +29,12 @@ + + INSERT INTO sensitive_word_data (sensitive_word, type, create_time,create_by,del_flag,remark) + VALUES + + (#{item.sensitiveWord}, #{item.type}, #{item.createTime},#{item.createBy},#{item.delFlag},#{item.remark}) + + + 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 2252586..f5f3792 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 @@ -113,4 +113,15 @@ public class AppUser extends BaseEntity @TableField(exist = false) @ApiModelProperty("密码") private String password; + + /** + * 微信小程序用户唯一标识 + */ + @ApiModelProperty("微信小程序用户唯一标识") + private String openid; + /** + * 微信开放平台全局标识 + */ + @ApiModelProperty("微信开放平台全局标识") + private String unionid; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java index b5bc8c8..6913a49 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java @@ -26,6 +26,14 @@ public class LoginBody * 唯一标识 */ private String uuid; + /** + * 微信加密的手机号数据 + */ + private String encryptedData; + /** + * 加密向量 + */ + private String iv; public String getUsername() { @@ -66,4 +74,20 @@ public class LoginBody { this.uuid = uuid; } + + public String getEncryptedData() { + return encryptedData; + } + + public void setEncryptedData(String encryptedData) { + this.encryptedData = encryptedData; + } + + public String getIv() { + return iv; + } + + public void setIv(String iv) { + this.iv = iv; + } } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java index de54348..998a3a7 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java @@ -2,7 +2,12 @@ package com.ruoyi.framework.web.service; import javax.annotation.Resource; +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.cms.service.IAppUserService; +import com.ruoyi.cms.util.WechatUtil; +import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.AppUser; +import com.ruoyi.common.core.domain.model.LoginBody; import com.ruoyi.common.core.domain.model.LoginSiteUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; @@ -57,6 +62,10 @@ public class SysLoginService @Autowired private TokenSiteService tokenSiteService; + @Autowired + WechatUtil wechatUtil; + @Autowired + private IAppUserService appUserService; /** * 登录验证 * @@ -118,6 +127,24 @@ public class SysLoginService // 生成token return tokenSiteService.createToken(loginSiteUser); } + + /** + * 根据微信生成的 + * @param appUser + * @return + */ + public String loginUserIdApp(AppUser appUser) + { + LoginSiteUser loginSiteUser = new LoginSiteUser(); + loginSiteUser.setUserId(appUser.getUserId()); + loginSiteUser.setUser(appUser); + recordLoginInfo(appUser); + AsyncManager.me().execute(AsyncFactory.recordLogininfor(appUser.getName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); + recordLoginInfo(appUser); + // 生成token + return tokenSiteService.createToken(loginSiteUser); + } + //单点登录 public String loginOss(String ticket) { @@ -209,4 +236,44 @@ public class SysLoginService sysUser.setLoginDate(DateUtils.getNowDate()); userService.updateUserProfile(sysUser); } + + /** + * 小程序微信授权登录 + * @param dto + * @return + */ + public AjaxResult appLogin(LoginBody dto){ + JSONObject sessionInfo = wechatUtil.code2Session("appid", "secret", dto.getCode()); + String openid = sessionInfo.getString("openid"); + String unionid = sessionInfo.getString("unionid"); + String sessionKey = sessionInfo.getString("session_key"); + if (openid == null) { + return AjaxResult.error("微信授权失败"); + } + + JSONObject phoneInfo = wechatUtil.decryptPhoneNumber(dto.getEncryptedData(), sessionKey, dto.getIv()); + String phone = phoneInfo.getString("phoneNumber"); + if (phone == null) { + return AjaxResult.error("获取手机号失败"); + } + + // 3. 检查手机号是否已被绑定 + AppUser existUser = appUserService.getPhone(phone); + if (existUser != null) { + return AjaxResult.error("该手机号已注册"); + } + + // 4. 创建用户并存储所有信息 + AppUser appUser = new AppUser(); + appUser.setOpenid(openid); + appUser.setUnionid(unionid); + appUser.setPhone(phone); + appUserService.insertAppUser(appUser); + + // 5. 生成系统令牌 + AjaxResult ajax = AjaxResult.success(); + String token = loginUserIdApp(appUser); + ajax.put(Constants.TOKEN, token); + return ajax; + } } From 7defcb6158d88837cfd9dff2db614f4e95f7555f Mon Sep 17 00:00:00 2001 From: sh Date: Mon, 20 Oct 2025 10:51:09 +0800 Subject: [PATCH 06/15] =?UTF-8?q?1.=E6=B5=8B=E8=AF=95=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=8E=88=E6=9D=83=E7=99=BB=E5=BD=95=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/framework/web/service/SysLoginService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java index 998a3a7..c0b4f07 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java @@ -243,7 +243,7 @@ public class SysLoginService * @return */ public AjaxResult appLogin(LoginBody dto){ - JSONObject sessionInfo = wechatUtil.code2Session("appid", "secret", dto.getCode()); + JSONObject sessionInfo = wechatUtil.code2Session("wx9d1cbc11c8c40ba7", "38e87cf6251945446e8ac091a0ba9ab2", dto.getCode()); String openid = sessionInfo.getString("openid"); String unionid = sessionInfo.getString("unionid"); String sessionKey = sessionInfo.getString("session_key"); From a4cc7d8dbb685fe5ff1c33fee689ec38e30136fd Mon Sep 17 00:00:00 2001 From: sh Date: Mon, 20 Oct 2025 13:30:09 +0800 Subject: [PATCH 07/15] =?UTF-8?q?app=5Fuser=E6=B7=BB=E5=8A=A0=E6=B0=91?= =?UTF-8?q?=E6=97=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ruoyi/common/core/domain/entity/AppUser.java | 3 +++ 1 file changed, 3 insertions(+) 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 f5f3792..2317024 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 @@ -124,4 +124,7 @@ public class AppUser extends BaseEntity */ @ApiModelProperty("微信开放平台全局标识") private String unionid; + + @ApiModelProperty("民族") + private String nation; } From dcc96bf6899485b8d184a239dda2ada0314cbe38 Mon Sep 17 00:00:00 2001 From: sh Date: Mon, 20 Oct 2025 15:14:44 +0800 Subject: [PATCH 08/15] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=8E=88=E6=9D=83=E7=99=BB=E5=BD=95=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/cms/util/WechatUtil.java | 9 ++++----- .../com/ruoyi/framework/web/service/SysLoginService.java | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java index d55a80e..afe1266 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java @@ -28,8 +28,8 @@ public class WechatUtil { /** * 生成signature **/ - private static String appid = "wx7cab1155e849fe18"; - private static String secret = "0263f34d422d24588d6c2df8f09500ab"; + private static String appid = "wx9d1cbc11c8c40ba7"; + private static String secret = "38e87cf6251945446e8ac091a0ba9ab2"; public AppWechatEntity sign(String url) { Map ret = new HashMap(); String nonceStr = create_nonce_str(); @@ -172,6 +172,7 @@ public class WechatUtil { private String getAccessTokenData(String url) { String str = ""; String result = HttpUtil.get(url, CharsetUtil.CHARSET_UTF_8); + System.out.println("result=============="+result); if (StringUtils.isEmpty(result)) return str; str = parseData("access_token", "expires_in", result); @@ -217,12 +218,10 @@ public class WechatUtil { /** * 通过code获取微信用户的openid和session_key * - * @param appid 小程序appid - * @param secret 小程序secret * @param code 登录凭证code * @return 包含openid、session_key、unionid的JSON对象 */ - public JSONObject code2Session(String appid, String secret, String code) { + public JSONObject code2Session(String code) { try { String response = getAccessTokenData("https://api.weixin.qq.com/sns/jscode2session?appid="+appid+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code"); JSONObject result = JSONObject.parseObject(response); diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java index c0b4f07..d05184e 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java @@ -243,7 +243,7 @@ public class SysLoginService * @return */ public AjaxResult appLogin(LoginBody dto){ - JSONObject sessionInfo = wechatUtil.code2Session("wx9d1cbc11c8c40ba7", "38e87cf6251945446e8ac091a0ba9ab2", dto.getCode()); + JSONObject sessionInfo = wechatUtil.code2Session(dto.getCode()); String openid = sessionInfo.getString("openid"); String unionid = sessionInfo.getString("unionid"); String sessionKey = sessionInfo.getString("session_key"); From c0aa835d19eb6a542ab853f6f16f9988415ff550 Mon Sep 17 00:00:00 2001 From: sh Date: Mon, 20 Oct 2025 17:07:59 +0800 Subject: [PATCH 09/15] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=8E=88=E6=9D=83=E7=99=BB=E5=BD=95=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/cms/util/WechatUtil.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java index afe1266..d43ac00 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java @@ -205,6 +205,20 @@ public class WechatUtil { return tokenConent; } + /** + * 获取appid和session_key + * @param url + * @return + */ + private String getAccessData(String url) { + String str = ""; + String result = HttpUtil.get(url, CharsetUtil.CHARSET_UTF_8); + System.out.println("result=============="+result); + if (StringUtils.isEmpty(result)) + return str; + return result; + } + private String byteToHex(final byte[] hash) { Formatter formatter = new Formatter(); for (byte b : hash) { @@ -223,7 +237,7 @@ public class WechatUtil { */ public JSONObject code2Session(String code) { try { - String response = getAccessTokenData("https://api.weixin.qq.com/sns/jscode2session?appid="+appid+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code"); + String response = getAccessData("https://api.weixin.qq.com/sns/jscode2session?appid="+appid+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code"); JSONObject result = JSONObject.parseObject(response); // 微信返回错误码处理 if (result.containsKey("errcode") && result.getInteger("errcode") != 0) { @@ -250,8 +264,8 @@ public class WechatUtil { byte[] sessionKeyBytes = Base64.getDecoder().decode(sessionKey); byte[] ivBytes = Base64.getDecoder().decode(iv); - // 2. 初始化 AES-128-CBC 解密器(微信固定加密算法) - Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding"); + // 2. 初始化 AES-128-CBC 解密器(使用PKCS5Padding替换PKCS7Padding,两者在AES中效果一致) + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec keySpec = new SecretKeySpec(sessionKeyBytes, "AES"); IvParameterSpec ivSpec = new IvParameterSpec(ivBytes); cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec); From d5473d922c438c7c3315c31e82e932bb521439c6 Mon Sep 17 00:00:00 2001 From: sh Date: Mon, 20 Oct 2025 17:27:45 +0800 Subject: [PATCH 10/15] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=8E=88=E6=9D=83=E7=99=BB=E5=BD=95=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/cms/util/WechatUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java index d43ac00..4c7df25 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java @@ -28,8 +28,8 @@ public class WechatUtil { /** * 生成signature **/ - private static String appid = "wx9d1cbc11c8c40ba7"; - private static String secret = "38e87cf6251945446e8ac091a0ba9ab2"; + private static String appid = "wxee0d0655e464f184"; + private static String secret = "38a71cb90ea12c6b2eee4434ae7932cf"; public AppWechatEntity sign(String url) { Map ret = new HashMap(); String nonceStr = create_nonce_str(); From 418c22d78de7b20e4a872f59e5c3631d0e3b6d49 Mon Sep 17 00:00:00 2001 From: sh Date: Mon, 20 Oct 2025 17:40:24 +0800 Subject: [PATCH 11/15] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=8E=88=E6=9D=83=E7=99=BB=E5=BD=95=E5=8F=82=E6=95=B0-?= =?UTF-8?q?=E5=86=AF=E8=BE=89=E7=9A=84=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/cms/util/WechatUtil.java | 6 ++++-- .../com/ruoyi/framework/web/service/SysLoginService.java | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java index 4c7df25..02b1308 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java @@ -28,8 +28,8 @@ public class WechatUtil { /** * 生成signature **/ - private static String appid = "wxee0d0655e464f184"; - private static String secret = "38a71cb90ea12c6b2eee4434ae7932cf"; + private static String appid = "wx9d1cbc11c8c40ba7"; + private static String secret = "38e87cf6251945446e8ac091a0ba9ab2"; public AppWechatEntity sign(String url) { Map ret = new HashMap(); String nonceStr = create_nonce_str(); @@ -237,6 +237,8 @@ public class WechatUtil { */ public JSONObject code2Session(String code) { try { + System.out.println("appid==============="+appid); + System.out.println("secret================"+secret); String response = getAccessData("https://api.weixin.qq.com/sns/jscode2session?appid="+appid+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code"); JSONObject result = JSONObject.parseObject(response); // 微信返回错误码处理 diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java index d05184e..9fd25c9 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java @@ -3,6 +3,7 @@ package com.ruoyi.framework.web.service; import javax.annotation.Resource; import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson2.JSON; import com.ruoyi.cms.service.IAppUserService; import com.ruoyi.cms.util.WechatUtil; import com.ruoyi.common.core.domain.AjaxResult; @@ -243,6 +244,7 @@ public class SysLoginService * @return */ public AjaxResult appLogin(LoginBody dto){ + System.out.println("小程序微信授权登录---------参数列表========dto========"+ JSON.toJSONString(dto)); JSONObject sessionInfo = wechatUtil.code2Session(dto.getCode()); String openid = sessionInfo.getString("openid"); String unionid = sessionInfo.getString("unionid"); From e56a8a285dd75385112acf0489b3c3b236d50a2b Mon Sep 17 00:00:00 2001 From: sh Date: Mon, 20 Oct 2025 19:49:28 +0800 Subject: [PATCH 12/15] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=8E=88=E6=9D=83=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysLoginController.java | 10 +--- .../com/ruoyi/cms/mapper/AppUserMapper.java | 2 + .../ruoyi/cms/service/IAppUserService.java | 2 + .../cms/service/impl/AppUserServiceImpl.java | 5 ++ .../java/com/ruoyi/cms/util/WechatUtil.java | 9 ++++ .../resources/mapper/app/AppUserMapper.xml | 4 ++ .../common/core/domain/model/LoginBody.java | 12 +++++ .../web/service/SysLoginService.java | 54 +++++++++++-------- 8 files changed, 66 insertions(+), 32 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java index e6cb963..7a87f87 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java @@ -3,8 +3,6 @@ package com.ruoyi.web.controller.system; import java.util.List; import java.util.Set; -import com.ruoyi.common.core.domain.model.LoginSiteUser; -import com.ruoyi.common.utils.SiteSecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import com.ruoyi.common.constant.Constants; @@ -64,13 +62,7 @@ public class SysLoginController public AjaxResult appLogin(@RequestBody LoginBody loginBody) { AjaxResult ajax = AjaxResult.success(); - // 若携带令牌且有效,直接返回 - if (SiteSecurityUtils.isLogin()) { - LoginSiteUser loginSiteUser = SiteSecurityUtils.getLoginUser(); - ajax.put(Constants.TOKEN, loginSiteUser.getToken()); - }else{ - ajax=loginService.appLogin(loginBody); - } + ajax=loginService.appLogin(loginBody); return ajax; } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserMapper.java index 350ed83..213bf58 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserMapper.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserMapper.java @@ -20,4 +20,6 @@ public interface AppUserMapper extends BaseMapper public List selectAppUserList(AppUser appUser); List selectByJobId(Long jobId); + + AppUser selectByOpenid(String openid); } 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 a6b0018..86a208d 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 @@ -52,4 +52,6 @@ public interface IAppUserService public int deleteAppUserByUserIds(Long[] userIds); public AppUser getPhone(String phone); + + AppUser selectByOpenid(String openid); } 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 d8257c8..a3f006e 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 @@ -108,4 +108,9 @@ public class AppUserServiceImpl extends ServiceImpl imple return appUserMapper.selectOne(new LambdaQueryWrapper() .eq(AppUser::getPhone, phone)); } + + @Override + public AppUser selectByOpenid(String openid) { + return appUserMapper.selectByOpenid(openid); + } } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java index 02b1308..02d0352 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java @@ -266,6 +266,15 @@ public class WechatUtil { byte[] sessionKeyBytes = Base64.getDecoder().decode(sessionKey); byte[] ivBytes = Base64.getDecoder().decode(iv); + // 2. 验证session_key长度(AES-128要求密钥长度为16字节) + if (sessionKeyBytes.length != 16) { + throw new RuntimeException("session_key长度错误,应为16字节"); + } + // 验证iv长度(CBC模式下iv长度必须与块大小一致,AES为16字节) + if (ivBytes.length != 16) { + throw new RuntimeException("iv长度错误,应为16字节"); + } + // 2. 初始化 AES-128-CBC 解密器(使用PKCS5Padding替换PKCS7Padding,两者在AES中效果一致) Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec keySpec = new SecretKeySpec(sessionKeyBytes, "AES"); diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml index 113c900..31d6f58 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml @@ -62,4 +62,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" INNER JOIN JOB_APPLY ja ON ja.USER_ID = au.USER_ID WHERE au.DEL_FLAG = '0' AND ja.DEL_FLAG = '0' AND ja.JOB_Id = #{jobId}) + + \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java index 6913a49..8315942 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java @@ -34,6 +34,10 @@ public class LoginBody * 加密向量 */ private String iv; + /** + * 0企业,1求职者 + */ + private String userType; public String getUsername() { @@ -90,4 +94,12 @@ public class LoginBody public void setIv(String iv) { this.iv = iv; } + + public String getUserType() { + return userType; + } + + public void setUserType(String userType) { + this.userType = userType; + } } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java index 9fd25c9..fbbed68 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java @@ -244,6 +244,7 @@ public class SysLoginService * @return */ public AjaxResult appLogin(LoginBody dto){ + AjaxResult ajax = AjaxResult.success(); System.out.println("小程序微信授权登录---------参数列表========dto========"+ JSON.toJSONString(dto)); JSONObject sessionInfo = wechatUtil.code2Session(dto.getCode()); String openid = sessionInfo.getString("openid"); @@ -252,30 +253,37 @@ public class SysLoginService if (openid == null) { return AjaxResult.error("微信授权失败"); } + //验证是否登录过 + AppUser existingUser=appUserService.selectByOpenid(openid); + if(existingUser!=null){ + String token = loginUserIdApp(existingUser); + ajax.put(Constants.TOKEN, token); + return ajax; + }else { + JSONObject phoneInfo = wechatUtil.decryptPhoneNumber(dto.getEncryptedData(), sessionKey, dto.getIv()); + String phone = phoneInfo.getString("phoneNumber"); + if (phone == null) { + return AjaxResult.error("获取手机号失败"); + } - JSONObject phoneInfo = wechatUtil.decryptPhoneNumber(dto.getEncryptedData(), sessionKey, dto.getIv()); - String phone = phoneInfo.getString("phoneNumber"); - if (phone == null) { - return AjaxResult.error("获取手机号失败"); + // 3. 检查手机号是否已被绑定 + AppUser existUser = appUserService.getPhone(phone); + if (existUser != null) { + return AjaxResult.error("该手机号已注册"); + } + + // 4. 创建用户并存储所有信息 + AppUser appUser = new AppUser(); + appUser.setOpenid(openid); + appUser.setUnionid(unionid); + appUser.setPhone(phone); + appUser.setIsCompanyUser(dto.getUserType());//保存角色 + appUserService.insertAppUser(appUser); + + // 5. 生成系统令牌 + String token = loginUserIdApp(appUser); + ajax.put(Constants.TOKEN, token); + return ajax; } - - // 3. 检查手机号是否已被绑定 - AppUser existUser = appUserService.getPhone(phone); - if (existUser != null) { - return AjaxResult.error("该手机号已注册"); - } - - // 4. 创建用户并存储所有信息 - AppUser appUser = new AppUser(); - appUser.setOpenid(openid); - appUser.setUnionid(unionid); - appUser.setPhone(phone); - appUserService.insertAppUser(appUser); - - // 5. 生成系统令牌 - AjaxResult ajax = AjaxResult.success(); - String token = loginUserIdApp(appUser); - ajax.put(Constants.TOKEN, token); - return ajax; } } From 44ec48c49d24b6411d72457aa4c6477e28a61b94 Mon Sep 17 00:00:00 2001 From: sh Date: Tue, 21 Oct 2025 13:01:34 +0800 Subject: [PATCH 13/15] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3-1.=E4=BF=9D=E5=AD=98=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E8=81=94=E7=B3=BB2.=E4=BF=9D=E5=AD=98=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E7=BB=8F=E5=8E=86=E5=92=8C=E7=94=A8=E6=88=B7=E6=8A=80=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/app/AppSkillController.java | 81 +++++++++++++++++++ .../app/AppUserWorkExperiencesController.java | 2 +- .../cms/CompanyContactController.java | 2 +- .../cms/UserWorkExperiencesController.java | 2 +- .../java/com/ruoyi/cms/domain/Company.java | 1 + .../com/ruoyi/cms/mapper/AppSkillMapper.java | 20 +++++ .../cms/mapper/CompanyContactMapper.java | 4 +- .../cms/mapper/UserWorkExperiencesMapper.java | 4 +- .../ruoyi/cms/service/AppSkillService.java | 26 ++++++ .../cms/service/CompanyContactService.java | 2 +- .../service/UserWorkExperiencesService.java | 2 +- .../cms/service/impl/AppSkillServiceImpl.java | 43 ++++++++++ .../cms/service/impl/AppUserServiceImpl.java | 23 +++++- .../impl/CompanyContactServiceImpl.java | 2 +- .../cms/service/impl/CompanyServiceImpl.java | 1 + .../impl/UserWorkExperiencesServiceImpl.java | 2 +- .../java/com/ruoyi/cms/util/WechatUtil.java | 4 +- .../resources/mapper/app/AppSkillMapper.xml | 45 +++++++++++ .../mapper/app/CompanyContactMapper.xml | 13 +++ .../mapper/app/UserWorkExperiencesMapper.xml | 13 +++ .../common/core/domain/entity/AppSkill.java | 46 +++++++++++ .../common/core/domain/entity/AppUser.java | 12 +++ .../core/domain/entity}/CompanyContact.java | 2 +- .../domain/entity}/UserWorkExperiences.java | 2 +- .../web/service/SysLoginService.java | 2 + 25 files changed, 341 insertions(+), 15 deletions(-) create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppSkillController.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppSkillMapper.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/AppSkillService.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppSkillServiceImpl.java create mode 100644 ruoyi-bussiness/src/main/resources/mapper/app/AppSkillMapper.xml create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppSkill.java rename {ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain => ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity}/CompanyContact.java (95%) rename {ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain => ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity}/UserWorkExperiences.java (96%) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppSkillController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppSkillController.java new file mode 100644 index 0000000..f4ea8b2 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppSkillController.java @@ -0,0 +1,81 @@ +package com.ruoyi.cms.controller.app; + + +import com.ruoyi.cms.service.AppSkillService; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.AppSkill; +import com.ruoyi.common.core.page.TableDataInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + + +import java.util.List; + + +/** + * 用户技能信息 + * + * @author + * @email + * @date 2025-10-21 12:22:09 + */ +@RestController +@RequestMapping("/appskill/list") +@Api(tags = "移动端:用户技能") +public class AppSkillController extends BaseController { + @Autowired + private AppSkillService appSkillService; + + /** + * 列表 + */ + @ApiOperation("获取工作经历详细信息") + @GetMapping("/list") + public TableDataInfo list(AppSkill appSkill){ + startPage(); + List list=appSkillService.getList(appSkill); + return getDataTable(list); + } + + + /** + * 信息 + */ + @ApiOperation("获取工作经历详细信息") + @GetMapping(value = "/{id}") + public AjaxResult info(@PathVariable("id") Long id){ + return success(appSkillService.getAppskillById(id)); + } + + /** + * 保存 + */ + @ApiOperation("获取工作经历详细信息") + @PostMapping("/add") + public AjaxResult save(@RequestBody AppSkill appSkill){ + return toAjax(appSkillService.insertAppskill(appSkill)); + } + + /** + * 修改 + */ + @ApiOperation("获取工作经历详细信息") + @PutMapping("/edit") + public AjaxResult update(@RequestBody AppSkill appSkill){ + return toAjax(appSkillService.updateAppskillById(appSkill)); + } + + /** + * 删除 + */ + @ApiOperation("获取工作经历详细信息") + @DeleteMapping("/{id}") + public AjaxResult delete(@ApiParam("主键id") @PathVariable Long id){ + return toAjax(appSkillService.removeAppskillIds(new Long[]{id})); + } + +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserWorkExperiencesController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserWorkExperiencesController.java index 79b32c3..4978138 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserWorkExperiencesController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserWorkExperiencesController.java @@ -1,6 +1,6 @@ package com.ruoyi.cms.controller.app; -import com.ruoyi.cms.domain.UserWorkExperiences; +import com.ruoyi.common.core.domain.entity.UserWorkExperiences; import com.ruoyi.cms.service.UserWorkExperiencesService; 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/CompanyContactController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CompanyContactController.java index f6949b5..c3d55c9 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CompanyContactController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CompanyContactController.java @@ -1,7 +1,7 @@ package com.ruoyi.cms.controller.cms; -import com.ruoyi.cms.domain.CompanyContact; +import com.ruoyi.common.core.domain.entity.CompanyContact; import com.ruoyi.cms.service.CompanyContactService; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.page.TableDataInfo; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/UserWorkExperiencesController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/UserWorkExperiencesController.java index babee3a..2f75a41 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/UserWorkExperiencesController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/UserWorkExperiencesController.java @@ -1,6 +1,6 @@ package com.ruoyi.cms.controller.cms; -import com.ruoyi.cms.domain.UserWorkExperiences; +import com.ruoyi.common.core.domain.entity.UserWorkExperiences; import com.ruoyi.cms.service.UserWorkExperiencesService; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Company.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Company.java index bd9a88a..30a0164 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Company.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Company.java @@ -1,6 +1,7 @@ package com.ruoyi.cms.domain; import com.baomidou.mybatisplus.annotation.*; +import com.ruoyi.common.core.domain.entity.CompanyContact; import lombok.Data; import com.ruoyi.common.annotation.Excel; import io.swagger.annotations.ApiModel; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppSkillMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppSkillMapper.java new file mode 100644 index 0000000..b1b411a --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppSkillMapper.java @@ -0,0 +1,20 @@ +package com.ruoyi.cms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.core.domain.entity.AppSkill; + +import java.util.List; + +/** + * 用户技能信息 + * + * @author + * @email + * @date 2025-10-21 12:22:09 + */ +public interface AppSkillMapper extends BaseMapper { + + List getList(AppSkill appSkill); + + int batchInsert(List list); +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/CompanyContactMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/CompanyContactMapper.java index c08f5f2..7508f65 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/CompanyContactMapper.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/CompanyContactMapper.java @@ -1,7 +1,7 @@ package com.ruoyi.cms.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.ruoyi.cms.domain.CompanyContact; +import com.ruoyi.common.core.domain.entity.CompanyContact; import java.util.List; @@ -15,4 +15,6 @@ import java.util.List; public interface CompanyContactMapper extends BaseMapper { List getSelectList(CompanyContact companyContact); + + int batchInsert(List list); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/UserWorkExperiencesMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/UserWorkExperiencesMapper.java index befeedc..b483ecd 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/UserWorkExperiencesMapper.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/UserWorkExperiencesMapper.java @@ -1,7 +1,7 @@ package com.ruoyi.cms.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.ruoyi.cms.domain.UserWorkExperiences; +import com.ruoyi.common.core.domain.entity.UserWorkExperiences; import java.util.List; @@ -15,4 +15,6 @@ import java.util.List; public interface UserWorkExperiencesMapper extends BaseMapper { List getWorkExperiencesList(UserWorkExperiences userWorkExperiences); + + int batchInsert(List list); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/AppSkillService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/AppSkillService.java new file mode 100644 index 0000000..147d004 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/AppSkillService.java @@ -0,0 +1,26 @@ +package com.ruoyi.cms.service; + +import com.ruoyi.common.core.domain.entity.AppSkill; + +import java.util.List; + +/** + * 用户技能信息 + * + * @author + * @email + * @date 2025-10-21 12:22:09 + */ +public interface AppSkillService{ + + List getList(AppSkill appSkill); + + int insertAppskill(AppSkill appSkill); + + int updateAppskillById(AppSkill appSkill); + + int removeAppskillIds(Long[] ids); + + AppSkill getAppskillById(Long id); +} + diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/CompanyContactService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/CompanyContactService.java index 9830129..a1d5f3c 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/CompanyContactService.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/CompanyContactService.java @@ -1,6 +1,6 @@ package com.ruoyi.cms.service; -import com.ruoyi.cms.domain.CompanyContact; +import com.ruoyi.common.core.domain.entity.CompanyContact; import java.util.List; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/UserWorkExperiencesService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/UserWorkExperiencesService.java index 9812c29..4b52e6e 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/UserWorkExperiencesService.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/UserWorkExperiencesService.java @@ -1,6 +1,6 @@ package com.ruoyi.cms.service; -import com.ruoyi.cms.domain.UserWorkExperiences; +import com.ruoyi.common.core.domain.entity.UserWorkExperiences; import java.util.List; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppSkillServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppSkillServiceImpl.java new file mode 100644 index 0000000..2dd3a65 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppSkillServiceImpl.java @@ -0,0 +1,43 @@ +package com.ruoyi.cms.service.impl; + +import com.ruoyi.cms.mapper.AppSkillMapper; +import com.ruoyi.cms.service.AppSkillService; +import com.ruoyi.common.core.domain.entity.AppSkill; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Arrays; +import java.util.List; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + + +@Service +public class AppSkillServiceImpl extends ServiceImpl implements AppSkillService { + + @Autowired + AppSkillMapper appSkillMapper; + + public List getList(AppSkill appSkill){ + return appSkillMapper.getList(appSkill); + } + + @Override + public int insertAppskill(AppSkill appSkill) { + return appSkillMapper.insert(appSkill); + } + + @Override + public int updateAppskillById(AppSkill appSkill) { + return appSkillMapper.updateById(appSkill); + } + + @Override + public int removeAppskillIds(Long[] ids) { + return appSkillMapper.deleteBatchIds(Arrays.asList(ids)); + } + + @Override + public AppSkill getAppskillById(Long id) { + return appSkillMapper.selectById(id); + } +} 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 a3f006e..c5c2b9c 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 @@ -5,14 +5,13 @@ import java.util.Arrays; import java.util.stream.Collectors; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.ruoyi.cms.mapper.JobTitleMapper; +import com.ruoyi.cms.mapper.*; import com.ruoyi.cms.util.StringUtil; import com.ruoyi.common.core.domain.entity.JobTitle; import com.ruoyi.common.utils.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; -import com.ruoyi.cms.mapper.AppUserMapper; import com.ruoyi.common.core.domain.entity.AppUser; import com.ruoyi.cms.service.IAppUserService; @@ -29,6 +28,12 @@ public class AppUserServiceImpl extends ServiceImpl imple private AppUserMapper appUserMapper; @Autowired private JobTitleMapper jobTitleMapper; + @Autowired + private CompanyContactMapper companyContactMapper; + @Autowired + private UserWorkExperiencesMapper userWorkExperiencesMapper; + @Autowired + private AppSkillMapper appSkillMapper; /** * 查询APP用户 * @@ -88,6 +93,20 @@ public class AppUserServiceImpl extends ServiceImpl imple @Override public int updateAppUser(AppUser appUser) { + switch (appUser.getIsCompanyUser()){ + case "0"://企业 + if(appUser.getContactsList()!=null){ + companyContactMapper.batchInsert(appUser.getContactsList()); + } + break; + default://求职者 + if(appUser.getExperiencesList()!=null){ + userWorkExperiencesMapper.batchInsert(appUser.getExperiencesList()); + } + if(appUser.getAppSkillsList()!=null){ + appSkillMapper.batchInsert(appUser.getAppSkillsList()); + } + } return appUserMapper.updateById(appUser); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyContactServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyContactServiceImpl.java index b2909a9..8768587 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyContactServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyContactServiceImpl.java @@ -1,6 +1,6 @@ package com.ruoyi.cms.service.impl; -import com.ruoyi.cms.domain.CompanyContact; +import com.ruoyi.common.core.domain.entity.CompanyContact; import com.ruoyi.cms.mapper.CompanyContactMapper; import com.ruoyi.cms.service.CompanyContactService; import org.springframework.beans.factory.annotation.Autowired; 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 801116a..c0748b3 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 @@ -10,6 +10,7 @@ import com.ruoyi.cms.domain.*; import com.ruoyi.cms.domain.query.LabelQuery; import com.ruoyi.cms.mapper.*; import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.entity.CompanyContact; import com.ruoyi.common.core.domain.model.LoginSiteUser; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.exception.ServiceException; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/UserWorkExperiencesServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/UserWorkExperiencesServiceImpl.java index feef848..7813f95 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/UserWorkExperiencesServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/UserWorkExperiencesServiceImpl.java @@ -1,6 +1,6 @@ package com.ruoyi.cms.service.impl; -import com.ruoyi.cms.domain.UserWorkExperiences; +import com.ruoyi.common.core.domain.entity.UserWorkExperiences; import com.ruoyi.cms.mapper.UserWorkExperiencesMapper; import com.ruoyi.cms.service.UserWorkExperiencesService; import org.springframework.beans.factory.annotation.Autowired; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java index 02d0352..7d92d52 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/WechatUtil.java @@ -28,8 +28,8 @@ public class WechatUtil { /** * 生成signature **/ - private static String appid = "wx9d1cbc11c8c40ba7"; - private static String secret = "38e87cf6251945446e8ac091a0ba9ab2"; + private static String appid = "wxee0d0655e464f184"; + private static String secret = "38a71cb90ea12c6b2eee4434ae7932cf"; public AppWechatEntity sign(String url) { Map ret = new HashMap(); String nonceStr = create_nonce_str(); diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/AppSkillMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/AppSkillMapper.xml new file mode 100644 index 0000000..eb08ef3 --- /dev/null +++ b/ruoyi-bussiness/src/main/resources/mapper/app/AppSkillMapper.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + select id, user_id, name, levels, del_flag, create_by, create_time, update_by, update_time, remark from app_skill + + + + + + INSERT INTO app_skill ( + user_id, name, levels, create_by, create_time, del_flag + ) VALUES + + ( + #{item.userId}, #{item.name}, #{item.levels}, + #{item.createBy}, #{item.createTime}, #{item.delFlag} + ) + + + + diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/CompanyContactMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/CompanyContactMapper.xml index 3c498b3..9b89186 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/CompanyContactMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/CompanyContactMapper.xml @@ -36,4 +36,17 @@ + + INSERT INTO company_contact ( + company_id, contact_person, contact_person_phone, + create_by, create_time, del_flag,remark + ) VALUES + + ( + #{item.companyId}, #{item.contactPerson}, #{item.contactPersonPhone}, + #{item.createBy}, #{item.createTime}, #{item.delFlag},#{item.remark} + ) + + + diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/UserWorkExperiencesMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/UserWorkExperiencesMapper.xml index c20534f..2c202c0 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/UserWorkExperiencesMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/UserWorkExperiencesMapper.xml @@ -35,4 +35,17 @@ + + INSERT INTO user_work_experiences ( + company_name, position, user_id, start_date, end_date, description, + create_by, create_time, del_flag,remark + ) VALUES + + ( + #{item.companyName}, #{item.position}, #{item.userId},#{item.startDate},#{item.endDate}, + #{item.description},#{item.createBy}, #{item.createTime}, #{item.delFlag},#{item.remark} + ) + + + diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppSkill.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppSkill.java new file mode 100644 index 0000000..cd260a9 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppSkill.java @@ -0,0 +1,46 @@ +package com.ruoyi.common.core.domain.entity; + +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.ApiModelProperty; +import lombok.Data; + +/** + * 用户技能信息 + * + * @author + * @email + * @date 2025-10-21 12:22:09 + */ +@Data +@TableName("app_skill") +public class AppSkill extends BaseEntity { + @TableField(exist = false) + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "user_id",type = IdType.AUTO) + @ApiModelProperty("用户ID") + private Long id; + /** + * 用户id + */ + @ApiModelProperty("用户id") + private Long userId; + /** + * 技能名称 + */ + @ApiModelProperty("技能名称") + private String name; + /** + * 技能等级 + */ + @ApiModelProperty("技能等级") + private String levels; +} 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 2317024..c5ee15b 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 @@ -127,4 +127,16 @@ public class AppUser extends BaseEntity @ApiModelProperty("民族") private String nation; + + @TableField(exist = false) + @ApiModelProperty("工作经历列表") + private List experiencesList; + + @TableField(exist = false) + @ApiModelProperty("公司联系人列表") + private List contactsList; + + @TableField(exist = false) + @ApiModelProperty("技能列表") + private List appSkillsList; } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/CompanyContact.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/CompanyContact.java similarity index 95% rename from ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/CompanyContact.java rename to ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/CompanyContact.java index 3ddbf52..7a9f301 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/CompanyContact.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/CompanyContact.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; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/UserWorkExperiences.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/UserWorkExperiences.java similarity index 96% rename from ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/UserWorkExperiences.java rename to ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/UserWorkExperiences.java index 223b8af..d91c76b 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/UserWorkExperiences.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/UserWorkExperiences.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; diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java index fbbed68..91aa519 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java @@ -258,6 +258,7 @@ public class SysLoginService if(existingUser!=null){ String token = loginUserIdApp(existingUser); ajax.put(Constants.TOKEN, token); + ajax.put("isNewUser", false); return ajax; }else { JSONObject phoneInfo = wechatUtil.decryptPhoneNumber(dto.getEncryptedData(), sessionKey, dto.getIv()); @@ -283,6 +284,7 @@ public class SysLoginService // 5. 生成系统令牌 String token = loginUserIdApp(appUser); ajax.put(Constants.TOKEN, token); + ajax.put("isNewUser", true); return ajax; } } From a6b5c06e63811c85e35f0bbed4fefda36913e540 Mon Sep 17 00:00:00 2001 From: sh Date: Tue, 21 Oct 2025 14:49:58 +0800 Subject: [PATCH 14/15] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3-1.=E4=BF=9D=E5=AD=98pc=E7=AB=AFsys=5Fuser?= =?UTF-8?q?=E5=92=8Csys=5Fuser=5Frole?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysUserController.java | 2 +- .../controller/app/AppCompanyController.java | 2 +- .../cms/controller/app/AppUserController.java | 10 +-- .../cms/controller/cms/CompanyController.java | 4 +- .../com/ruoyi/cms/domain/ESJobDocument.java | 1 + .../main/java/com/ruoyi/cms/domain/Job.java | 1 + .../java/com/ruoyi/cms/domain/JobFair.java | 1 + .../com/ruoyi/cms/mapper/AppUserMapper.java | 7 ++ .../cms/mapper/CompanyCollectionMapper.java | 2 +- .../com/ruoyi/cms/mapper/CompanyMapper.java | 2 +- .../java/com/ruoyi/cms/mapper/JobMapper.java | 4 +- .../ruoyi/cms/service/IAppUserService.java | 3 + .../service/ICompanyCollectionService.java | 2 +- .../ruoyi/cms/service/ICompanyService.java | 4 +- .../cms/service/IFairCollectionService.java | 1 - .../cms/service/impl/AppUserServiceImpl.java | 71 +++++++++++++++---- .../impl/CompanyCollectionServiceImpl.java | 2 +- .../cms/service/impl/CompanyServiceImpl.java | 3 +- .../impl/FairCollectionServiceImpl.java | 1 - .../cms/service/impl/JobFairServiceImpl.java | 1 + .../cms/service/impl/JobServiceImpl.java | 1 + .../resources/mapper/app/AppUserMapper.xml | 37 ++++++++++ .../mapper/app/CompanyCollectionMapper.xml | 2 +- .../main/resources/mapper/app/JobMapper.xml | 2 +- .../common/core/domain/entity/AppUser.java | 12 ---- .../common/core/domain/entity}/Company.java | 3 +- .../core/domain/model/RegisterBody.java | 18 +++++ 27 files changed, 147 insertions(+), 52 deletions(-) rename {ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain => ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity}/Company.java (97%) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java index 2cd27d5..c267953 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.stream.Collectors; import javax.servlet.http.HttpServletResponse; -import com.ruoyi.cms.domain.Company; +import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.cms.service.ICompanyService; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.ArrayUtils; 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 dc0f678..b726c81 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,7 +1,7 @@ package com.ruoyi.cms.controller.app; -import com.ruoyi.cms.domain.Company; +import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.cms.domain.CompanyCard; import com.ruoyi.cms.domain.query.LabelQuery; import com.ruoyi.cms.mapper.CompanyCardMapper; 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 b9f650c..b7c4976 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 @@ -1,7 +1,7 @@ package com.ruoyi.cms.controller.app; import com.ruoyi.common.core.domain.entity.AppUser; -import com.ruoyi.cms.domain.Company; +import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.cms.domain.Job; import com.ruoyi.cms.domain.JobFair; import com.ruoyi.cms.domain.query.MineJobQuery; @@ -9,6 +9,7 @@ import com.ruoyi.cms.service.*; 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.domain.model.RegisterBody; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.utils.SiteSecurityUtils; import io.swagger.annotations.Api; @@ -48,10 +49,11 @@ public class AppUserController extends BaseController @ApiOperation("保存简历") @PostMapping("/resume") @BussinessLog(title = "保存简历") - public AjaxResult saveResume(@RequestBody AppUser appUser) + public AjaxResult saveResume(@RequestBody RegisterBody registerBody) { - appUser.setUserId(SiteSecurityUtils.getUserId()); - appUserService.updateAppUser(appUser); + /*appUser.setUserId(SiteSecurityUtils.getUserId());//AppUser appUser + appUserService.updateAppUser(appUser);*/ + appUserService.registerAppUser(registerBody); return AjaxResult.success(); } @ApiOperation("查看简历") 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 5e6fa82..58574f8 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 @@ -1,8 +1,7 @@ package com.ruoyi.cms.controller.cms; -import com.ruoyi.cms.domain.Company; -import com.ruoyi.cms.service.ICompanyCollectionService; +import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.cms.service.ICompanyService; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; @@ -12,7 +11,6 @@ import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; 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 7fed79f..fe63a98 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 @@ -2,6 +2,7 @@ package com.ruoyi.cms.domain; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.ruoyi.common.core.domain.entity.Company; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.dromara.easyes.annotation.IndexField; 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 5910510..ed58037 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 @@ -8,6 +8,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.domain.entity.Company; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/JobFair.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/JobFair.java index 66bbc85..3f18333 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/JobFair.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/JobFair.java @@ -5,6 +5,7 @@ import java.util.Date; import java.util.List; import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.domain.entity.Company; import lombok.Data; import com.ruoyi.common.annotation.Excel; import io.swagger.annotations.ApiModel; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserMapper.java index 213bf58..229d4bb 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserMapper.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserMapper.java @@ -2,7 +2,10 @@ package com.ruoyi.cms.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import java.util.List; +import java.util.Map; + import com.ruoyi.common.core.domain.entity.AppUser; +import com.ruoyi.common.core.domain.entity.SysUser; /** * APP用户Mapper接口 @@ -22,4 +25,8 @@ public interface AppUserMapper extends BaseMapper List selectByJobId(Long jobId); AppUser selectByOpenid(String openid); + + int insertSysUserRole(Map map); + + int insertSysUser(SysUser sysUser); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/CompanyCollectionMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/CompanyCollectionMapper.java index 6dc96b5..59f1e5d 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/CompanyCollectionMapper.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/CompanyCollectionMapper.java @@ -3,7 +3,7 @@ package com.ruoyi.cms.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import java.util.List; -import com.ruoyi.cms.domain.Company; +import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.cms.domain.CompanyCollection; /** 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 f22afbf..b21e1e9 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 @@ -2,7 +2,7 @@ package com.ruoyi.cms.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import java.util.List; -import com.ruoyi.cms.domain.Company; +import com.ruoyi.common.core.domain.entity.Company; import org.apache.ibatis.annotations.Param; /** diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/JobMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/JobMapper.java index 6bb8772..d6cc804 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/JobMapper.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/JobMapper.java @@ -4,13 +4,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import java.util.List; import java.util.Map; -import com.ruoyi.cms.domain.Company; +import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.cms.domain.Job; import com.ruoyi.cms.domain.RowWork; import com.ruoyi.cms.domain.VectorJob; import com.ruoyi.cms.domain.query.ESJobSearch; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.data.repository.query.Param; /** * 岗位Mapper接口 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 86a208d..997e078 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 @@ -2,6 +2,7 @@ package com.ruoyi.cms.service; import java.util.List; import com.ruoyi.common.core.domain.entity.AppUser; +import com.ruoyi.common.core.domain.model.RegisterBody; /** * APP用户Service接口 @@ -54,4 +55,6 @@ public interface IAppUserService public AppUser getPhone(String phone); AppUser selectByOpenid(String openid); + + public int registerAppUser(RegisterBody registerBody); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/ICompanyCollectionService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/ICompanyCollectionService.java index d5a55b6..839ad93 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/ICompanyCollectionService.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/ICompanyCollectionService.java @@ -2,7 +2,7 @@ package com.ruoyi.cms.service; import java.util.List; -import com.ruoyi.cms.domain.Company; +import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.cms.domain.CompanyCollection; import com.ruoyi.cms.domain.Job; 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 ab77524..a8ee6be 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 @@ -1,11 +1,9 @@ package com.ruoyi.cms.service; -import java.util.HashMap; import java.util.List; -import com.ruoyi.cms.domain.Company; +import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.cms.domain.CompanyCard; import com.ruoyi.cms.domain.query.LabelQuery; -import com.ruoyi.common.core.page.PageDomain; /** * 公司Service接口 diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IFairCollectionService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IFairCollectionService.java index b9f81da..31a7fd7 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IFairCollectionService.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IFairCollectionService.java @@ -1,7 +1,6 @@ package com.ruoyi.cms.service; -import com.ruoyi.cms.domain.Company; import com.ruoyi.cms.domain.FairCollection; import com.ruoyi.cms.domain.JobFair; 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 c5c2b9c..ec2edd6 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 @@ -1,13 +1,19 @@ package com.ruoyi.cms.service.impl; +import java.util.HashMap; import java.util.List; import java.util.Arrays; +import java.util.Map; import java.util.stream.Collectors; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.cms.mapper.*; import com.ruoyi.cms.util.StringUtil; import com.ruoyi.common.core.domain.entity.JobTitle; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.RegisterBody; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.SiteSecurityUtils; import com.ruoyi.common.utils.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -34,6 +40,8 @@ public class AppUserServiceImpl extends ServiceImpl imple private UserWorkExperiencesMapper userWorkExperiencesMapper; @Autowired private AppSkillMapper appSkillMapper; + @Autowired + private CompanyMapper companyMapper; /** * 查询APP用户 * @@ -93,20 +101,6 @@ public class AppUserServiceImpl extends ServiceImpl imple @Override public int updateAppUser(AppUser appUser) { - switch (appUser.getIsCompanyUser()){ - case "0"://企业 - if(appUser.getContactsList()!=null){ - companyContactMapper.batchInsert(appUser.getContactsList()); - } - break; - default://求职者 - if(appUser.getExperiencesList()!=null){ - userWorkExperiencesMapper.batchInsert(appUser.getExperiencesList()); - } - if(appUser.getAppSkillsList()!=null){ - appSkillMapper.batchInsert(appUser.getAppSkillsList()); - } - } return appUserMapper.updateById(appUser); } @@ -132,4 +126,53 @@ public class AppUserServiceImpl extends ServiceImpl imple public AppUser selectByOpenid(String openid) { return appUserMapper.selectByOpenid(openid); } + + @Override + public int registerAppUser(RegisterBody registerBody) { + AppUser appUser=registerBody.getAppUser(); + appUser.setUserId(SiteSecurityUtils.getUserId()); + //角色集合 + Map mapUserRole=new HashMap<>(); + switch (appUser.getIsCompanyUser()){ + case "0"://企业 + if(registerBody.getCompany()!=null){ + Long companyId=registerBody.getCompany().getCompanyId(); + if(companyId==null){ + companyMapper.insert(registerBody.getCompany()); + registerBody.getCompany().getCompanyContactList().forEach(it->{ + it.setCompanyId(registerBody.getCompany().getCompanyId()); + }); + } + if(registerBody.getCompany().getCompanyContactList()!=null){ + companyContactMapper.batchInsert(registerBody.getCompany().getCompanyContactList()); + } + } + mapUserRole.put("roleId",100); + break; + default://求职者 + if(registerBody.getExperiencesList()!=null){ + userWorkExperiencesMapper.batchInsert(registerBody.getExperiencesList()); + } + if(registerBody.getAppSkillsList()!=null){ + appSkillMapper.batchInsert(registerBody.getAppSkillsList()); + } + mapUserRole.put("roleId",1); + } + //保存sys_user + SysUser sysUser=new SysUser(); + sysUser.setUserId(appUser.getUserId()); + sysUser.setUserName(appUser.getPhone()); + sysUser.setNickName(appUser.getName()); + sysUser.setPassword(SecurityUtils.encryptPassword("123456")); + sysUser.setPhonenumber(appUser.getPhone()); + sysUser.setSex(appUser.getSex()); + sysUser.setStatus("0"); + sysUser.setLoginIp(appUser.getLoginIp()); + sysUser.setLoginDate(appUser.getLoginDate()); + appUserMapper.insertSysUser(sysUser); + //保存sys_user_role + mapUserRole.put("userId",appUser.getUserId()); + appUserMapper.insertSysUserRole(mapUserRole); + return appUserMapper.updateById(appUser); + } } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyCollectionServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyCollectionServiceImpl.java index 94d6b84..657891c 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyCollectionServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyCollectionServiceImpl.java @@ -5,7 +5,7 @@ import java.util.Arrays; import java.util.stream.Collectors; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.ruoyi.cms.domain.Company; +import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.cms.domain.Job; import com.ruoyi.cms.mapper.JobMapper; import com.ruoyi.common.utils.SiteSecurityUtils; 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 c0748b3..30faee2 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 @@ -10,6 +10,7 @@ import com.ruoyi.cms.domain.*; import com.ruoyi.cms.domain.query.LabelQuery; import com.ruoyi.cms.mapper.*; import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.common.core.domain.entity.CompanyContact; import com.ruoyi.common.core.domain.model.LoginSiteUser; import com.ruoyi.common.core.domain.model.LoginUser; @@ -34,7 +35,7 @@ import com.ruoyi.cms.service.ICompanyService; * @date 2024-09-04 */ @Service -public class CompanyServiceImpl extends ServiceImpl implements ICompanyService +public class CompanyServiceImpl extends ServiceImpl implements ICompanyService { @Autowired private CompanyMapper companyMapper; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/FairCollectionServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/FairCollectionServiceImpl.java index f0d0fae..627a1fd 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/FairCollectionServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/FairCollectionServiceImpl.java @@ -2,7 +2,6 @@ package com.ruoyi.cms.service.impl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ruoyi.cms.domain.Company; import com.ruoyi.cms.domain.FairCollection; import com.ruoyi.cms.domain.JobFair; import com.ruoyi.cms.mapper.FairCollectionMapper; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobFairServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobFairServiceImpl.java index 748634a..2e83d78 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobFairServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobFairServiceImpl.java @@ -9,6 +9,7 @@ import com.ruoyi.cms.mapper.CompanyMapper; import com.ruoyi.cms.mapper.FairCollectionMapper; import com.ruoyi.cms.mapper.FairCompanyMapper; import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SiteSecurityUtils; import org.springframework.beans.factory.annotation.Autowired; 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 17ea466..e477153 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 @@ -16,6 +16,7 @@ import com.ruoyi.cms.service.*; import com.ruoyi.cms.util.*; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.TreeSelect; +import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.common.core.domain.entity.JobTitle; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.exception.ServiceException; diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml index 31d6f58..35e6c74 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml @@ -66,4 +66,41 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + insert into sys_user_role (user_id,role_id) values (#{userId},#{roleId}) + + + + insert into sys_user( + user_id, + dept_id, + user_name, + nick_name, + email, + avatar, + phonenumber, + sex, + password, + status, + create_by, + remark, + create_time + )values( + #{userId}, + #{deptId}, + #{userName}, + #{nickName}, + #{email}, + #{avatar}, + #{phonenumber}, + #{sex}, + #{password}, + #{status}, + #{createBy}, + #{remark}, + sysdate() + ) + + \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/CompanyCollectionMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/CompanyCollectionMapper.xml index 8f597f5..47f145e 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/CompanyCollectionMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/CompanyCollectionMapper.xml @@ -27,7 +27,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and user_id = #{userId} - select * from company where 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 3559467..9136b3c 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml @@ -194,7 +194,7 @@ Collect_time, ClearFlag, Province, City, County, importdate, YearMonth, IsRepeat, latitude, longitude,Std_class as JobCategory from row_work - SELECT * FROM ( SELECT 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 c5ee15b..2317024 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 @@ -127,16 +127,4 @@ public class AppUser extends BaseEntity @ApiModelProperty("民族") private String nation; - - @TableField(exist = false) - @ApiModelProperty("工作经历列表") - private List experiencesList; - - @TableField(exist = false) - @ApiModelProperty("公司联系人列表") - private List contactsList; - - @TableField(exist = false) - @ApiModelProperty("技能列表") - private List appSkillsList; } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Company.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Company.java similarity index 97% rename from ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Company.java rename to ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Company.java index 30a0164..e496b61 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/Company.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Company.java @@ -1,7 +1,6 @@ -package com.ruoyi.cms.domain; +package com.ruoyi.common.core.domain.entity; import com.baomidou.mybatisplus.annotation.*; -import com.ruoyi.common.core.domain.entity.CompanyContact; import lombok.Data; import com.ruoyi.common.annotation.Excel; import io.swagger.annotations.ApiModel; 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 868a1fc..3996efc 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 @@ -1,11 +1,29 @@ package com.ruoyi.common.core.domain.model; +import com.ruoyi.common.core.domain.entity.*; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + /** * 用户注册对象 * * @author ruoyi */ +@Data public class RegisterBody extends LoginBody { + @ApiModelProperty("工作经历列表") + private List experiencesList; + + @ApiModelProperty("技能列表") + private List appSkillsList; + + @ApiModelProperty("公司信息") + private Company company; + + @ApiModelProperty("用户信息") + private AppUser appUser; } From b7686c31b185bdef4c6c911cd0dc131e9546495e Mon Sep 17 00:00:00 2001 From: sh Date: Tue, 21 Oct 2025 14:54:55 +0800 Subject: [PATCH 15/15] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3-=E6=B7=BB=E5=8A=A0=E6=96=B0=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E4=B8=8D=E5=BD=B1=E5=93=8D=E4=B9=8B=E5=89=8D=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cms/controller/app/AppUserController.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) 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 b7c4976..8da78b6 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 @@ -46,16 +46,25 @@ public class AppUserController extends BaseController /** * 查询岗位列表 */ - @ApiOperation("保存简历") - @PostMapping("/resume") + @ApiOperation("保存注册信息") + @PostMapping("/registerUser") @BussinessLog(title = "保存简历") public AjaxResult saveResume(@RequestBody RegisterBody registerBody) { - /*appUser.setUserId(SiteSecurityUtils.getUserId());//AppUser appUser - appUserService.updateAppUser(appUser);*/ appUserService.registerAppUser(registerBody); return AjaxResult.success(); } + + @ApiOperation("保存简历") + @PostMapping("/resume") + @BussinessLog(title = "保存简历") + public AjaxResult saveResume(@RequestBody AppUser appUser) + { + appUser.setUserId(SiteSecurityUtils.getUserId()); + appUserService.updateAppUser(appUser); + return AjaxResult.success(); + } + @ApiOperation("查看简历") @GetMapping("/resume") public AjaxResult getResume()