first commit

This commit is contained in:
chenshaohua
2025-11-10 16:21:55 +08:00
commit 1940d893c8
609 changed files with 161822 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
package com.ruoyi.cms.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Configuration
public class WebSocketConfig {
/**
* 注册 WebSocket 端点
*/
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}

View File

@@ -0,0 +1,10 @@
package com.ruoyi.cms.constant;
public class CommonConstant {
/**
* 地铁线路缓存
*/
public static final String SUBWAY_LINE_CACHE = "common_cache:subway";
public static final String COMMERICIAL_AREA = "common_cache:comericial_area";
public static final String JOB_TITLE = "common_cache:job_titile";
}

View File

@@ -0,0 +1,77 @@
package com.ruoyi.cms.controller.app;
import com.ruoyi.cms.domain.BussinessDictData;
import com.ruoyi.cms.domain.CommercialArea;
import com.ruoyi.cms.domain.SubwayLine;
import com.ruoyi.cms.service.*;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.TreeSelect;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/app/common")
@Api(tags = "移动端:常用参数查询")
public class AppCommonController extends BaseController {
@Autowired
private ISubwayLineService iSubwayLineService;
@Autowired
private ICommercialAreaService iCommercialAreaService;
@Autowired
private IJobTitleService iJobTitleService;
@Autowired
private IIndustryService industryService;
@Autowired
private IBussinessDictTypeService iBussinessDictTypeService;
@ApiOperation("查询地铁")
@GetMapping("/subway")
public AjaxResult subway()
{
List<SubwayLine> list = iSubwayLineService.appSubway();
return success(list);
}
@ApiOperation("查询商圈")
@GetMapping("/commercialArea")
public AjaxResult commercialArea()
{
List<CommercialArea> list = iCommercialAreaService.appCommercialArea();
return success(list);
}
@ApiOperation("查询职业 树结构")
@GetMapping("/jobTitle/treeselect")
public AjaxResult jobTitle()
{
List<TreeSelect> jobTitleList = iJobTitleService.appJobTitle();
return success(jobTitleList);
}
@ApiOperation("查询行业 树结构")
@GetMapping("/industry/treeselect")
public AjaxResult industry()
{
List<TreeSelect> industryList = industryService.appIndustry();
return success(industryList);
}
@ApiOperation("查询字典")
@GetMapping("/dict/{dictType}")
public AjaxResult listDict(@PathVariable String dictType)
{
List<BussinessDictData> dictData = iBussinessDictTypeService.selectDictDataByType(dictType);
return success(dictData);
}
@ApiOperation("字段标准")
@GetMapping("/standar/filed")
public AjaxResult standarFiled()
{
Map<String,Object> filed = iBussinessDictTypeService.standarFiled();
return success(filed);
}
}

View File

@@ -0,0 +1,58 @@
package com.ruoyi.cms.controller.app;
import com.ruoyi.cms.domain.vo.CompanyContactVo;
import com.ruoyi.cms.service.CompanyContactService;
import com.ruoyi.cms.util.ListUtil;
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.entity.CompanyContact;
import com.ruoyi.common.core.page.TableDataInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 公司联系人
*
* @author
* @email
* @date 2025-09-30 15:57:06
*/
@RestController
@RequestMapping("/app/companycontact")
@Api(tags = "移动端:公司联系人")
public class AppCompanyContactController extends BaseController {
@Autowired
private CompanyContactService companyContactService;
/**
* 列表
*/
@ApiOperation("公司联系人列表")
@GetMapping("/list")
public TableDataInfo list(CompanyContact companyContact){
List<CompanyContact> list=companyContactService.getSelectList(companyContact);
return getDataTable(list);
}
@BussinessLog(title = "移动端保存企业联系人")
@PostMapping("/batchInsertUpdate")
public AjaxResult batchInsertUpdate(@RequestBody CompanyContactVo contactVo)
{
if (contactVo == null) {
return AjaxResult.error("请求参数不能为空");
}
List<CompanyContact> contactList = contactVo.getCompanyContactList();
if (ListUtil.isListObjectEmptyOrNull(contactList)) { // 假设 ListUtil 工具类判断 null 或空集合
return AjaxResult.error("请至少填写一条联系人信息");
}
companyContactService.insertUpadteCompanyContact(contactList);
return success();
}
}

View File

@@ -0,0 +1,155 @@
package com.ruoyi.cms.controller.app;
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;
import com.ruoyi.cms.service.ICompanyCardService;
import com.ruoyi.cms.service.ICompanyCollectionService;
import com.ruoyi.cms.service.ICompanyService;
import com.ruoyi.common.annotation.BussinessLog;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.utils.StringUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 公司Controller
*
* @author lishundong
* @date 2024-09-04
*/
@RestController
@RequestMapping("/app/company")
@Api(tags = "移动端:公司")
public class AppCompanyController extends BaseController
{
@Autowired
private ICompanyService companyService;
@Autowired
private ICompanyCollectionService companyCollectionService;
@Autowired
private ICompanyCardService companyCardService;
@Autowired
private CompanyCardMapper companyCardMapper;
/**
* 获取公司详细信息
*/
@ApiOperation("获取公司详细信息")
@GetMapping(value = "/{companyId}")
public AjaxResult getInfo(@PathVariable("companyId") Long companyId)
{
return success(companyService.selectCompanyByCompanyId(companyId));
}
/**
* 用户收藏公司
*/
@BussinessLog(title = "用户收藏公司")
@PostMapping("/collection/{companyId}")
@ApiOperation("用户收藏公司")
public AjaxResult companyCollection(@PathVariable("companyId") Long companyId)
{
return toAjax(companyCollectionService.companyCollection(companyId));
}
/**
* 用户取消收藏公司
*/
@BussinessLog(title = "用户取消收藏公司")
@DeleteMapping("/collection/{companyId}")
@ApiOperation("用户取消收藏公司")
public AjaxResult companyCancel(@PathVariable("companyId") Long companyId)
{
return toAjax(companyCollectionService.companyCancel(companyId));
}
/**
* 公司下的岗位
*/
@GetMapping("/job/{companyId}")
@ApiOperation("公司下的岗位")
public TableDataInfo jobCompany(@ApiParam("公司id") @PathVariable Long companyId)
{
startPage();
return getDataTable(companyCollectionService.jobCompany(companyId));
}
@GetMapping("/card")
@ApiOperation("查看企业卡片")
public TableDataInfo card()
{
startPage();
return getDataTable(companyCardService.cardApp());
}
@BussinessLog(title = "收藏企业卡片")
@PutMapping("/card/collection/{companyCardId}")
@ApiOperation("收藏企业卡片")
public AjaxResult cardCollection(@PathVariable Long companyCardId)
{
companyCardService.cardCollection(companyCardId);
return success();
}
@BussinessLog(title = "取消收藏企业卡片")
@DeleteMapping("/card/collection/{companyCardId}")
@ApiOperation("取消收藏公司卡片")
public AjaxResult cardCancel(@PathVariable Long companyCardId)
{
companyCardService.cardCancel(companyCardId);
return success();
}
@GetMapping("/count/{companyId}")
@ApiOperation("公司招聘的岗位数量")
public AjaxResult count(@PathVariable Long companyId)
{
Integer count = companyService.count(companyId);
return success(count);
}
@GetMapping("/label")
@ApiOperation("公司标签下的公司")
public TableDataInfo label(LabelQuery labelQuery)
{
CompanyCard companyCard = companyCardMapper.selectById(labelQuery.getCardId());
startPage();
List<Company> companyList = companyService.label(companyCard,labelQuery);
return getDataTable(companyList);
}
@PostMapping("/register")
@ApiOperation("招聘企业登记")
@BussinessLog(title = "招聘企业登记")
public AjaxResult register(Company company)
{
companyService.register(company);
return AjaxResult.success();
}
@GetMapping("/register/status")
@ApiOperation("招聘企业登记进度查询")
public AjaxResult registerStatus()
{
Company status = companyService.registerStatus();
return AjaxResult.success(status);
}
@GetMapping("/queryCodeCompany")
@ApiOperation("根据社会信用代码查询企业")
public AjaxResult queryCodeCompany(@RequestParam("code") String code)
{
if (!StringUtils.hasText(code)) {
return AjaxResult.error("社会信用代码不能为空");
}
return AjaxResult.success(companyService.queryCodeCompany(code));
}
@ApiOperation("模糊查询公司列表")
@GetMapping("/likeList")
public TableDataInfo likeList(Company company)
{
List<Company> list = companyService.selectLikeCompanyList(company);
return getDataTable(list);
}
}

View File

@@ -0,0 +1,74 @@
package com.ruoyi.cms.controller.app;
import com.ruoyi.cms.domain.JobFair;
import com.ruoyi.cms.service.IFairCollectionService;
import com.ruoyi.cms.service.IJobFairService;
import com.ruoyi.common.annotation.BussinessLog;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 招聘会Controller
*
* @author lishundong
* @date 2024-09-04
*/
@RestController
@RequestMapping("/app/fair")
@Api(tags = "移动端:招聘会")
public class AppFairController extends BaseController
{
@Autowired
private IJobFairService jobFairService;
@Autowired
private IFairCollectionService fairCollectionService;
/**
* 招聘会列表
*/
@BussinessLog(title = "招聘会列表")
@GetMapping
public TableDataInfo list(JobFair jobFair)
{
startPage();
List<JobFair> results = jobFairService.appList(jobFair);
return getDataTable(results);
}
/**
* 招聘会详情
*/
@BussinessLog(title = "招聘会详情")
@GetMapping("/{fairId}")
public AjaxResult appDetail(@ApiParam("招聘会id") @PathVariable Long fairId)
{
return success(jobFairService.appDetail(fairId));
}
/**
* 用户收藏招聘会
*/
@BussinessLog(title = "用户收藏招聘会")
@PostMapping("/collection/{fairId}")
public AjaxResult companyCollection(@ApiParam("招聘会id") @PathVariable Long fairId)
{
return toAjax(fairCollectionService.fairCollection(fairId));
}
/**
* 用户取消收藏招聘会
*/
@BussinessLog(title = "用户取消收藏招聘会")
@DeleteMapping("/collection/{fairId}")
public AjaxResult companyCancel(@ApiParam("招聘会id") @PathVariable Long fairId)
{
return toAjax(fairCollectionService.cancel(fairId));
}
}

View File

@@ -0,0 +1,33 @@
package com.ruoyi.cms.controller.app;
import com.ruoyi.common.core.domain.entity.File;
import com.ruoyi.cms.service.IFileService;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@RestController
@RequestMapping("/app/file")
public class AppFileController extends BaseController {
@Autowired
private IFileService fileService;
@ApiOperation("上传文件")
@PostMapping("/upload")
public AjaxResult uploadFile(@RequestParam("file") MultipartFile file, @RequestParam(value = "bussinessid",required = false) Long bussinessId) {
return fileService.uploadFile(file,bussinessId);
}
@ApiOperation("获取附件列表")
@GetMapping("/list")
public TableDataInfo list(File file)
{
List<File> results = fileService.selectFileList(file);
return getDataTable(results);
}
}

View File

@@ -0,0 +1,235 @@
package com.ruoyi.cms.controller.app;
import com.ruoyi.cms.domain.ESJobDocument;
import com.ruoyi.cms.domain.Job;
import com.ruoyi.cms.domain.query.ESJobSearch;
import com.ruoyi.cms.service.ICompanyService;
import com.ruoyi.cms.service.IESJobSearchService;
import com.ruoyi.cms.service.IJobCollectionService;
import com.ruoyi.cms.service.IJobService;
import com.ruoyi.cms.util.RoleUtils;
import com.ruoyi.cms.util.sensitiveWord.SensitiveWordChecker;
import com.ruoyi.common.annotation.BussinessLog;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.ArrayUtils;
import org.dromara.easyes.core.biz.EsPageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 岗位Controller
*
* @author lishundong
* @date 2024-09-03
*/
@RestController
@RequestMapping("/app/job")
@Api(tags = "移动端:岗位相关接口")
public class AppJobController extends BaseController
{
@Autowired
private IJobService jobService;
@Autowired
private IJobCollectionService jobCollectionService;
@Autowired
private IESJobSearchService esJobSearchService;
@Autowired
private SensitiveWordChecker sensitiveWordChecker;
/**
* 查询岗位列表
*/
@ApiOperation("查询岗位列表")
@GetMapping("/list")
public TableDataInfo list(ESJobSearch job)
{
EsPageInfo<ESJobDocument> list = jobService.appList(job);
return getTableDataInfo2(list,job);
}
private TableDataInfo getTableDataInfo2(EsPageInfo<ESJobDocument> list, ESJobSearch job) {
long total = list.getTotal();
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(200);
rspData.setRows(list.getList());
rspData.setTotal(total > 200 ? 200 : total);
job.setCompany(null);
rspData.setData(job);
return rspData;
}
/**
* 获取5条推荐岗位
*/
@ApiOperation("获取推荐岗位")
@GetMapping("/recommend")
public AjaxResult recommend(ESJobSearch esJobSearch)
{
if (RoleUtils.getAppCurrentUseridCard() != null) {
esJobSearch.setCode(RoleUtils.getAppCurrentUseridCard());
esJobSearch.setUserType(RoleUtils.getAppIscompanyUser());
}
List<ESJobDocument> jobList = jobService.recommend(esJobSearch);
return success(jobList);
}
@ApiOperation("获取短视频")
@GetMapping("/littleVideo")
public AjaxResult littleVideo(ESJobSearch esJobSearch)
{
List<ESJobDocument> jobList = jobService.littleVideo(esJobSearch);
return success(jobList);
}
@ApiOperation("随机获取短视频")
@GetMapping("/littleVideo/random")
public AjaxResult littleVideo(@RequestParam(required = true) String uuid,@RequestParam(required = false) Integer count,@RequestParam(required = false) String jobTitle)
{
List<ESJobDocument> jobList = jobService.littleVideoRandom(uuid,count,jobTitle);
return success(jobList);
}
/**
* 附件工作
*/
@ApiOperation("附近工作")
@PostMapping(value = "/nearJob")
public TableDataInfo nearJob(@RequestBody ESJobSearch jobQuery)
{
EsPageInfo<ESJobDocument> list = esJobSearchService.nearJob(jobQuery);
List<ESJobDocument> jobList = list.getList();
list.setList(jobList);
return getTableDataInfo(list);
}
/**
* 附件工作
*/
@ApiOperation("区县工作")
@PostMapping(value = "/countyJob")
public TableDataInfo countyJob(@RequestBody ESJobSearch job)
{
EsPageInfo<ESJobDocument> list = jobService.countyJobList(job);
List<ESJobDocument> jobList = list.getList();
list.setList(jobList);
return getTableDataInfo(list);
}
/**
* 地铁周边
*/
@ApiOperation("地铁周边")
@PostMapping(value = "/subway")
public TableDataInfo subway(@RequestBody ESJobSearch jobQuery)
{
EsPageInfo<ESJobDocument> list = jobService.subway(jobQuery);
List<ESJobDocument> jobList = list.getList();
list.setList(jobList);
return getTableDataInfo(list);
}
/**
* 商圈周边
*/
@ApiOperation("商圈周边")
@PostMapping(value = "/commercialArea")
public TableDataInfo commercialArea(@RequestBody ESJobSearch jobQuery)
{
EsPageInfo<ESJobDocument> list = jobService.commercialArea(jobQuery);
List<ESJobDocument> jobList = list.getList();
list.setList(jobList);
return getTableDataInfo(list);
}
/**
* 获取岗位详细信息
*/
@ApiOperation("获取岗位详细信息")
@GetMapping(value = "/{jobId}")
public AjaxResult getInfo(@PathVariable("jobId") Long jobId)
{
Job job = jobService.selectJobByJobIdApp(jobId);
return success(job);
}
/**
* 用户收藏岗位
*/
@BussinessLog(title = "用户收藏岗位")
@PostMapping("/collection/{jobId}")
@ApiOperation("用户收藏")
public AjaxResult jobCollection(@ApiParam("岗位id") @PathVariable Long jobId)
{
return toAjax(jobCollectionService.jobCollection(jobId));
}
/**
* 用户取消收藏岗位
*/
@BussinessLog(title = "用户取消收藏岗位")
@DeleteMapping("/collection/{jobId}")
@ApiOperation("用户取消收藏岗位")
public AjaxResult cancel(@ApiParam("岗位id") @PathVariable Long jobId)
{
return toAjax(jobCollectionService.cancel(jobId));
}
/**
* 用户申请岗位
*/
@BussinessLog(title = "用户申请岗位")
@GetMapping("/apply/{jobId}")
@ApiOperation("用户申请岗位")
public AjaxResult apply(@ApiParam("岗位id") @PathVariable Long jobId)
{
return toAjax(jobCollectionService.apply(jobId));
}
@GetMapping("/competitiveness/{jobId}")
@ApiOperation("竞争力分析")
public AjaxResult competitiveness(@ApiParam("岗位id") @PathVariable Long jobId) {
return success(jobCollectionService.competitiveness(jobId));
}
private TableDataInfo getTableDataInfo(EsPageInfo<ESJobDocument> result){
long total = result.getTotal();
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(200);
rspData.setRows(result.getList());
rspData.setTotal(total > 200 ? 200 : total);
return rspData;
}
@BussinessLog(title = "移动端发布岗位")
@PostMapping("/publishJob")
public AjaxResult fix(@RequestBody Job job)
{
// 校验描述中的敏感词
List<String> sensitiveWords = sensitiveWordChecker.checkSensitiveWords(job.getDescription());
if (!sensitiveWords.isEmpty()) {
String errorMsg = "描述中包含敏感词:" + String.join("", sensitiveWords);
return AjaxResult.error(errorMsg);
}
jobService.publishJob(job);
return success();
}
@GetMapping("/jobCompare")
@ApiOperation("根据多个岗位id查询岗位详情")
public AjaxResult jobCompare(@ApiParam("岗位ID数组") @RequestParam("jobIds") Long[] jobIds) {
if (ArrayUtils.isEmpty(jobIds)) {
return AjaxResult.error("请传递岗位ID参数jobIds多个ID用&分隔");
}
if (jobIds.length > 5) {
return AjaxResult.error("最多支持对比5个岗位请减少参数数量");
}
return success(esJobSearchService.selectByIds(jobIds));
}
@GetMapping("/applyJobList")
@ApiOperation("根据岗位id查询岗位申请人员")
public AjaxResult applyJobList(@ApiParam("岗位id") @RequestParam("jobId") Long jobId) {
if (jobId==null) {
return AjaxResult.error("请传递岗位ID");
}
return success(jobService.selectApplyJobUserList(jobId));
}
}

View File

@@ -0,0 +1,63 @@
package com.ruoyi.cms.controller.app;
import com.ruoyi.cms.domain.Job;
import com.ruoyi.cms.domain.Notice;
import com.ruoyi.cms.service.IAppNoticeService;
import com.ruoyi.common.annotation.BussinessLog;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/app/notice")
@Api(tags = "移动端:消息")
public class AppNoticeInfoController extends BaseController {
@Autowired
private IAppNoticeService appNoticeService;
@ApiOperation("消息列表")
@GetMapping("/info")
public AjaxResult listNotRead(@RequestParam(required = false) Integer isRead)
{
List<Notice> appNoticeVO = appNoticeService.listNotRead(isRead);
return AjaxResult.success(appNoticeVO);
}
@ApiOperation("推荐岗位列表")
@GetMapping("/recommend")
public TableDataInfo recommend(@RequestParam(required = false)String jobTitle)
{
startPage();
List<Job> list = appNoticeService.recommend(jobTitle);
return getDataTable(list);
}
@ApiOperation("系统通知已读")
@PostMapping("/read/sysNotice")
@BussinessLog(title = "系统通知标记已读")
public AjaxResult sysNotice(@RequestParam String id)
{
appNoticeService.sysNotice(id);
return AjaxResult.success();
}
@ApiOperation("岗位推荐、招聘会已读")
@PostMapping("/read")
@BussinessLog(title = "岗位推荐、招聘会已读标记已读")
public AjaxResult read(@RequestParam String id)
{
appNoticeService.read(id);
return AjaxResult.success();
}
@ApiOperation("系统通知列表")
@GetMapping("/sysNotice")
public TableDataInfo sysNoticeList()
{
startPage();
List<Notice> list = appNoticeService.sysNoticeList();
return getDataTable(list);
}
}

View File

@@ -0,0 +1,61 @@
package com.ruoyi.cms.controller.app;
import com.ruoyi.cms.service.ICompanyService;
import com.ruoyi.cms.service.IJobService;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import io.swagger.annotations.Api;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* 岗位Controller
*
* @author lishundong
* @date 2024-09-03
*/
@RestController
@RequestMapping("/app/script")
@Api(tags = "移动端:脚本")
public class AppScriptController extends BaseController
{
@Autowired
private IJobService jobService;
@Autowired
private ICompanyService companyService;
//更新经纬度
@GetMapping("/updateLon")
public void updateLon()
{
jobService.updateLon();
}
//导入数据
@GetMapping("/import")
public AjaxResult importData()
{
jobService.importData();
return success();
}
//导入原始数据
@GetMapping("/importRow")
public AjaxResult importRow(@RequestParam String path)
{
jobService.importRow(path);
return success();
}
// 导入500强
@GetMapping("/importLabel500")
public void importLabel()
{
companyService.importLabel();
}
// 随机导入3个公司到银行标签
@GetMapping("/importLabelBank")
public void importLabelBank()
{
companyService.importLabelBank();
}
}

View File

@@ -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("/app/appskill")
@Api(tags = "移动端:用户技能")
public class AppSkillController extends BaseController {
@Autowired
private AppSkillService appSkillService;
/**
* 列表
*/
@ApiOperation("获取技能列表")
@GetMapping("/list")
public TableDataInfo list(AppSkill appSkill){
startPage();
List<AppSkill> 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}));
}
}

View File

@@ -0,0 +1,37 @@
package com.ruoyi.cms.controller.app;
import com.alibaba.nls.client.AccessToken;
import com.ruoyi.cms.handler.SpeechRecognizerAI;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* app语音Controller
*
* @author lishundong
* @date 2024-09-03
*/
@RestController
@RequestMapping("/app/speech")
@Api(tags = "移动端:用户相关")
public class AppSpeechController extends BaseController
{
private String appKey = "4lFYn2yPsQymwGu8";
private String id = "LTAI5t9hhSqdDHqwH3RjgyYj";
private String secret = "ni5aW3vxrWouMwcGqJPfh9Uu56PBuv";
private String url = System.getenv().getOrDefault("NLS_GATEWAY_URL", "wss://nls-gateway-cn-shanghai.aliyuncs.com/ws/v1");
@ApiOperation("统计")
@GetMapping("/getToken")
public AjaxResult getToken()
{
SpeechRecognizerAI recognizerDemo = new SpeechRecognizerAI(appKey, id, secret, url);
AccessToken accessToken = recognizerDemo.getAccessToken();
String token = "wss://nls-gateway.cn-shanghai.aliyuncs.com/ws/v1?appkey="+appKey+"&token="+accessToken.getToken();
return AjaxResult.success(token);
}
}

View File

@@ -0,0 +1,171 @@
package com.ruoyi.cms.controller.app;
import com.ruoyi.cms.domain.AppReviewJob;
import com.ruoyi.common.core.domain.entity.AppUser;
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;
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.cms.domain.vo.AppUserLky;
import com.ruoyi.common.core.domain.model.RegisterBody;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SiteSecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
/**
* app用户Controller
*
* @author lishundong
* @date 2024-09-03
*/
@RestController
@RequestMapping("/app/user")
@Api(tags = "移动端:用户相关")
public class AppUserController extends BaseController
{
@Autowired
private IAppUserService appUserService;
@Autowired
private IAppReviewJobService appReviewJobService;
@Autowired
private IJobCollectionService jobCollectionService;
@Autowired
private ICompanyCollectionService companyCollectionService;
@Autowired
private IJobApplyService jobApplyService;
@Autowired
private IFairCollectionService fairCollectionService;
/**
* 查询岗位列表
*/
@ApiOperation("保存注册信息")
@PostMapping("/registerUser")
@BussinessLog(title = "保存简历")
public AjaxResult registerUser(@RequestBody RegisterBody registerBody)
{
appUserService.registerAppUser(registerBody);
return AjaxResult.success();
}
@ApiOperation("保存简历")
@PostMapping("/resume")
public AjaxResult saveResume(@RequestBody AppUser appUser)
{
appUser.setUserId(SiteSecurityUtils.getUserId());
appUserService.updateAppUser(appUser);
return AjaxResult.success();
}
@ApiOperation("查看简历")
@GetMapping("/resume")
public AjaxResult getResume()
{
AppUser appUser = appUserService.selectAppUserByUserId(SiteSecurityUtils.getUserId());
return AjaxResult.success(appUser);
}
@ApiOperation("我的浏览")
@GetMapping("/review")
public TableDataInfo review(MineJobQuery jobQuery)
{
startPage();
List<Job> jobs = appReviewJobService.review(jobQuery);
return getDataTable(jobs);
}
@ApiOperation("我的浏览-日期数组")
@GetMapping("/review/array")
public AjaxResult reviewArray(MineJobQuery jobQuery)
{
List<String> dateList = appReviewJobService.reviewArray();
return AjaxResult.success(dateList);
}
@ApiOperation("我的岗位收藏")
@GetMapping("/collection/job")
public TableDataInfo collectionJob()
{
startPage();
List<Job> jobs = jobCollectionService.collectionJob();
return getDataTable(jobs);
}
@ApiOperation("我的公司收藏")
@GetMapping("/collection/company")
public TableDataInfo collectionCompany()
{
startPage();
List<Company> jobs = companyCollectionService.collectionCompany();
return getDataTable(jobs);
}
@ApiOperation("我的招聘会收藏")
@GetMapping("/collection/fair")
public TableDataInfo collectionFair(@RequestParam(name = "type") Integer type)
{
startPage();
List<JobFair> jobs = fairCollectionService.appCollectionFair(type);
return getDataTable(jobs);
}
@ApiOperation("我申请的岗位")
@GetMapping("/apply/job")
public TableDataInfo applyJob()
{
startPage();
List<Job> jobs = jobApplyService.applyJob();
return getDataTable(jobs);
}
@ApiOperation("统计")
@GetMapping("/statistics")
public AjaxResult statistics()
{
HashMap<String,Integer> result = jobApplyService.statistics();
return AjaxResult.success(result);
}
@ApiOperation("根据条件查询用户信息")
@GetMapping("/list")
public AjaxResult getUserList(AppUser appUser)
{
List<AppUser> list = appUserService.selectAppUserList(appUser);
return AjaxResult.success(list);
}
@ApiOperation("返回求职者劳科院-当前职位名称、技能标签")
@GetMapping("/appUserInfo")
public AjaxResult appUserInfo(AppUser appUser)
{
if(!SiteSecurityUtils.isLogin()){
return AjaxResult.error("未登录!");
}
appUser.setUserId(SiteSecurityUtils.getUserId());
AppUserLky appUserLky = appUserService.selectAppUserInfo(appUser);
return AjaxResult.success(appUserLky);
}
@PostMapping("/browse")
@ApiOperation("用户浏览")
public AjaxResult browse(@RequestBody AppReviewJob appReviewJob)
{
if(appReviewJob.getJobId()==null){
return AjaxResult.error("岗位id为空");
}
if(!SiteSecurityUtils.isLogin()){
return AjaxResult.error("用户未登录!");
}
if(StringUtils.isEmpty(appReviewJob.getReviewDate())){
appReviewJob.setReviewDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,new Date()));
}
appReviewJob.setUserId(SiteSecurityUtils.getUserId());
return toAjax(appReviewJobService.insertAppReviewJob(appReviewJob));
}
}

View File

@@ -0,0 +1,88 @@
package com.ruoyi.cms.controller.app;
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;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.utils.SiteSecurityUtils;
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-10 16:26:26
*/
@RestController
@RequestMapping("/app/userworkexperiences")
@Api(tags = "移动端:用户工作经历")
public class AppUserWorkExperiencesController extends BaseController {
@Autowired
private UserWorkExperiencesService userWorkExperiencesService;
/**
* 列表
*/
@ApiOperation("工作经历列表信息")
@GetMapping("/list")
public TableDataInfo list(UserWorkExperiences userWorkExperiences){
if(userWorkExperiences.getUserId()==null){
userWorkExperiences.setUserId(SiteSecurityUtils.getUserId());
}
startPage();
List<UserWorkExperiences> list=userWorkExperiencesService.getWorkExperiencesList(userWorkExperiences);
return getDataTable(list);
}
/**
* 获取详细信息
*/
@ApiOperation("获取工作经历详细信息")
@GetMapping(value = "/{id}")
public AjaxResult query(@PathVariable("id") Long id){
return success(userWorkExperiencesService.getWorkExperiencesById(id));
}
/**
* 保存
*/
@ApiOperation("新增工作经历")
@PostMapping("/add")
public AjaxResult add(@RequestBody UserWorkExperiences userWorkExperiences){
if(userWorkExperiences.getUserId()==null){
userWorkExperiences.setUserId(SiteSecurityUtils.getUserId());
}
return toAjax(userWorkExperiencesService.insertWorkExperiences(userWorkExperiences));
}
/**
* 修改
*/
@ApiOperation("修改工作经历")
@PutMapping("/edit")
public AjaxResult update(@RequestBody UserWorkExperiences userWorkExperiences){
return toAjax(userWorkExperiencesService.updateWorkExperiencesById(userWorkExperiences));
}
/**
* 删除
*/
@ApiOperation("删除工作经历")
@DeleteMapping("/{id}")
public AjaxResult remove(@ApiParam("招聘会id") @PathVariable Long id){
return toAjax(userWorkExperiencesService.deleteWorkExperiencesIds(new Long[]{id}));
}
}

View File

@@ -0,0 +1,118 @@
package com.ruoyi.cms.controller.cms;
import com.ruoyi.cms.domain.BussinessDictData;
import com.ruoyi.cms.service.IBussinessDictDataService;
import com.ruoyi.cms.service.IBussinessDictTypeService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
/**
* 数据字典信息
*
* @author ruoyi
*/
@RestController
@RequestMapping("/cms/dict/data")
public class BussinessDictDataController extends BaseController
{
@Autowired
private IBussinessDictDataService dictDataService;
@Autowired
private IBussinessDictTypeService dictTypeService;
@PreAuthorize("@ss.hasPermi('system:dict:list')")
@GetMapping("/list")
public TableDataInfo list(BussinessDictData dictData)
{
startPage();
List<BussinessDictData> list = dictDataService.selectDictDataList(dictData);
return getDataTable(list);
}
@Log(title = "字典数据", businessType = BusinessType.EXPORT)
@PreAuthorize("@ss.hasPermi('system:dict:export')")
@PostMapping("/export")
public void export(HttpServletResponse response, BussinessDictData dictData)
{
List<BussinessDictData> list = dictDataService.selectDictDataList(dictData);
ExcelUtil<BussinessDictData> util = new ExcelUtil<BussinessDictData>(BussinessDictData.class);
util.exportExcel(response, list, "字典数据");
}
/**
* 查询字典数据详细
*/
@PreAuthorize("@ss.hasPermi('system:dict:query')")
@GetMapping(value = "/{dictCode}")
public AjaxResult getInfo(@PathVariable Long dictCode)
{
return success(dictDataService.selectDictDataById(dictCode));
}
/**
* 根据字典类型查询字典数据信息
*/
@GetMapping(value = "/type/{dictType}")
public AjaxResult dictType(@PathVariable String dictType)
{
List<BussinessDictData> data = dictTypeService.selectDictDataByType(dictType);
if (StringUtils.isNull(data))
{
data = new ArrayList<BussinessDictData>();
}
return success(data);
}
/**
* 新增字典类型
*/
@PreAuthorize("@ss.hasPermi('system:dict:add')")
@Log(title = "字典数据", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Validated @RequestBody BussinessDictData dict)
{
dict.setCreateBy(getUsername());
return toAjax(dictDataService.insertDictData(dict));
}
/**
* 修改保存字典类型
*/
@PreAuthorize("@ss.hasPermi('system:dict:edit')")
@Log(title = "字典数据", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@Validated @RequestBody BussinessDictData dict)
{
dict.setUpdateBy(getUsername());
return toAjax(dictDataService.updateDictData(dict));
}
/**
* 删除字典类型
*/
@PreAuthorize("@ss.hasPermi('system:dict:remove')")
@Log(title = "字典类型", businessType = BusinessType.DELETE)
@DeleteMapping("/{dictCodes}")
public AjaxResult remove(@PathVariable Long[] dictCodes)
{
dictDataService.deleteDictDataByIds(dictCodes);
return success();
}
}

View File

@@ -0,0 +1,52 @@
package com.ruoyi.cms.controller.cms;
import com.ruoyi.cms.service.BussinessDictJobCategoryService;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.core.domain.entity.BussinessDictJobCategory;
/**
* 技能字典表
*
* @author
* @email
* @date 2025-10-30 19:25:48
*/
@RestController
@RequestMapping("/cms/dict")
@Anonymous
public class BussinessDictJobCategoryController {
@Autowired
private BussinessDictJobCategoryService bussinessDictJobCategoryService;
/**
* 列表
*/
@GetMapping("/jobCategory")
public AjaxResult jobCategory(BussinessDictJobCategory bussinessDictJobCategory){
if (!hasAnyQueryCondition(bussinessDictJobCategory)) {
return AjaxResult.error("请传递至少一个查询条件(大类、中类、小类、名称),避免数据量过大!");
}
return AjaxResult.success(bussinessDictJobCategoryService.getList(bussinessDictJobCategory));
}
/**
* 判断是否包含至少一个有效的查询条件
*/
private boolean hasAnyQueryCondition(BussinessDictJobCategory queryParam) {
// 避免空指针(若 queryParam 可能为 null需先判断
if (queryParam == null) {
return false;
}
// 检查四个字段中是否有非空值
return StringUtils.isNotEmpty(queryParam.getLabd())
|| StringUtils.isNotEmpty(queryParam.getLabz())
|| StringUtils.isNotEmpty(queryParam.getLabx())
|| StringUtils.isNotEmpty(queryParam.getName());
}
}

View File

@@ -0,0 +1,127 @@
package com.ruoyi.cms.controller.cms;
import com.ruoyi.cms.domain.BussinessDictType;
import com.ruoyi.cms.service.IBussinessDictTypeService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 数据字典信息
*
* @author ruoyi
*/
@RestController
@RequestMapping("/cms/dict/type")
public class BussinessDictTypeController extends BaseController
{
@Autowired
private IBussinessDictTypeService dictTypeService;
@PreAuthorize("@ss.hasPermi('system:dict:list')")
@GetMapping("/list")
public TableDataInfo list(BussinessDictType dictType)
{
startPage();
List<BussinessDictType> list = dictTypeService.selectDictTypeList(dictType);
return getDataTable(list);
}
@Log(title = "字典类型", businessType = BusinessType.EXPORT)
@PreAuthorize("@ss.hasPermi('system:dict:export')")
@PostMapping("/export")
public void export(HttpServletResponse response, BussinessDictType dictType)
{
List<BussinessDictType> list = dictTypeService.selectDictTypeList(dictType);
ExcelUtil<BussinessDictType> util = new ExcelUtil<BussinessDictType>(BussinessDictType.class);
util.exportExcel(response, list, "字典类型");
}
/**
* 查询字典类型详细
*/
@PreAuthorize("@ss.hasPermi('system:dict:query')")
@GetMapping(value = "/{dictId}")
public AjaxResult getInfo(@PathVariable Long dictId)
{
return success(dictTypeService.selectDictTypeById(dictId));
}
/**
* 新增字典类型
*/
@PreAuthorize("@ss.hasPermi('system:dict:add')")
@Log(title = "字典类型", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Validated @RequestBody BussinessDictType dict)
{
if (!dictTypeService.checkDictTypeUnique(dict))
{
return error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
}
dict.setCreateBy(getUsername());
return toAjax(dictTypeService.insertDictType(dict));
}
/**
* 修改字典类型
*/
@PreAuthorize("@ss.hasPermi('system:dict:edit')")
@Log(title = "字典类型", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@Validated @RequestBody BussinessDictType dict)
{
if (!dictTypeService.checkDictTypeUnique(dict))
{
return error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
}
dict.setUpdateBy(getUsername());
return toAjax(dictTypeService.updateDictType(dict));
}
/**
* 删除字典类型
*/
@PreAuthorize("@ss.hasPermi('system:dict:remove')")
@Log(title = "字典类型", businessType = BusinessType.DELETE)
@DeleteMapping("/{dictIds}")
public AjaxResult remove(@PathVariable Long[] dictIds)
{
dictTypeService.deleteDictTypeByIds(dictIds);
return success();
}
/**
* 刷新字典缓存
*/
@PreAuthorize("@ss.hasPermi('system:dict:remove')")
@Log(title = "字典类型", businessType = BusinessType.CLEAN)
@DeleteMapping("/refreshCache")
public AjaxResult refreshCache()
{
dictTypeService.resetDictCache();
return success();
}
/**
* 获取字典选择框列表
*/
@GetMapping("/optionselect")
public AjaxResult optionselect()
{
List<BussinessDictType> dictTypes = dictTypeService.selectDictTypeAll();
return success(dictTypes);
}
}

View File

@@ -0,0 +1,72 @@
package com.ruoyi.cms.controller.cms;
import com.ruoyi.cms.domain.BussinessOperLog;
import com.ruoyi.cms.service.IBussinessOperLogService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import 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.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 操作日志记录
*
* @author ruoyi
*/
@RestController
@RequestMapping("/cms/operlog")
@Api(tags = "后台App用户操作日志")
public class BussinessOperlogController extends BaseController
{
@Autowired
private IBussinessOperLogService operLogService;
@PreAuthorize("@ss.hasPermi('monitor:operlog:list')")
@GetMapping("/list")
@ApiOperation("日志列表")
public TableDataInfo list(BussinessOperLog operLog)
{
startPage();
List<BussinessOperLog> list = operLogService.selectOperLogList(operLog);
return getDataTable(list);
}
@Log(title = "操作日志", businessType = BusinessType.EXPORT)
@PreAuthorize("@ss.hasPermi('monitor:operlog:export')")
@PostMapping("/export")
@ApiOperation("日志导出excel")
public void export(HttpServletResponse response, BussinessOperLog operLog)
{
List<BussinessOperLog> list = operLogService.selectOperLogList(operLog);
ExcelUtil<BussinessOperLog> util = new ExcelUtil<BussinessOperLog>(BussinessOperLog.class);
util.exportExcel(response, list, "操作日志");
}
@Log(title = "操作日志", businessType = BusinessType.DELETE)
@PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
@DeleteMapping("/{operIds}")
@ApiOperation("删除操作日志")
public AjaxResult remove(@PathVariable Long[] operIds)
{
return toAjax(operLogService.deleteOperLogByIds(operIds));
}
@Log(title = "操作日志", businessType = BusinessType.CLEAN)
@PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
@DeleteMapping("/clean")
@ApiOperation("清空操作日志")
public AjaxResult clean()
{
operLogService.cleanOperLog();
return success();
}
}

View File

@@ -0,0 +1,174 @@
package com.ruoyi.cms.controller.cms;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.cms.util.RoleUtils;
import com.ruoyi.common.annotation.BussinessLog;
import com.ruoyi.common.core.domain.model.RegisterBody;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.ruoyi.common.core.domain.entity.AppUser;
import com.ruoyi.cms.service.IAppUserService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* APP用户Controller
*
* @author lishundong
* @date 2024-09-03
*/
@RestController
@RequestMapping("/cms/appUser")
@Api(tags = "后台APP用户管理")
public class CmsAppUserController extends BaseController
{
@Autowired
private IAppUserService appUserService;
/**
* 查询APP用户列表
*/
@ApiOperation("查询APP用户列表")
// @PreAuthorize("@ss.hasPermi('cms:appUser:list')")
@GetMapping("/list")
public TableDataInfo list(AppUser appUser)
{
startPage();
List<AppUser> list = appUserService.selectAppUserList(appUser);
return getDataTable(list);
}
/**
* 导出APP用户列表
*/
@ApiOperation("导出APP用户列表")
@PreAuthorize("@ss.hasPermi('cms:appUser:export')")
@Log(title = "APP用户", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, AppUser appUser)
{
List<AppUser> list = appUserService.selectAppUserList(appUser);
ExcelUtil<AppUser> util = new ExcelUtil<AppUser>(AppUser.class);
util.exportExcel(response, list, "APP用户数据");
}
/**
* 获取APP用户详细信息
*/
@ApiOperation("获取APP用户详细信息")
@PreAuthorize("@ss.hasPermi('bussiness:user:query')")
@GetMapping(value = "/{userId}")
public AjaxResult getInfo(@PathVariable("userId") Long userId)
{
return success(appUserService.selectAppUserByUserId(userId));
}
/**
* 新增APP用户
*/
@ApiOperation("新增APP用户")
@PreAuthorize("@ss.hasPermi('bussiness:user:add')")
@Log(title = "APP用户", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody AppUser appUser)
{
return toAjax(appUserService.insertAppUser(appUser));
}
/**
* 修改APP用户
*/
@ApiOperation("修改APP用户")
@Log(title = "APP用户", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody AppUser appUser)
{
if(appUser.getUserId()==null){
return AjaxResult.error("参数userId为空");
}
return toAjax(appUserService.updateAppUser(appUser));
}
/**
* 删除APP用户
*/
@ApiOperation("删除APP用户")
@PreAuthorize("@ss.hasPermi('bussiness:user:remove')")
@Log(title = "APP用户", businessType = BusinessType.DELETE)
@DeleteMapping("/{userIds}")
public AjaxResult remove(@PathVariable Long[] userIds)
{
return toAjax(appUserService.deleteAppUserByUserIds(userIds));
}
/**
* 获取APP用户详细信息pc端获取移动端简历信息
*/
@ApiOperation("pc端个人简历信息-获取APP用户详细信息")
@GetMapping(value = "/getUserInfo")
public AjaxResult getUserInfo()
{
if(!SecurityUtils.isLogin()){
return AjaxResult.error("未登录!");
}
return success(appUserService.getUserInfo());
}
/**
* 修改用户简历信息-(技能信息、经历信息)
*/
@ApiOperation("修改用户简历信息")
@PostMapping("/editRegisterUser")
@BussinessLog(title = "保存简历")
public AjaxResult editRegisterUser(@RequestBody RegisterBody registerBody)
{
if (registerBody == null) {
return AjaxResult.error("入参registerBody不能为空!");
}
if(registerBody.getAppUser()==null){
return AjaxResult.error("用户信息为空!");
}
return AjaxResult.success(appUserService.editRegisterUser(registerBody));
}
@ApiOperation("查询APP用户列表")
@GetMapping("/noTmlist")
public TableDataInfo noTmlist(AppUser appUser)
{
startPage();
List<AppUser> list = appUserService.selectNoTmAppUserList(appUser);
return getDataTable(list);
}
@ApiOperation("查询我的中(已经投递的,收藏的,足迹,预约)")
@GetMapping("/getMyTj")
public AjaxResult getMyTj()
{
if(!SecurityUtils.isLogin()){
return AjaxResult.error("未登录!");
}
if(StringUtils.isEmpty(RoleUtils.getCurrentUseridCard())){
return AjaxResult.error("用户信息为空!");
}
AppUser appUser=appUserService.selectAppuserByIdcard(RoleUtils.getCurrentUseridCard());
return AjaxResult.success(appUserService.getMyTj(appUser.getUserId()));
}
}

View File

@@ -0,0 +1,317 @@
package com.ruoyi.cms.controller.cms;
import com.alibaba.fastjson.JSON;
import com.ruoyi.cms.domain.*;
import com.ruoyi.cms.domain.query.ESJobSearch;
import com.ruoyi.cms.domain.vo.CandidateVO;
import com.ruoyi.cms.domain.vo.CompanyVo;
import com.ruoyi.cms.service.*;
import com.ruoyi.cms.util.RoleUtils;
import com.ruoyi.cms.util.StringUtil;
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;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.AppUser;
import com.ruoyi.common.core.domain.entity.Company;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
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.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* 岗位Controller
*
* @author lishundong
* @date 2024-09-03
*/
@RestController
@RequestMapping("/cms/job")
@Api(tags = "后台:岗位管理")
@Anonymous
public class CmsJobController extends BaseController
{
@Autowired
private IJobService jobService;
@Autowired
SensitiveWordChecker sensitiveWordChecker;
@Autowired
private ICompanyService companyService;
@Autowired
private IJobCollectionService jobCollectionService;
@Autowired
private IAppUserService appUserService;
@Autowired
private IJobApplyService iJobApplyService;
@Autowired
private IAppReviewJobService iAppReviewJobService;
/**
* 查询岗位列表
*/
@ApiOperation("查询岗位列表")
// @PreAuthorize("@ss.hasPermi('cms:job:list')")
@GetMapping("/list")
public TableDataInfo list(Job job)
{
if (RoleUtils.isCompanyAdmin()) {
Company company = companyService.queryCodeCompany(RoleUtils.getCurrentUseridCard());
job.setCompanyId(Objects.nonNull(company) ? company.getCompanyId() : null);
}
startPage();
List<Job> list = jobService.selectJobList(job);
return getDataTable(list);
}
/**
* 获取岗位详细信息
*/
@ApiOperation("获取岗位详细信息")
// @PreAuthorize("@ss.hasPermi('bussiness:job:query')")
@GetMapping(value = "/{jobId}")
public AjaxResult getInfo(@PathVariable("jobId") Long jobId)
{
return success(jobService.selectJobByJobId(jobId));
}
/**
* 导出岗位列表
*/
@ApiOperation("导出岗位列表")
// @PreAuthorize("@ss.hasPermi('bussiness:job:export')")
@Log(title = "岗位", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, Job job)
{
List<Job> list = jobService.selectJobList(job);
ExcelUtil<Job> util = new ExcelUtil<Job>(Job.class);
util.exportExcel(response, list, "岗位数据");
}
/**
* 新增岗位
*/
@ApiOperation("新增岗位")
// @PreAuthorize("@ss.hasPermi('bussiness:job:add')")
@Log(title = "岗位", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody Job job)
{
// 校验描述中的敏感词
List<String> sensitiveWords = sensitiveWordChecker.checkSensitiveWords(job.getDescription());
if (!sensitiveWords.isEmpty()) {
String errorMsg = "描述中包含敏感词:" + String.join("", sensitiveWords);
return AjaxResult.error(errorMsg);
}
// 无敏感词,执行插入
return toAjax(jobService.insertJob(job));
}
/**
* 修改岗位
*/
@ApiOperation("修改岗位")
// @PreAuthorize("@ss.hasPermi('bussiness:job:edit')")
@Log(title = "岗位", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody Job job)
{
// 校验描述中的敏感词
List<String> sensitiveWords = sensitiveWordChecker.checkSensitiveWords(job.getDescription());
if (!sensitiveWords.isEmpty()) {
String errorMsg = "描述中包含敏感词:" + String.join("", sensitiveWords);
return AjaxResult.error(errorMsg);
}
return toAjax(jobService.updateJob(job));
}
/**
* 删除岗位
*/
@ApiOperation("删除岗位")
// @PreAuthorize("@ss.hasPermi('bussiness:job:remove')")
@Log(title = "岗位", businessType = BusinessType.DELETE)
@DeleteMapping("/{jobIds}")
public AjaxResult remove(@PathVariable Long[] jobIds)
{
return toAjax(jobService.deleteJobByJobIds(jobIds));
}
@ApiOperation("候选人查询")
@Log(title = "岗位", businessType = BusinessType.DELETE)
@GetMapping("/candidates")
@PreAuthorize("@ss.hasPermi('bussiness:job:candidates')")
public TableDataInfo candidates(Long jobId)
{
startPage();
List<CandidateVO> list = jobService.candidates(jobId);
return getDataTable(list);
}
@ApiOperation("获取推荐岗位")
@GetMapping("/recommend")
public AjaxResult recommend(ESJobSearch esJobSearch)
{
if (RoleUtils.isCompanyAdmin()) {
esJobSearch.setCode(RoleUtils.getCurrentUseridCard());
esJobSearch.setUserType(StringUtil.IS_COMPANY_USER);
}
esJobSearch.setPageSize(20);
List<ESJobDocument> jobList = jobService.sysRecommend(esJobSearch);
List<Job> jobs=new ArrayList<>();
jobList.stream().forEach(it->{
Job job=new Job();
BeanUtils.copyBeanProp(job, it);
job.setCompanyVo(JSON.parseObject(it.getCompanyVoJson(), CompanyVo.class));
jobs.add(job);
});
return success(jobs);
}
@ApiOperation("获取所有岗位")
@GetMapping("/selectAllJob")
public AjaxResult selectAllJob()
{
List<Job> jobList = jobService.selectAllJob();
return success(jobList);
}
@PostMapping("/collection")
@ApiOperation("用户收藏")
public AjaxResult jobCollection(@RequestBody JobCollection jobCollection)
{
if(jobCollection.getJobId()==null){
return AjaxResult.error("岗位id为空");
}
if(!SecurityUtils.isLogin()){
return AjaxResult.error("用户未登录!");
}
if(jobCollection.getUserId()==null){
String idCard=RoleUtils.getCurrentUseridCard();
AppUser appUser=appUserService.selectAppuserByIdcard(idCard);
if(appUser==null){
return AjaxResult.error("用户信息未完善,请完善身份证信息!");
}else{
jobCollection.setUserId(appUser.getUserId());
}
}
return toAjax(jobCollectionService.pcJobCollection(jobCollection));
}
@ApiOperation("获取用户岗位收藏列表")
@GetMapping("/getAppUserYhsc")
public AjaxResult getAppUserYhsc(JobCollection jobCollection)
{
if(!SecurityUtils.isLogin()){
return AjaxResult.error("用户未登录!");
}
if(jobCollection.getUserId()==null){
String idCard=RoleUtils.getCurrentUseridCard();
AppUser appUser=appUserService.selectAppuserByIdcard(idCard);
if(appUser==null){
return AjaxResult.error("用户信息未完善,请完善身份证信息!");
}else{
jobCollection.setUserId(appUser.getUserId());
}
}
return success(jobCollectionService.selectJobCollectionListJob(jobCollection));
}
@ApiOperation("获取用户岗位申请列表")
@GetMapping("/getAppUserYhsq")
public AjaxResult getAppUserYhsq(JobApply jobApply)
{
if(!SecurityUtils.isLogin()){
return AjaxResult.error("用户未登录!");
}
if(jobApply.getUserId()==null){
String idCard=RoleUtils.getCurrentUseridCard();
AppUser appUser=appUserService.selectAppuserByIdcard(idCard);
if(appUser==null){
return AjaxResult.error("用户信息未完善,请完善身份证信息!");
}else{
jobApply.setUserId(appUser.getUserId());
}
}
return success(iJobApplyService.selectJobApplyListJob(jobApply));
}
@ApiOperation("获取用户岗位访问足迹列表")
@GetMapping("/getAppUserYhfwzj")
public AjaxResult getAppUserYhfwzj(AppReviewJob appReviewJob)
{
if(!SecurityUtils.isLogin()){
return AjaxResult.error("用户未登录!");
}
if(appReviewJob.getUserId()==null){
String idCard=RoleUtils.getCurrentUseridCard();
AppUser appUser=appUserService.selectAppuserByIdcard(idCard);
if(appUser==null){
return AjaxResult.error("用户信息未完善,请完善身份证信息!");
}else{
appReviewJob.setUserId(appUser.getUserId());
}
}
return success(iAppReviewJobService.selectAppReviewJobListJob(appReviewJob));
}
@PostMapping("/collectionCancel")
@ApiOperation("取消收藏")
public AjaxResult pcCancel(@RequestBody JobCollection jobCollection)
{
if(jobCollection.getJobId()==null){
return AjaxResult.error("岗位id为空");
}
if(!SecurityUtils.isLogin()){
return AjaxResult.error("用户未登录!");
}
if(jobCollection.getUserId()==null){
String idCard=RoleUtils.getCurrentUseridCard();
AppUser appUser=appUserService.selectAppuserByIdcard(idCard);
if(appUser==null){
return AjaxResult.error("用户信息未完善,请完善身份证信息!");
}else{
jobCollection.setUserId(appUser.getUserId());
}
}
return toAjax(jobCollectionService.pcCancel(jobCollection));
}
@PostMapping("/browse")
@ApiOperation("岗位浏览")
public AjaxResult browse(@RequestBody AppReviewJob appReviewJob)
{
if(appReviewJob.getJobId()==null){
return AjaxResult.error("岗位id为空");
}
if(!SecurityUtils.isLogin()){
return AjaxResult.error("用户未登录!");
}
if(StringUtils.isEmpty(appReviewJob.getReviewDate())){
appReviewJob.setReviewDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,new Date()));
}
if(appReviewJob.getUserId()==null){
String idCard=RoleUtils.getCurrentUseridCard();
AppUser appUser=appUserService.selectAppuserByIdcard(idCard);
if(appUser==null){
return AjaxResult.error("用户信息未完善,请完善身份证信息!");
}else{
appReviewJob.setUserId(appUser.getUserId());
}
}
return toAjax(iAppReviewJobService.insertAppReviewJob(appReviewJob));
}
}

View File

@@ -0,0 +1,211 @@
package com.ruoyi.cms.controller.cms;
import com.ruoyi.cms.domain.AppNotice;
import com.ruoyi.cms.domain.Notice;
import com.ruoyi.cms.domain.vo.NoticeTotal;
import com.ruoyi.cms.service.IAppNoticeService;
import com.ruoyi.cms.service.IAppUserService;
import com.ruoyi.cms.util.notice.NoticeUtils;
import com.ruoyi.cms.util.RoleUtils;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.HttpStatus;
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.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 公告 信息操作处理
*
* @author ruoyi
*/
@RestController
@RequestMapping("/cms/notice")
public class CmsNoticeController extends BaseController
{
@Autowired
private IAppNoticeService noticeService;
@Autowired
private IAppUserService appUserService;
/**
* 获取通知公告列表
*/
@PreAuthorize("@ss.hasPermi('system:notice:list')")
@GetMapping("/list")
public TableDataInfo list(AppNotice notice)
{
startPage();
List<AppNotice> list = noticeService.selectNoticeList(notice);
return getDataTable(list);
}
/**
* 根据通知公告编号获取详细信息
*/
@PreAuthorize("@ss.hasPermi('system:notice:query')")
@GetMapping(value = "/{noticeId}")
public AjaxResult getInfo(@PathVariable Long noticeId)
{
return success(noticeService.selectNoticeById(noticeId));
}
/**
* 新增通知公告
*/
@PreAuthorize("@ss.hasPermi('system:notice:add')")
@Log(title = "通知公告", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Validated @RequestBody AppNotice notice)
{
notice.setCreateBy(getUsername());
return toAjax(noticeService.insertNotice(notice));
}
/**
* 修改通知公告
*/
@PreAuthorize("@ss.hasPermi('system:notice:edit')")
@Log(title = "通知公告", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@Validated @RequestBody AppNotice notice)
{
notice.setUpdateBy(getUsername());
return toAjax(noticeService.updateNotice(notice));
}
/**
* 删除通知公告
*/
@PreAuthorize("@ss.hasPermi('system:notice:remove')")
@Log(title = "通知公告", businessType = BusinessType.DELETE)
@DeleteMapping("/{noticeIds}")
public AjaxResult remove(@PathVariable Long[] noticeIds)
{
return toAjax(noticeService.deleteNoticeByIds(noticeIds));
}
@ApiOperation("pc端获取消息列表")
@GetMapping("/appNoticList")
public TableDataInfo selectListAppNotics(Notice notice)
{
if(!SecurityUtils.isLogin()){
error(HttpStatus.ERROR,"未登录!");
}
if(notice.getUserId()==null){
String idCard= RoleUtils.getCurrentUseridCard();
AppUser appUser=appUserService.selectAppuserByIdcard(idCard);
if(appUser==null){
error(HttpStatus.ERROR,"用户信息未完善,请完善身份证信息!");
}else{
notice.setUserId(appUser.getUserId());
}
}
startPage();
List<Notice> notices = noticeService.selectListAppNotics(notice);
return getDataTable(notices);
}
@ApiOperation("pc端获取未读消息列表")
@GetMapping("/appNoticReadList")
public TableDataInfo appNoticReadList(Notice notice)
{
if(!SecurityUtils.isLogin()){
error(HttpStatus.ERROR,"未登录!");
}
if(notice.getUserId()==null){
String idCard= RoleUtils.getCurrentUseridCard();
AppUser appUser=appUserService.selectAppuserByIdcard(idCard);
if(appUser==null){
error(HttpStatus.ERROR,"用户信息未完善,请完善身份证信息!");
}else{
notice.setUserId(appUser.getUserId());
}
}
startPage();
List<Notice> notices = noticeService.selectListAppNotRead(notice);
return getDataTable(notices);
}
@ApiOperation("pc端获已读消息列表")
@GetMapping("/appNoticYdList")
public TableDataInfo appNoticYdList(Notice notice)
{
if(!SecurityUtils.isLogin()){
error(HttpStatus.ERROR,"未登录!");
}
if(notice.getUserId()==null){
String idCard= RoleUtils.getCurrentUseridCard();
AppUser appUser=appUserService.selectAppuserByIdcard(idCard);
if(appUser==null){
error(HttpStatus.ERROR,"用户信息未完善,请完善身份证信息!");
}else{
notice.setUserId(appUser.getUserId());
}
}
startPage();
notice.setIsRead(NoticeUtils.NOTICE_YD);
notice.setRemark(NoticeUtils.NOTICE_REMARK);
List<Notice> notices = noticeService.selectListAppNotices(notice);
return getDataTable(notices);
}
@ApiOperation("系统通知标记已读")
@PostMapping("/read/sysNotice")
public AjaxResult sysNotice(@RequestParam String id)
{
Long userId=null;
if(!SecurityUtils.isLogin()){
return AjaxResult.error("未登录!");
}
if(userId==null){
String idCard= RoleUtils.getCurrentUseridCard();
AppUser appUser=appUserService.selectAppuserByIdcard(idCard);
if(appUser==null){
return AjaxResult.error("用户信息未完善,请完善身份证信息!");
}else{
userId=appUser.getUserId();
}
}
noticeService.readSysNotices(id,userId);
return AjaxResult.success();
}
/**
* 获取消息条数
*/
@ApiOperation("获取移动端用户消息条数")
@GetMapping("/noticTotal")
public AjaxResult getNoticTotal(Notice notice){
if(!SecurityUtils.isLogin()){
error(HttpStatus.ERROR,"未登录!");
}
if(notice.getUserId()==null){
String idCard= RoleUtils.getCurrentUseridCard();
AppUser appUser=appUserService.selectAppuserByIdcard(idCard);
if(appUser==null){
error(HttpStatus.ERROR,"用户信息未完善,请完善身份证信息!");
}else{
notice.setUserId(appUser.getUserId());
}
}
startPage();
NoticeTotal notices = noticeService.noticTotal(notice);
return success(notices);
}
@ApiOperation("获取移动端用户消息条数")
@DeleteMapping("/deleteNotice/{ids}")
public AjaxResult deleteNotice(@PathVariable Long[] ids){
return success(noticeService.removeNotice(ids));
}
}

View File

@@ -0,0 +1,104 @@
package com.ruoyi.cms.controller.cms;
import com.ruoyi.cms.service.AppSkillService;
import com.ruoyi.cms.service.IAppUserService;
import com.ruoyi.cms.util.RoleUtils;
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.AppSkill;
import com.ruoyi.common.core.domain.entity.AppUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import 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("/cms/appskill")
@Api(tags = "后台:用户技能")
public class CmsSkillController extends BaseController {
@Autowired
private AppSkillService appSkillService;
@Autowired
private IAppUserService appUserService;
/**
* 列表
*/
@ApiOperation("获取技能列表")
@GetMapping("/list")
public TableDataInfo list(AppSkill appSkill){
startPage();
List<AppSkill> list=appSkillService.getList(appSkill);
return getDataTable(list);
}
/**
* 信息
*/
@ApiOperation("获取技能详情")
@GetMapping(value = "/{id}")
public AjaxResult info(@PathVariable("id") Long id){
return success(appSkillService.getAppskillById(id));
}
/**
* 保存
*/
@ApiOperation("新增技能")
@Log(title = "技能", businessType = BusinessType.INSERT)
@PostMapping("/add")
public AjaxResult save(@RequestBody AppSkill appSkill){
if(!SecurityUtils.isLogin()){
AppUser appUser=appUserService.selectAppuserByIdcard(RoleUtils.getCurrentUseridCard());
if(appUser==null){
return AjaxResult.error("未传递userId!");
}
appSkill.setUserId(appUser.getUserId());
}
return toAjax(appSkillService.insertAppskill(appSkill));
}
/**
* 修改
*/
@ApiOperation("修改技能")
@Log(title = "技能", businessType = BusinessType.UPDATE)
@PutMapping("/edit")
public AjaxResult update(@RequestBody AppSkill appSkill){
if (appSkill.getId()==null){
return AjaxResult.error("参数id未传递!");
}
return toAjax(appSkillService.updateAppskillById(appSkill));
}
/**
* 删除
*/
@Log(title = "删除技能", businessType = BusinessType.DELETE)
@ApiOperation("技能")
@DeleteMapping("/{ids}")
public AjaxResult delete(@ApiParam("主键ids") @PathVariable Long[] ids){
if(ids==null){
return AjaxResult.error("参数ids未传递!");
}
return toAjax(appSkillService.removeAppskillIds(ids));
}
}

View File

@@ -0,0 +1,113 @@
package com.ruoyi.cms.controller.cms;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.ruoyi.cms.domain.CommercialArea;
import com.ruoyi.cms.service.ICommercialAreaService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 商圈Controller
*
* @author Lishundong
* @date 2024-11-12
*/
@RestController
@RequestMapping("/cms/area")
@Api(tags = "后台:商圈")
public class CommercialAreaController extends BaseController
{
@Autowired
private ICommercialAreaService commercialAreaService;
/**
* 查询商圈列表
*/
@ApiOperation("查询商圈列表")
@PreAuthorize("@ss.hasPermi('cms:area:list')")
@GetMapping("/list")
public TableDataInfo list(CommercialArea commercialArea)
{
startPage();
List<CommercialArea> list = commercialAreaService.selectCommercialAreaList(commercialArea);
return getDataTable(list);
}
/**
* 导出商圈列表
*/
@ApiOperation("导出商圈列表")
@PreAuthorize("@ss.hasPermi('cms:area:export')")
@Log(title = "商圈", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, CommercialArea commercialArea)
{
List<CommercialArea> list = commercialAreaService.selectCommercialAreaList(commercialArea);
ExcelUtil<CommercialArea> util = new ExcelUtil<CommercialArea>(CommercialArea.class);
util.exportExcel(response, list, "商圈数据");
}
/**
* 获取商圈详细信息
*/
@ApiOperation("获取商圈详细信息")
@PreAuthorize("@ss.hasPermi('cms:area:query')")
@GetMapping(value = "/{commercialAreaId}")
public AjaxResult getInfo(@PathVariable("commercialAreaId") Long commercialAreaId)
{
return success(commercialAreaService.selectCommercialAreaByCommercialAreaId(commercialAreaId));
}
/**
* 新增商圈
*/
@ApiOperation("新增商圈")
@PreAuthorize("@ss.hasPermi('cms:area:add')")
@Log(title = "商圈", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody CommercialArea commercialArea)
{
return toAjax(commercialAreaService.insertCommercialArea(commercialArea));
}
/**
* 修改商圈
*/
@ApiOperation("修改商圈")
@PreAuthorize("@ss.hasPermi('cms:area:edit')")
@Log(title = "商圈", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody CommercialArea commercialArea)
{
return toAjax(commercialAreaService.updateCommercialArea(commercialArea));
}
/**
* 删除商圈
*/
@ApiOperation("删除商圈")
@PreAuthorize("@ss.hasPermi('cms:area:remove')")
@Log(title = "商圈", businessType = BusinessType.DELETE)
@DeleteMapping("/{commercialAreaIds}")
public AjaxResult remove(@PathVariable Long[] commercialAreaIds)
{
return toAjax(commercialAreaService.deleteCommercialAreaByCommercialAreaIds(commercialAreaIds));
}
}

View File

@@ -0,0 +1,116 @@
package com.ruoyi.cms.controller.cms;
import java.sql.Array;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.ruoyi.cms.domain.CompanyCard;
import com.ruoyi.cms.service.ICompanyCardService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 公司卡片Controller
*
* @author ${author}
* @date 2025-02-18
*/
@RestController
@RequestMapping("/cms/card")
@Api(tags = "公司卡片")
public class CompanyCardController extends BaseController
{
@Autowired
private ICompanyCardService companyCardService;
/**
* 查询公司卡片列表
*/
@ApiOperation("查询公司卡片列表")
@PreAuthorize("@ss.hasPermi('system:card:list')")
@GetMapping("/list")
public TableDataInfo list(CompanyCard companyCard)
{
startPage();
List<CompanyCard> list = companyCardService.selectCompanyCardList(companyCard);
return getDataTable(list);
}
/**
* 导出公司卡片列表
*/
@ApiOperation("导出公司卡片列表")
@PreAuthorize("@ss.hasPermi('system:card:export')")
@Log(title = "公司卡片", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, CompanyCard companyCard)
{
List<CompanyCard> list = companyCardService.selectCompanyCardList(companyCard);
ExcelUtil<CompanyCard> util = new ExcelUtil<CompanyCard>(CompanyCard.class);
util.exportExcel(response, list, "公司卡片数据");
}
/**
* 获取公司卡片详细信息
*/
@ApiOperation("获取公司卡片详细信息")
@PreAuthorize("@ss.hasPermi('system:card:query')")
@GetMapping(value = "/{companyCardId}")
public AjaxResult getInfo(@PathVariable("companyCardId") Long companyCardId)
{
return success(companyCardService.selectCompanyCardByCompanyCardId(companyCardId));
}
/**
* 新增公司卡片
*/
@ApiOperation("新增公司卡片")
@PreAuthorize("@ss.hasPermi('system:card:add')")
@Log(title = "公司卡片", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody CompanyCard companyCard)
{
return toAjax(companyCardService.insertCompanyCard(companyCard));
}
/**
* 修改公司卡片
*/
@ApiOperation("修改公司卡片")
@PreAuthorize("@ss.hasPermi('system:card:edit')")
@Log(title = "公司卡片", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody CompanyCard companyCard)
{
return toAjax(companyCardService.updateCompanyCard(companyCard));
}
/**
* 删除公司卡片
*/
@ApiOperation("删除公司卡片")
@PreAuthorize("@ss.hasPermi('system:card:remove')")
@Log(title = "公司卡片", businessType = BusinessType.DELETE)
@DeleteMapping("/{companyCardIds}")
public AjaxResult remove(@PathVariable Long[] companyCardIds)
{
return toAjax(companyCardService.deleteCompanyCardByCompanyCardIds(companyCardIds));
}
}

View File

@@ -0,0 +1,42 @@
package com.ruoyi.cms.controller.cms;
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;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 公司联系人
*
* @author
* @email
* @date 2025-09-30 15:57:06
*/
@RestController
@RequestMapping("/cms/companycontact")
@Api(tags = "后台:公司联系人")
public class CompanyContactController extends BaseController {
@Autowired
private CompanyContactService companyContactService;
/**
* 列表
*/
@ApiOperation("公司联系人列表")
@PreAuthorize("@ss.hasPermi('cms:companycontact:list')")
@RequestMapping("/list")
public TableDataInfo list(CompanyContact companyContact){
List<CompanyContact> list=companyContactService.getSelectList(companyContact);
return getDataTable(list);
}
}

View File

@@ -0,0 +1,141 @@
package com.ruoyi.cms.controller.cms;
import com.ruoyi.cms.util.RoleUtils;
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;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 公司Controller
*
* @author lishundong
* @date 2024-09-04
*/
@RestController
@RequestMapping("/cms/company")
@Api(tags = "后台:公司管理")
public class CompanyController extends BaseController
{
@Autowired
private ICompanyService companyService;
/**
* 查询公司列表
*/
@ApiOperation("查询公司列表")
// @PreAuthorize("@ss.hasPermi('cms:company:list')")
@GetMapping("/list")
public TableDataInfo list(Company company)
{
if (RoleUtils.isCompanyAdmin()) {
company.setCode(RoleUtils.getCurrentUseridCard());
}
startPage();
List<Company> list = companyService.selectCompanyList(company);
return getDataTable(list);
}
/**
* 导出公司列表
*/
@ApiOperation("导出公司列表")
// @PreAuthorize("@ss.hasPermi('app:company:export')")
@Log(title = "公司", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, Company company)
{
List<Company> list = companyService.selectCompanyList(company);
ExcelUtil<Company> util = new ExcelUtil<Company>(Company.class);
util.exportExcel(response, list, "公司数据");
}
/**
* 获取公司详细信息
*/
@ApiOperation("获取公司详细信息")
// @PreAuthorize("@ss.hasPermi('app:company:query')")
@GetMapping(value = "/{companyId}")
public AjaxResult getInfo(@PathVariable("companyId") Long companyId)
{
return success(companyService.selectCompanyByCompanyId(companyId));
}
/**
* 新增公司
*/
@ApiOperation("新增公司")
// @PreAuthorize("@ss.hasPermi('app:company:add')")
@Log(title = "公司", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody Company company)
{
return toAjax(companyService.insertCompany(company));
}
/**
* 修改公司
*/
@ApiOperation("修改公司")
// @PreAuthorize("@ss.hasPermi('app:company:edit')")
@Log(title = "公司", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody Company company)
{
return toAjax(companyService.updateCompany(company));
}
/**
* 删除公司
*/
@ApiOperation("删除公司")
// @PreAuthorize("@ss.hasPermi('app:company:remove')")
@Log(title = "公司", businessType = BusinessType.DELETE)
@DeleteMapping("/{companyIds}")
public AjaxResult remove(@PathVariable Long[] companyIds)
{
return toAjax(companyService.deleteCompanyByCompanyIds(companyIds));
}
@ApiOperation("企业资质审核列表")
@PreAuthorize("@ss.hasPermi('app:company:approval:list')")
@GetMapping("/approval/list")
public TableDataInfo approvalList(Company company)
{
startPage();
List<Company> list = companyService.approvalList(company);
return getDataTable(list);
}
@ApiOperation("企业资质修改")
// @PreAuthorize("@ss.hasPermi('app:company:approval:edit')")
@GetMapping("/approval/edit")
public AjaxResult approvalEdit(Company company)
{
startPage();
List<Company> list = companyService.approvalList(company);
return AjaxResult.success();
}
@ApiOperation("查询公司列表")
// @PreAuthorize("@ss.hasPermi('cms:company:list')")
@GetMapping("/listPage")
public TableDataInfo listPage(Company company)
{
startPage();
List<Company> list = companyService.selectCompanyList(company);
return getDataTable(list);
}
}

View File

@@ -0,0 +1,71 @@
package com.ruoyi.cms.controller.cms;
import com.ruoyi.cms.domain.EmployeeConfirm;
import com.ruoyi.cms.service.EmployeeConfirmService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 新入职员工确认信息
*
* @author
* @email
* @date 2025-10-10 10:42:16
*/
@RestController
@RequestMapping("/cms/employeeConfirm")
@Api(tags = "后台:新入职员工确认信息")
public class EmployeeConfirmController extends BaseController {
@Autowired
private EmployeeConfirmService employeeConfirmService;
/**
* 列表
*/
@ApiOperation("新入职员工确认信息列表")
// @PreAuthorize("@ss.hasPermi('cms:employeeConfirm:list')")
@RequestMapping("/list")
public TableDataInfo list(EmployeeConfirm employeeConfirm){
List<EmployeeConfirm> list=employeeConfirmService.getEmployeeConfirmList(employeeConfirm);
return getDataTable(list);
}
/**
* 保存
*/
@ApiOperation("新增新入职员工确认信息")
// @PreAuthorize("@ss.hasPermi('cms:employeeConfirm:add')")
@Log(title = "职员工确认信息", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody EmployeeConfirm employeeConfirm){
return toAjax(employeeConfirmService.insertEmployeeConfirm(employeeConfirm));
}
@ApiOperation("修改新入职员工确认信息")
// @PreAuthorize("@ss.hasPermi('cms:employeeConfirm:edit')")
@Log(title = "职员工确认信息", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody EmployeeConfirm employeeConfirm){
return toAjax(employeeConfirmService.updateEmployeeConfirm(employeeConfirm));
}
@ApiOperation("删除新入职员工确认信息")
// @PreAuthorize("@ss.hasPermi('app:employeeConfirm:remove')")
@Log(title = "公司", businessType = BusinessType.DELETE)
@DeleteMapping("/{employeeConfirmIds}")
public AjaxResult remove(@PathVariable Long[] employeeConfirmIds)
{
return toAjax(employeeConfirmService.deleteEmployeeConfirmIds(employeeConfirmIds));
}
}

View File

@@ -0,0 +1,134 @@
package com.ruoyi.cms.controller.cms;
import java.util.List;
import com.ruoyi.common.core.domain.entity.Industry;
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.ruoyi.cms.service.IIndustryService;
import com.ruoyi.common.core.page.TableDataInfo;
import javax.servlet.http.HttpServletResponse;
/**
* 行业Controller
*
* @author LishunDong
* @date 2024-11-12
*/
@RestController
@RequestMapping("/cms/industry")
@Api(tags = "后台:行业管理")
public class IndustryController extends BaseController
{
@Autowired
private IIndustryService industryService;
/**
* 查询行业列表
*/
@ApiOperation("查询行业列表")
@PreAuthorize("@ss.hasPermi('cms:industry:list')")
@GetMapping("/list")
public TableDataInfo list(Industry industry)
{
startPage();
List<Industry> list = industryService.selectIndustryList(industry);
return getDataTable(list);
}
@ApiOperation("行业树结构")
@PreAuthorize("@ss.hasPermi('cms:industry:list')")
@GetMapping("/treeselect")
public AjaxResult treeselect(Industry industry)
{
List<Industry> industryList = industryService.selectIndustryList(industry);
return success(industryService.buildIndustryTreeSelect(industryList));
}
/**
* 导出行业列表
*/
@ApiOperation("导出行业列表")
@PreAuthorize("@ss.hasPermi('cms:industry:export')")
@Log(title = "行业", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, Industry industry)
{
List<Industry> list = industryService.selectIndustryList(industry);
ExcelUtil<Industry> util = new ExcelUtil<Industry>(Industry.class);
util.exportExcel(response, list, "行业数据");
}
/**
* 获取行业详细信息
*/
@ApiOperation("获取行业详细信息")
@PreAuthorize("@ss.hasPermi('cms:industry:query')")
@GetMapping(value = "/{industryId}")
public AjaxResult getInfo(@PathVariable("industryId") Long industryId)
{
return success(industryService.selectIndustryByIndustryId(industryId));
}
/**
* 新增行业
*/
@ApiOperation("新增行业")
@PreAuthorize("@ss.hasPermi('cms:industry:add')")
@Log(title = "行业", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody Industry industry)
{
return toAjax(industryService.insertIndustry(industry));
}
/**
* 修改行业
*/
@ApiOperation("修改行业")
@PreAuthorize("@ss.hasPermi('cms:industry:edit')")
@Log(title = "行业", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody Industry industry)
{
return toAjax(industryService.updateIndustry(industry));
}
/**
* 删除行业
*/
@ApiOperation("删除行业")
@PreAuthorize("@ss.hasPermi('cms:industry:remove')")
@Log(title = "行业", businessType = BusinessType.DELETE)
@DeleteMapping("/{industryId}")
public AjaxResult remove(@PathVariable Long industryId)
{
if (industryService.hasChildByIndustryId(industryId))
{
return warn("存在子行业,不允许删除");
}
Long[] industryIds = {industryId};
return toAjax(industryService.deleteIndustryByIndustryIds(industryIds));
}
@GetMapping("/import")
public AjaxResult importData()
{
industryService.importData();
return success();
}
}

View File

@@ -0,0 +1,95 @@
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.IAppUserService;
import com.ruoyi.cms.service.IJobApplyService;
import com.ruoyi.cms.util.RoleUtils;
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.core.domain.entity.Company;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
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.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")
@Api(tags = "后台:岗位申请")
public class JobApplyController extends BaseController {
@Autowired
IJobApplyService iJobApplyService;
@Autowired
private IAppUserService appUserService;
@GetMapping("/trendChart")
public AjaxResult trendChart(JobApply jobApply)
{
HashMap<String,Integer> 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, Job job)
{
List<CandidateVO> list = iJobApplyService.selectAppUserList(job);
ExcelUtil<CandidateVO> util = new ExcelUtil<CandidateVO>(CandidateVO.class);
util.exportExcel(response, list, "APP用户数据");
}
@ApiOperation("获取求职者列表")
@PreAuthorize("@ss.hasPermi('cms:jobApply:applyJobUserList')")
@GetMapping("/applyJobUserList")
public TableDataInfo applyJobList(AppUser appUser)
{
if (RoleUtils.isCompanyAdmin()) {
Company company=new Company();
company.setCode(RoleUtils.getCurrentUseridCard());
}
startPage();
List<CandidateVO> list = iJobApplyService.selectApplyJobUserList(appUser);
return getDataTable(list);
}
@PutMapping
@Log(title = "岗位", businessType = BusinessType.UPDATE)
@ApiOperation("用户申请岗位")
public AjaxResult apply(@RequestBody JobApply jobApply)
{
if(jobApply.getJobId()==null){
return AjaxResult.error("岗位id为空");
}
if(!SecurityUtils.isLogin()){
return AjaxResult.error("用户未登录!");
}
if(jobApply.getUserId()==null){
String idCard=RoleUtils.getCurrentUseridCard();
AppUser appUser=appUserService.selectAppuserByIdcard(idCard);
if(appUser==null){
return AjaxResult.error("用户信息未完善,请完善身份证信息!");
}else{
jobApply.setUserId(appUser.getUserId());
}
}
return success(iJobApplyService.applyComJob(jobApply));
}
}

View File

@@ -0,0 +1,43 @@
package com.ruoyi.cms.controller.cms;
import com.ruoyi.cms.domain.JobContact;
import com.ruoyi.cms.service.JobContactService;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.page.TableDataInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 岗位联系人
*
* @author
* @email
* @date 2025-09-30 15:57:06
*/
@RestController
@RequestMapping("/cms/jobcontact")
@Api(tags = "后台:岗位联系人")
public class JobContactController extends BaseController {
@Autowired
private JobContactService jobContactService;
/**
* 列表
*/
@ApiOperation("岗位联系人列表")
@PreAuthorize("@ss.hasPermi('cms:jobcontact:list')")
@RequestMapping("/list")
public TableDataInfo list(JobContact jobContact){
startPage();
List<JobContact> list = jobContactService.getSelectList(jobContact);
return getDataTable(list);
}
}

View File

@@ -0,0 +1,110 @@
package com.ruoyi.cms.controller.cms;
import java.util.List;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.ruoyi.cms.domain.JobFair;
import com.ruoyi.cms.service.IJobFairService;
import com.ruoyi.common.core.page.TableDataInfo;
import javax.servlet.http.HttpServletResponse;
/**
* 招聘会信息Controller
*
* @author lishundong
* @date 2024-09-04
*/
@RestController
@RequestMapping("/cms/fair")
@Api(tags = "后台:招聘会信息")
public class JobFairController extends BaseController
{
@Autowired
private IJobFairService jobFairService;
/**
* 查询招聘会信息列表
*/
@ApiOperation("查询招聘会信息列表")
@PreAuthorize("@ss.hasPermi('app:fair:list')")
@GetMapping("/list")
public TableDataInfo list(JobFair jobFair)
{
startPage();
List<JobFair> list = jobFairService.selectJobFairList(jobFair);
return getDataTable(list);
}
/**
* 导出招聘会信息列表
*/
@ApiOperation("导出招聘会信息列表")
@PreAuthorize("@ss.hasPermi('app:fair:export')")
@Log(title = "招聘会信息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, JobFair jobFair)
{
List<JobFair> list = jobFairService.selectJobFairList(jobFair);
ExcelUtil<JobFair> util = new ExcelUtil<JobFair>(JobFair.class);
util.exportExcel(response, list, "招聘会信息数据");
}
/**
* 获取招聘会信息详细信息
*/
@ApiOperation("获取招聘会信息详细信息")
@PreAuthorize("@ss.hasPermi('app:fair:query')")
@GetMapping(value = "/{jobFairId}")
public AjaxResult getInfo(@PathVariable("jobFairId") Long jobFairId)
{
return success(jobFairService.selectJobFairByJobFairId(jobFairId));
}
/**
* 新增招聘会信息
*/
@ApiOperation("新增招聘会信息")
@PreAuthorize("@ss.hasPermi('app:fair:add')")
@Log(title = "招聘会信息", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody JobFair jobFair)
{
return toAjax(jobFairService.insertJobFair(jobFair));
}
/**
* 修改招聘会信息
*/
@ApiOperation("修改招聘会信息")
@PreAuthorize("@ss.hasPermi('app:fair:edit')")
@Log(title = "招聘会信息", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody JobFair jobFair)
{
return toAjax(jobFairService.updateJobFair(jobFair));
}
/**
* 删除招聘会信息
*/
@ApiOperation("删除招聘会信息")
@PreAuthorize("@ss.hasPermi('app:fair:remove')")
@Log(title = "招聘会信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{jobFairIds}")
public AjaxResult remove(@PathVariable Long[] jobFairIds)
{
return toAjax(jobFairService.deleteJobFairByJobFairIds(jobFairIds));
}
}

View File

@@ -0,0 +1,142 @@
package com.ruoyi.cms.controller.cms;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.cms.domain.BussinessDictData;
import com.ruoyi.common.core.domain.entity.Industry;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.ruoyi.common.core.domain.entity.JobTitle;
import com.ruoyi.cms.service.IJobTitleService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 岗位Controller
*
* @author Lishundong
* @date 2024-11-12
*/
@RestController
@RequestMapping("/cms/job/titile")
@Api(tags = "后台:职位接口")
public class JobTitleController extends BaseController
{
@Autowired
private IJobTitleService jobTitleService;
/**
* 查询岗位列表
*/
@ApiOperation("查询岗位列表")
@PreAuthorize("@ss.hasPermi('cms:title:list')")
@GetMapping("/list")
public TableDataInfo list(JobTitle jobTitle)
{
startPage();
List<JobTitle> list = jobTitleService.selectJobTitleList(jobTitle);
return getDataTable(list);
}
/**
* 导出岗位列表
*/
@ApiOperation("导出岗位列表")
@PreAuthorize("@ss.hasPermi('cms:title:export')")
@Log(title = "岗位", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, JobTitle jobTitle)
{
List<JobTitle> list = jobTitleService.selectJobTitleList(jobTitle);
ExcelUtil<JobTitle> util = new ExcelUtil<JobTitle>(JobTitle.class);
util.exportExcel(response, list, "岗位数据");
}
/**
* 获取岗位详细信息
*/
@ApiOperation("获取岗位详细信息")
@PreAuthorize("@ss.hasPermi('cms:title:query')")
@GetMapping(value = "/{jobId}")
public AjaxResult getInfo(@PathVariable("jobId") Long jobId)
{
return success(jobTitleService.selectJobTitleByJobId(jobId));
}
/**
* 新增岗位
*/
@ApiOperation("新增岗位")
@PreAuthorize("@ss.hasPermi('cms:title:add')")
@Log(title = "岗位", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody JobTitle jobTitle)
{
return toAjax(jobTitleService.insertJobTitle(jobTitle));
}
/**
* 修改岗位
*/
@ApiOperation("修改岗位")
@PreAuthorize("@ss.hasPermi('cms:title:edit')")
@Log(title = "岗位", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody JobTitle jobTitle)
{
return toAjax(jobTitleService.updateJobTitle(jobTitle));
}
/**
* 删除岗位
*/
@ApiOperation("删除岗位")
@PreAuthorize("@ss.hasPermi('cms:title:remove')")
@Log(title = "岗位", businessType = BusinessType.DELETE)
@DeleteMapping("/{jobId}")
public AjaxResult remove(@PathVariable Long jobId)
{
if (jobTitleService.hasChildByJobId(jobId))
{
return warn("存在子岗位,不允许删除");
}
Long[] jobIds = {jobId};
return toAjax(jobTitleService.deleteJobTitleByJobIds(jobIds));
}
@ApiOperation("行业树结构")
@GetMapping("/treeselect")
public AjaxResult treeselect(JobTitle jobTitle)
{
List<JobTitle> jobTitleList = jobTitleService.selectJobTitleList(jobTitle);
return success(jobTitleService.buildJobTitleTreeSelect(jobTitleList));
}
@GetMapping("/import")
public AjaxResult importJobTitle()
{
jobTitleService.importJobTitle();
return success();
}
@GetMapping("/levelOne")
public AjaxResult levelOne()
{
List<JobTitle> result = jobTitleService.levelOne();
return success(result);
}
}

View File

@@ -0,0 +1,171 @@
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.Anonymous;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;
/**
* 敏感词库
*
* @author
* @email
* @date 2025-10-10 10:42:16
*/
@RestController
@RequestMapping("/cms/sensitiveworddata")
@Api(tags = "后台:敏感词库")
@Anonymous
public class SensitiveWordDataController extends BaseController {
@Autowired
private SensitiveWordDataService sensitiveWordDataService;
/**
* 列表
*/
@ApiOperation("敏感词库详细信息")
@GetMapping("/list")
public TableDataInfo list(SensitiveWordData sensitiveWordData){
startPage();
List<SensitiveWordData> list = sensitiveWordDataService.selectSensitiveworddataList(sensitiveWordData);
return getDataTable(list);
}
/**
* 获取详细信息
*/
@ApiOperation("获取敏感词库详细信息")
@GetMapping(value = "/{id}")
public AjaxResult list(@PathVariable("id") Long id){
return success(sensitiveWordDataService.selectById(id));
}
/**
* 保存
*/
@ApiOperation("新增敏感词")
@Log(title = "敏感词", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult save(@RequestBody SensitiveWordData sensitiveWordData){
return toAjax(sensitiveWordDataService.insertSensitiveworddata(sensitiveWordData));
}
/**
* 修改
*/
@ApiOperation("修改敏感词")
@Log(title = "敏感词", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody SensitiveWordData sensitiveWordData){
return toAjax(sensitiveWordDataService.updateSensitiveworddata(sensitiveWordData));
}
/**
* 删除敏感词
*/
@ApiOperation("删除敏感词")
@Log(title = "敏感词", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
if(ids.length==0){
return AjaxResult.error("请传递参数!");
}
return toAjax(sensitiveWordDataService.deleteSensitiveworddataIds(ids));
}
/**
* 通用上传请求(单个)
*/
@PostMapping("/exoprt")
public AjaxResult uploadFile(@RequestParam("file") MultipartFile file) throws Exception
{
// 参数校验
if (file.isEmpty()) {
return AjaxResult.error("上传文件不能为空");
}
String fileName = file.getOriginalFilename();
//类型验证
if (fileName == null || !fileName.endsWith(".xlsx") && !fileName.endsWith(".xls")) {
return AjaxResult.error("请上传Excel格式的文件");
}
//名称验证
if (fileName == null || !"mgc.xlsx".equals(fileName)) {
return AjaxResult.error("请上传正确的模板文件mgc.xlsx");
}
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();
}
@PostMapping("/downloadModel")
public void downloadModel(HttpServletRequest request, HttpServletResponse response)throws Exception{
String name = "mgc.xlsx";
String pathFile="/data/downloadmodel/"+name;
File url = new File(pathFile);
String resMsg = "";
try {
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
try {
name = new String(name.getBytes("gb2312"), "ISO8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.reset();
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename="+ name);
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "max-age=0");
InputStream in = null;
try {
in = new FileInputStream(url);
} catch (FileNotFoundException e1) {
resMsg = "文件未找到";
e1.printStackTrace();
response.getWriter().write(resMsg + ":" + name);
}
OutputStream ou = response.getOutputStream();
byte[] buffer = new byte[1024];
int i = -1;
while ((i = in.read(buffer)) != -1) {
ou.write(buffer, 0, i);
}
ou.flush();
ou.close();
in.close();
}
}

View File

@@ -0,0 +1,103 @@
package com.ruoyi.cms.controller.cms;
import com.ruoyi.cms.domain.BussinessDictType;
import com.ruoyi.cms.domain.query.Staticsquery;
import com.ruoyi.cms.service.StaticsqueryService;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
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 java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/cms/statics")
public class StaticsController extends BaseController {
@Autowired
private StaticsqueryService service;
//分行业趋势分析
@GetMapping("/industry")
public AjaxResult industry(Staticsquery staticsquery)
{
Map<String,Object> result = service.industry(staticsquery);
return success(result);
}
//分行业趋势分析
@GetMapping("/industryGen")
public AjaxResult industryGen()
{
service.industryGen();
return success();
}
//分行业趋势分析
@GetMapping("/industryAreaGen")
public AjaxResult industryAreaGen()
{
service.areaGen();
return success();
}
//分行业趋势分析
@GetMapping("/salaryGen")
public AjaxResult salarysalaryGen()
{
service.salarysalaryGen();
return success();
}
@GetMapping("/salary")
public AjaxResult salary(Staticsquery staticsquery)
{
Map<String,Object> result = service.salary(staticsquery);
return success(result);
}
@GetMapping("/industryArea")
public AjaxResult industryArea(Staticsquery staticsquery)
{
Map<String,Object> result = service.industryArea(staticsquery);
return success(result);
}
//分行业趋势分析
@GetMapping("/workYearGen")
public AjaxResult workYearGen()
{
service.workYearGen();
return success();
}
@GetMapping("/workYear")
public AjaxResult workYear(Staticsquery staticsquery)
{
Map<String,Object> result = service.workYear(staticsquery);
return success(result);
}
//分行业趋势分析
@GetMapping("/educationGen")
public AjaxResult educationGen()
{
service.educationGen();
return success();
}
@GetMapping("/education")
public AjaxResult education(Staticsquery staticsquery)
{
Map<String,Object> result = service.education(staticsquery);
return success(result);
}
//分学历-分薪资
@GetMapping("/educationSalaryGen")
public AjaxResult educationSalaryGen()
{
service.educationSalaryGen();
return success();
}
@GetMapping("/educationSalary")
public AjaxResult educationSalary(Staticsquery staticsquery)
{
Map<String,Object> result = service.educationSalary(staticsquery);
return success(result);
}
}

View File

@@ -0,0 +1,100 @@
package com.ruoyi.cms.controller.cms;
import java.util.List;
import com.ruoyi.common.annotation.BussinessLog;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.ruoyi.cms.domain.SubwayLine;
import com.ruoyi.cms.service.ISubwayLineService;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 地铁线路Controller
*
* @author Lishundong
* @date 2024-11-12
*/
@RestController
@RequestMapping("/cms/line")
@Api(tags = "后台:地铁线路")
public class SubwayLineController extends BaseController
{
@Autowired
private ISubwayLineService subwayLineService;
/**
* 查询地铁线路列表
*/
@ApiOperation("查询地铁线路列表")
@GetMapping("/list")
@BussinessLog(title = "查询地铁线路列表", businessType = BusinessType.CLEAN)
public TableDataInfo list(SubwayLine subwayLine)
{
startPage();
List<SubwayLine> list = subwayLineService.selectSubwayLineList(subwayLine);
return getDataTable(list);
}
/**
* 获取地铁线路详细信息
*/
@ApiOperation("获取地铁线路详细信息")
@PreAuthorize("@ss.hasPermi('system:line:query')")
@GetMapping(value = "/{lineId}")
public AjaxResult getInfo(@PathVariable("lineId") Long lineId)
{
return success(subwayLineService.selectSubwayLineByLineId(lineId));
}
/**
* 新增地铁线路
*/
@ApiOperation("新增地铁线路")
@PreAuthorize("@ss.hasPermi('system:line:add')")
@Log(title = "地铁线路", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody SubwayLine subwayLine)
{
return toAjax(subwayLineService.insertSubwayLine(subwayLine));
}
/**
* 修改地铁线路
*/
@ApiOperation("修改地铁线路")
@PreAuthorize("@ss.hasPermi('system:line:edit')")
@Log(title = "地铁线路", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody SubwayLine subwayLine)
{
return toAjax(subwayLineService.updateSubwayLine(subwayLine));
}
/**
* 删除地铁线路
*/
@ApiOperation("删除地铁线路")
@PreAuthorize("@ss.hasPermi('system:line:remove')")
@Log(title = "地铁线路", businessType = BusinessType.DELETE)
@DeleteMapping("/{lineId}")
public AjaxResult remove(@PathVariable Long lineId)
{
return toAjax(subwayLineService.deleteSubwayLineByLineIds(lineId));
}
}

View File

@@ -0,0 +1,103 @@
package com.ruoyi.cms.controller.cms;
import java.util.List;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.ruoyi.cms.domain.SubwayStation;
import com.ruoyi.cms.service.ISubwayStationService;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 地铁站点Controller
*
* @author Lishundong
* @date 2024-11-12
*/
@RestController
@RequestMapping("/cms/station")
@Api(tags = "后台:地铁站点")
public class SubwayStationController extends BaseController
{
@Autowired
private ISubwayStationService subwayStationService;
/**
* 查询地铁站点列表
*/
@ApiOperation("查询地铁站点列表")
@GetMapping("/list")
public TableDataInfo list(SubwayStation subwayStation)
{
startPage();
List<SubwayStation> list = subwayStationService.selectSubwayStationList(subwayStation);
return getDataTable(list);
}
/**
* 获取地铁站点详细信息
*/
@ApiOperation("获取地铁站点详细信息")
@PreAuthorize("@ss.hasPermi('system:station:query')")
@GetMapping(value = "/{stationId}")
public AjaxResult getInfo(@PathVariable("stationId") Long stationId)
{
return success(subwayStationService.selectSubwayStationByStationId(stationId));
}
/**
* 新增地铁站点
*/
@ApiOperation("新增地铁站点")
@PreAuthorize("@ss.hasPermi('system:station:add')")
@Log(title = "地铁站点", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody SubwayStation subwayStation)
{
return toAjax(subwayStationService.insertSubwayStation(subwayStation));
}
/**
* 修改地铁站点
*/
@ApiOperation("修改地铁站点")
@PreAuthorize("@ss.hasPermi('system:station:edit')")
@Log(title = "地铁站点", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody SubwayStation subwayStation)
{
return toAjax(subwayStationService.updateSubwayStation(subwayStation));
}
/**
* 删除地铁站点
*/
@ApiOperation("删除地铁站点")
@PreAuthorize("@ss.hasPermi('system:station:remove')")
@Log(title = "地铁站点", businessType = BusinessType.DELETE)
@DeleteMapping("/{stationIds}")
public AjaxResult remove(@PathVariable Long[] stationIds)
{
return toAjax(subwayStationService.deleteSubwayStationByStationIds(stationIds));
}
@GetMapping("/import")
public AjaxResult importStation(){
subwayStationService.importStation();
return success();
}
}

View File

@@ -0,0 +1,108 @@
package com.ruoyi.cms.controller.cms;
import com.ruoyi.cms.service.IAppUserService;
import com.ruoyi.cms.util.RoleUtils;
import com.ruoyi.common.core.domain.entity.AppUser;
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;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 用户工作经历表
*
* @author
* @email
* @date 2025-10-10 16:26:26
*/
@RestController
@RequestMapping("/cms/userworkexperiences")
@Api(tags = "后台:用户工作经历")
public class UserWorkExperiencesController extends BaseController {
@Autowired
private UserWorkExperiencesService userWorkExperiencesService;
@Autowired
private IAppUserService appUserService;
/**
* 列表
*/
@ApiOperation("工作经历列表信息")
@PreAuthorize("@ss.hasPermi('cms:userworkexperiences:list')")
@GetMapping("/list")
public TableDataInfo list(UserWorkExperiences userWorkExperiences){
startPage();
List<UserWorkExperiences> list=userWorkExperiencesService.getWorkExperiencesList(userWorkExperiences);
return getDataTable(list);
}
/**
* 信息
*/
/**
* 获取详细信息
*/
@ApiOperation("获取工作经历详细信息")
@PreAuthorize("@ss.hasPermi('cms:userworkexperiences:query')")
@GetMapping(value = "/{id}")
public AjaxResult query(@PathVariable("id") Long id){
return success(userWorkExperiencesService.getWorkExperiencesById(id));
}
/**
* 保存
*/
@ApiOperation("新增工作经历")
@Log(title = "工作经历", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody UserWorkExperiences userWorkExperiences){
if(userWorkExperiences.getUserId()==null){
AppUser appUser=appUserService.selectAppuserByIdcard(RoleUtils.getCurrentUseridCard());
if(appUser==null){
return AjaxResult.error("未传递userId!");
}
userWorkExperiences.setUserId(appUser.getUserId());
}
return toAjax(userWorkExperiencesService.insertWorkExperiences(userWorkExperiences));
}
/**
* 修改
*/
@ApiOperation("修改工作经历")
@Log(title = "工作经历", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult update(@RequestBody UserWorkExperiences userWorkExperiences){
if (userWorkExperiences.getId()==null){
return AjaxResult.error("参数id未传递!");
}
return toAjax(userWorkExperiencesService.updateWorkExperiencesById(userWorkExperiences));
}
/**
* 删除
*/
@ApiOperation("删除工作经历")
@Log(title = "工作经历", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids){
if(ids.length==0){
return AjaxResult.error("参数ids未传递!");
}
return toAjax(userWorkExperiencesService.deleteWorkExperiencesIds(ids));
}
}

View File

@@ -0,0 +1,29 @@
package com.ruoyi.cms.cron;
import com.ruoyi.cms.mapper.JobMapper;
import com.ruoyi.cms.service.IBussinessOperLogService;
import com.ruoyi.cms.service.ICompanyService;
import com.ruoyi.cms.service.IESJobSearchService;
import com.ruoyi.cms.service.IJobService;
import com.ruoyi.common.utils.spring.SpringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
public class JobCron {
public void isHot(){
SpringUtils.getBean(JobMapper.class).isHot();
}
public void resetEs(){
SpringUtils.getBean(IESJobSearchService.class).resetTextCache();
}
//查看索引是否存在,如果不存在,就更新
public void checkEsAndFix(){
SpringUtils.getBean(IESJobSearchService.class).checkEsAndFix();
}
//更新公司的招聘数量
public void updateJobCountOfCompany(){
SpringUtils.getBean(ICompanyService.class).updateJobCountOfCompany();
}
}

View File

@@ -0,0 +1,42 @@
package com.ruoyi.cms.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.xss.Xss;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
@Data
@ApiModel("APP通知")
@TableName(value = "app_notice")
public class AppNotice extends BaseEntity
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@TableId(value = "notice_id",type = IdType.AUTO)
@ApiModelProperty("公司id")
private Long noticeId;
@Xss(message = "消息标题不能包含脚本字符")
@NotBlank(message = "消息标题不能为空")
@Size(min = 0, max = 50, message = "消息标题不能超过50个字符")
private String noticeTitle;
@ApiModelProperty("消息类型")
private String noticeType;
@ApiModelProperty("消息内容")
private String noticeContent;
@ApiModelProperty("消息状态 0正常 1关闭")
private String status;
}

View File

@@ -0,0 +1,39 @@
package com.ruoyi.cms.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 用户岗位浏览记录对象 app_review_job
* @author ${author}
* @date 2025-02-14
*/
@Data
@ApiModel("用户岗位浏览记录")
@TableName(value = "app_review_job")
public class AppReviewJob extends BaseEntity
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@TableId(value = "id",type = IdType.AUTO)
private Long id;
@ApiModelProperty("用户id")
private Long userId;
@ApiModelProperty("岗位id")
private Long jobId;
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "浏览日期", width = 30, dateFormat = "yyyy-MM-dd")
@ApiModelProperty("浏览日期")
private String reviewDate;
}

View File

@@ -0,0 +1,69 @@
package com.ruoyi.cms.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Excel.ColumnType;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
@Data
@ApiModel("业务数据表")
@TableName(value = "bussiness_dict_data")
public class BussinessDictData extends BaseEntity
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@ApiModelProperty("字典编码")
@Excel(name = "字典编码", cellType = ColumnType.NUMERIC)
@TableId(value = "dict_code",type = IdType.AUTO)
private Long dictCode;
@ApiModelProperty("字典排序")
@Excel(name = "字典排序", cellType = ColumnType.NUMERIC)
private Long dictSort;
@Excel(name = "字典标签")
@ApiModelProperty("字典标签")
@NotBlank(message = "字典标签不能为空")
@Size(min = 0, max = 100, message = "字典标签长度不能超过100个字符")
private String dictLabel;
@Excel(name = "字典键值")
@ApiModelProperty("字典键值")
@NotBlank(message = "字典键值不能为空")
@Size(min = 0, max = 100, message = "字典键值长度不能超过100个字符")
private String dictValue;
@ApiModelProperty("字典类型")
@Excel(name = "字典类型")
@NotBlank(message = "字典类型不能为空")
@Size(min = 0, max = 100, message = "字典类型长度不能超过100个字符")
private String dictType;
@ApiModelProperty("样式属性(其他样式扩展)")
@Size(min = 0, max = 100, message = "样式属性长度不能超过100个字符")
private String cssClass;
@ApiModelProperty("表格字典样式")
@Size(min = 0, max = 100, message = "样式属性长度不能超过100个字符")
private String listClass;
@ApiModelProperty("是否默认Y是 N否")
@Excel(name = "是否默认", readConverterExp = "Y=是,N=否")
private String isDefault;
@ApiModelProperty("状态 0=正常,1=停用 ")
@Excel(name = "状态", readConverterExp = "0=正常,1=停用")
private String status;
}

View File

@@ -0,0 +1,43 @@
package com.ruoyi.cms.domain;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Excel.ColumnType;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
@Data
@ApiModel("字典类型表")
@TableName(value = "bussiness_dict_type")
public class BussinessDictType extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 字典主键 */
@Excel(name = "字典主键", cellType = ColumnType.NUMERIC)
private Long dictId;
/** 字典名称 */
@Excel(name = "字典名称")
@NotBlank(message = "字典名称不能为空")
@Size(min = 0, max = 100, message = "字典类型名称长度不能超过100个字符")
private String dictName;
/** 字典类型 */
@Excel(name = "字典类型")
@NotBlank(message = "字典类型不能为空")
@Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符")
@Pattern(regexp = "^[a-z][a-z0-9_]*$", message = "字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)")
private String dictType;
/** 状态0正常 1停用 */
@Excel(name = "状态", readConverterExp = "0=正常,1=停用")
private String status;
}

View File

@@ -0,0 +1,98 @@
package com.ruoyi.cms.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* app操作日志记录对象 bussiness_oper_log
* @author ${author}
* @date 2024-11-13
*/
@Data
@ApiModel("app操作日志记录")
@TableName(value = "bussiness_oper_log")
public class BussinessOperLog extends BaseEntity
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@TableId(value = "oper_id",type = IdType.AUTO)
@ApiModelProperty("日志主键")
private Long operId;
@Excel(name = "模块标题")
@ApiModelProperty("模块标题")
private String title;
@Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除")
@ApiModelProperty("业务类型0其它 1新增 2修改 3删除")
private Integer businessType;
@Excel(name = "方法名称")
@ApiModelProperty("方法名称")
private String method;
@Excel(name = "请求方式")
@ApiModelProperty("请求方式")
private String requestMethod;
@Excel(name = "操作类别", readConverterExp = "0=其它,1=后台用户,2=手机端用户")
@ApiModelProperty("操作类别0其它 1后台用户 2手机端用户")
private Integer operatorType;
@Excel(name = "操作人员")
@ApiModelProperty("操作人员")
private String operName;
@Excel(name = "部门名称")
@ApiModelProperty("部门名称")
private String deptName;
@Excel(name = "请求URL")
@ApiModelProperty("请求URL")
private String operUrl;
@Excel(name = "主机地址")
@ApiModelProperty("主机地址")
private String operIp;
@Excel(name = "操作地点")
@ApiModelProperty("操作地点")
private String operLocation;
@Excel(name = "请求参数")
@ApiModelProperty("请求参数")
private String operParam;
@Excel(name = "返回参数")
@ApiModelProperty("返回参数")
private String jsonResult;
@Excel(name = "操作状态", readConverterExp = "0=正常,1=异常")
@ApiModelProperty("操作状态0正常 1异常")
private Integer status;
@Excel(name = "错误消息")
@ApiModelProperty("错误消息")
private String errorMsg;
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd")
@ApiModelProperty("操作时间")
private Date operTime;
@Excel(name = "消耗时间")
@ApiModelProperty("消耗时间")
private Long costTime;
@ApiModelProperty("业务类型数组")
private Integer[] businessTypes;
}

View File

@@ -0,0 +1,46 @@
package com.ruoyi.cms.domain;
import java.math.BigDecimal;
import lombok.Data;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 商圈对象 commercial_area
* @author Lishundong
* @date 2024-11-12
*/
@Data
@ApiModel("商圈")
@TableName(value = "commercial_area")
public class CommercialArea extends BaseEntity
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@TableId(value = "commercial_area_id",type = IdType.AUTO)
@ApiModelProperty("id")
private Long commercialAreaId;
@Excel(name = "商圈名称")
@ApiModelProperty("商圈名称")
private String commercialAreaName;
@Excel(name = "纬度")
@ApiModelProperty("纬度")
private BigDecimal latitude;
@Excel(name = "经度")
@ApiModelProperty("经度")
private BigDecimal longitude;
@Excel(name = "地址")
@ApiModelProperty("地址")
private String address;
}

View File

@@ -0,0 +1,54 @@
package com.ruoyi.cms.domain;
import lombok.Data;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 公司卡片对象 company_card
* @author ${author}
* @date 2025-02-18
*/
@Data
@ApiModel("公司卡片")
@TableName(value = "company_card")
public class CompanyCard extends BaseEntity
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@TableId(value = "company_card_id",type = IdType.AUTO)
@ApiModelProperty("公司卡片id")
private Long companyCardId;
@Excel(name = "卡片名称")
@ApiModelProperty("卡片名称")
private String name;
@Excel(name = "标签,逗号分开")
@ApiModelProperty("标签,逗号分开")
private String targ;
@Excel(name = "企业性质")
@ApiModelProperty("企业性质,逗号分开")
private String companyNature;
@Excel(name = "背景色")
@ApiModelProperty("背景色")
private String backgroudColor;
@ApiModelProperty("状态 0未发布 1发布")
private Integer status;
@ApiModelProperty("排序")
private Integer cardOrder;
@ApiModelProperty("描述")
private String description;
}

View File

@@ -0,0 +1,37 @@
package com.ruoyi.cms.domain;
import lombok.Data;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 公司卡片收藏对象 company_card_collection
* @author ${author}
* @date 2025-02-18
*/
@Data
@ApiModel("公司卡片收藏")
@TableName(value = "company_card_collection")
public class CompanyCardCollection extends BaseEntity
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@TableId(value = "company_card_collection_id",type = IdType.AUTO)
@ApiModelProperty("公司id")
private Long companyCardCollectionId;
@Excel(name = "用户id")
@ApiModelProperty("用户id")
private Long userId;
@Excel(name = "公司卡片id")
@ApiModelProperty("公司卡片id")
private Long companyCardId;
}

View File

@@ -0,0 +1,37 @@
package com.ruoyi.cms.domain;
import lombok.Data;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 用户公司收藏对象 company_collection
* @author lishundong
* @date 2024-09-04
*/
@Data
@ApiModel("用户公司收藏")
@TableName(value = "company_collection")
public class CompanyCollection extends BaseEntity
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@TableId(value = "id",type = IdType.AUTO)
@ApiModelProperty("id")
private Long id;
@Excel(name = "公司id")
@ApiModelProperty("公司id")
private Long companyId;
@Excel(name = "App用户id")
@ApiModelProperty("App用户id")
private Long userId;
}

View File

@@ -0,0 +1,35 @@
package com.ruoyi.cms.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 公司标签对象 company_label
* @author ${author}
* @date 2025-02-18
*/
@Data
@ApiModel("公司标签")
@TableName(value = "company_label")
public class CompanyLabel extends BaseEntity
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@TableId(value = "id",type = IdType.AUTO)
private Long id;
@ApiModelProperty("公司标签")
private String dictValue;
@ApiModelProperty("公司id")
private Long companyId;
}

View File

@@ -0,0 +1,156 @@
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;
import org.dromara.easyes.annotation.IndexId;
import org.dromara.easyes.annotation.IndexName;
import org.dromara.easyes.annotation.rely.Analyzer;
import org.dromara.easyes.annotation.rely.FieldType;
import org.dromara.easyes.annotation.rely.IdType;
import java.math.BigDecimal;
import java.util.Date;
/**
* 全文索引 ES数据模型
**/
@IndexName("job_document")
@Data
public class ESJobDocument
{
@ApiModelProperty("es中的唯一id")
@IndexId(type = IdType.NONE)
@JsonIgnore
private String id;
@ApiModelProperty("岗位id")
private Long jobId;
@ApiModelProperty("公告标题")
@IndexField(fieldType = FieldType.TEXT, analyzer = Analyzer.IK_SMART, searchAnalyzer = Analyzer.IK_MAX_WORD)
private String jobTitle;
@ApiModelProperty("内容")
@IndexField(fieldType = FieldType.TEXT, analyzer = Analyzer.IK_SMART, searchAnalyzer = Analyzer.IK_MAX_WORD)
private String description;
@ApiModelProperty("最小薪资(元)")
private Long minSalary;
@ApiModelProperty("最大薪资(元)")
private Long maxSalary;
@ApiModelProperty("学历要求 对应字典education")
private String education;
@ApiModelProperty("工作经验要求 对应字典experience")
private String experience;
@ApiModelProperty("用人单位名称")
private String companyName;
@ApiModelProperty("工作地点")
private String jobLocation;
@ApiModelProperty("工作地点区县字典代码")
private Integer jobLocationAreaCode;
@JsonFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty("发布时间")
private Date postingDate;
@ApiModelProperty("招聘人数")
private Long vacancies;
@ApiModelProperty("纬度")
private BigDecimal latitude;
@ApiModelProperty("经度")
private BigDecimal longitude;
@ApiModelProperty("浏览量")
private Long view;
@ApiModelProperty("公司id")
private Long companyId;
@ApiModelProperty("是否火")
private Integer isHot;
@ApiModelProperty("申请次数")
private Integer applyNum;
@JsonIgnore
@ApiModelProperty("公司")
private Company company;
@ApiModelProperty("是否申请 0为否 1为是")
private Integer isApply;
@ApiModelProperty("是否收藏 0为否 1为是")
private Integer isCollection;
@ApiModelProperty("数据来源")
private String dataSource;
@ApiModelProperty("岗位链接")
private String jobUrl;
@JsonIgnore
@IndexField(fieldType = FieldType.GEO_POINT)
@ApiModelProperty("经纬度")
private String latAndLon;
@JsonIgnore
@ApiModelProperty("公司规模")
private String scaleDictCode;
@ApiModelProperty("行业分类")
private String industry;
@ApiModelProperty("岗位分类")
private String jobCategory;
@JsonIgnore
@ApiModelProperty("学历要求 对应字典education int类型 es方便查询")
private Integer education_int;
@JsonIgnore
@ApiModelProperty("工作经验要求 对应字典experience int类型 es方便查询")
private Integer experience_int;
@ApiModelProperty("公司规模 int类型 es方便查询")
private Integer scale;
@ApiModelProperty("岗位链接 APP内")
private String appJobUrl;
@ApiModelProperty("公司性质")
private String companyNature;
@ApiModelProperty("是否有视频介绍")
private Integer isExplain;
@ApiModelProperty("视频介绍URL")
private String explainUrl;
@ApiModelProperty("视频封面URL")
private String cover;
@ApiModelProperty("岗位类型 0疆内 1疆外")
private String jobType;
@ApiModelProperty("类型 0常规岗位 1就业见习岗位 2实习实训岗位 3社区实践岗位 对应字段字典position_type")
private String type;
@ApiModelProperty("信用代码")
private String code;
@ApiModelProperty("公司信息")
@IndexField(fieldType = FieldType.TEXT)
private String companyVoJson;
}

View File

@@ -0,0 +1,74 @@
package com.ruoyi.cms.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 新入职员工确认信息
*
* @author
* @email
* @date 2025-10-10 10:42:16
*/
@Data
@TableName("employee_confirm")
public class EmployeeConfirm extends BaseEntity {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@TableId(value = "id",type = IdType.AUTO)
@ApiModelProperty("id")
private Long id;
/**
* 企业id
*/
@ApiModelProperty("企业id")
private Long companyId;
/**
* 姓名
*/
@ApiModelProperty("姓名")
private String contactPerson;
/**
* 身份证
*/
@ApiModelProperty("身份证")
private String idCard;
/**
* 入职日期
*/
@ApiModelProperty("入职日期")
private String entryDate;
/**
* 联系电话
*/
@ApiModelProperty("联系电话")
private String contactPersonPhone;
/**
* 劳动合同期限
*/
@ApiModelProperty("劳动合同期限")
private String contractTerm;
@ApiModelProperty("工作id")
private Long jobId;
@ApiModelProperty("移动端用户id")
private Long userId;
/**
* 申请id
*/
@TableField(exist = false)
private Long applyId;
}

View File

@@ -0,0 +1,38 @@
package com.ruoyi.cms.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 用户岗位收藏对象 job_collection
* @author lishundong
* @date 2024-09-03
*/
@Data
@ApiModel("用户和招聘会收藏")
@TableName(value = "fair_collection")
public class FairCollection extends BaseEntity
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@TableId(value = "id",type = IdType.AUTO)
@ApiModelProperty("id")
private Long id;
@Excel(name = "招聘会id")
@ApiModelProperty("招聘会id")
private Long fairId;
@Excel(name = "App用户id")
@ApiModelProperty("App用户id")
private Long userId;
}

View File

@@ -0,0 +1,37 @@
package com.ruoyi.cms.domain;
import lombok.Data;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 公司招聘会关联对象 fair_company
* @author lishundong
* @date 2024-09-04
*/
@Data
@ApiModel("公司招聘会关联")
@TableName(value = "fair_company")
public class FairCompany extends BaseEntity
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@TableId(value = "id",type = IdType.AUTO)
@ApiModelProperty("id")
private Long id;
@Excel(name = "公司id")
@ApiModelProperty("公司id")
private Long companyId;
@Excel(name = "招聘会id")
@ApiModelProperty("招聘会id")
private Long jobFairId;
}

View File

@@ -0,0 +1,187 @@
package com.ruoyi.cms.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.ruoyi.cms.domain.vo.CompanyVo;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.domain.entity.Company;
import com.ruoyi.common.core.domain.entity.File;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 岗位对象 job
* @author lishundong
* @date 2024-09-04
*/
@Data
@ApiModel("岗位")
@TableName(value = "job")
public class Job extends BaseEntity
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@TableId(value = "job_id",type = IdType.AUTO)
@ApiModelProperty("工作id")
private Long jobId;
@Excel(name = "职位名称")
@ApiModelProperty("职位名称")
private String jobTitle;
@Excel(name = "最小薪资", readConverterExp = "元=")
@ApiModelProperty("最小薪资(元)")
private Long minSalary;
@Excel(name = "最大薪资", readConverterExp = "元=")
@ApiModelProperty("最大薪资(元)")
private Long maxSalary;
@Excel(name = "学历要求 对应字典education")
@ApiModelProperty("学历要求 对应字典education")
private String education;
@Excel(name = "工作经验要求 对应字典experience")
@ApiModelProperty("工作经验要求 对应字典experience")
private String experience;
@Excel(name = "用人单位名称")
@ApiModelProperty("用人单位名称")
private String companyName;
@Excel(name = "工作地点")
@ApiModelProperty("工作地点")
private String jobLocation;
@ApiModelProperty("工作地点区县字典代码")
private Integer jobLocationAreaCode;
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "发布时间", width = 30, dateFormat = "yyyy-MM-dd")
@ApiModelProperty("发布时间")
private String postingDate;
@Excel(name = "招聘人数")
@ApiModelProperty("招聘人数")
private Long vacancies;
@Excel(name = "纬度")
@ApiModelProperty("纬度")
private BigDecimal latitude;
@Excel(name = "经度")
@ApiModelProperty("经度")
private BigDecimal longitude;
@Excel(name = "浏览量")
@ApiModelProperty("浏览量")
@TableField("\"view\"")
private Long view;
@Excel(name = "公司id")
@ApiModelProperty("公司id")
private Long companyId;
@ApiModelProperty("是否火")
private Integer isHot;
@ApiModelProperty("申请次数")
@JsonIgnore
private Integer applyNum;
@TableField(exist = false)
@ApiModelProperty("公司信息")
private Company company;
@TableField(exist = false)
@ApiModelProperty("是否申请 0为否 1为是")
private Integer isApply;
@TableField(exist = false)
@ApiModelProperty("是否收藏 0为否 1为是")
private Integer isCollection;
@ApiModelProperty("岗位描述")
private String description;
@ApiModelProperty("是否发布 0未发布 1发布")
private Integer isPublish;
@ApiModelProperty("数据来源")
private String dataSource;
@ApiModelProperty("岗位链接")
private String jobUrl;
@ApiModelProperty("jobRow对应id")
private Long rowId;
@TableField(exist = false)
@ApiModelProperty("公司规模")
private String scale;
@TableField(exist = false)
@ApiModelProperty("行业分类")
private String industry;
@ApiModelProperty("岗位分类")
private String jobCategory;
@TableField(exist = false)
@ApiModelProperty("公司性质")
private String companyNature;
@TableField(exist = false)
@ApiModelProperty("申请时间")
private String applyTime;
@ApiModelProperty("是否有视频介绍")
private Integer isExplain;
@ApiModelProperty("视频介绍URL")
private String explainUrl;
@ApiModelProperty("视频封面URL")
private String cover;
@TableField(exist = false)
@ApiModelProperty("薪酬")
private String compensation;
@TableField(exist = false)
@ApiModelProperty("信用代码")
private String code;
@ApiModelProperty("岗位类型 0疆内 1疆外")
private String jobType;
@ApiModelProperty("类型 0常规岗位 1就业见习岗位 2实习实训岗位 3社区实践岗位 4零工 对应字段字典position_type")
private String type;
@TableField(exist = false)
@ApiModelProperty("岗位联系人列表")
private List<JobContact> jobContactList;
@TableField(exist = false)
@ApiModelProperty("附件列表")
private List<File> filesList;
@TableField(exist = false)
@ApiModelProperty("公司信息")
private CompanyVo companyVo;
@TableField(exist = false)
@JsonFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty("时间(足迹、投简历、收藏)")
private String shareTime;
}

View File

@@ -0,0 +1,43 @@
package com.ruoyi.cms.domain;
import lombok.Data;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 岗位申请对象 job_apply
* @author lishundong
* @date 2024-09-04
*/
@Data
@ApiModel("岗位申请")
@TableName(value = "job_apply")
public class JobApply extends BaseEntity
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@TableId(value = "id",type = IdType.AUTO)
@ApiModelProperty("id")
private Long id;
@Excel(name = "岗位id")
@ApiModelProperty("岗位id")
private Long jobId;
@Excel(name = "App用户id")
@ApiModelProperty("App用户id")
private Long userId;
@Excel(name = "匹配度")
@ApiModelProperty("匹配度")
private Long matchingDegree;
@ApiModelProperty("是否录用 0录用 2或null未录用")
private String hire;
}

View File

@@ -0,0 +1,38 @@
package com.ruoyi.cms.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 用户岗位收藏对象 job_collection
* @author lishundong
* @date 2024-09-03
*/
@Data
@ApiModel("用户岗位收藏")
@TableName(value = "job_collection")
public class JobCollection extends BaseEntity
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@TableId(value = "id",type = IdType.AUTO)
@ApiModelProperty("id")
private Long id;
@Excel(name = "岗位id")
@ApiModelProperty("岗位id")
private Long jobId;
@Excel(name = "App用户id")
@ApiModelProperty("App用户id")
private Long userId;
}

View File

@@ -0,0 +1,53 @@
package com.ruoyi.cms.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 岗位联系人
*
* @author
* @email
* @date 2025-09-30 15:57:06
*/
@Data
@ApiModel("岗位联系人")
@TableName("job_contact")
public class JobContact extends BaseEntity {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id",type = IdType.AUTO)
@ApiModelProperty("id")
private Long id;
/**
* 岗位id
*/
@ApiModelProperty("岗位id")
private Long jobId;
/**
* 联系人
*/
@ApiModelProperty("联系人")
private String contactPerson;
/**
* 联系人电话
*/
@ApiModelProperty("联系人电话")
private String contactPersonPhone;
/**
* 职务
*/
@ApiModelProperty("职务")
private String position;
}

View File

@@ -0,0 +1,83 @@
package com.ruoyi.cms.domain;
import java.math.BigDecimal;
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;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 招聘会信息对象 job_fair
* @author lishundong
* @date 2024-09-04
*/
@Data
@ApiModel("招聘会信息")
@TableName(value = "job_fair")
public class JobFair extends BaseEntity
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@TableId(value = "job_fair_id",type = IdType.AUTO)
@ApiModelProperty("招聘会id")
private Long jobFairId;
@Excel(name = "招聘会名称")
@ApiModelProperty("招聘会名称")
private String name;
@Excel(name = "招聘会类型 对应字典 job_fair_type")
@ApiModelProperty("招聘会类型 对应字典 job_fair_type")
private String jobFairType;
@Excel(name = "地点")
@ApiModelProperty("地点")
private String location;
@Excel(name = "纬度")
@ApiModelProperty("纬度")
private BigDecimal latitude;
@Excel(name = "经度")
@ApiModelProperty("经度")
private BigDecimal longitude;
@ApiModelProperty("描述")
private String description;
@ApiModelProperty("地点")
private String address;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "招聘会开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty("招聘会开始时间")
private Date startTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "招聘会结束时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty("招聘会结束时间")
private Date endTime;
@TableField(exist = false)
@ApiModelProperty("公司列表")
private List<Company> companyList;
@TableField(exist = false)
@JsonFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty("程序时间")
private Date queryDate;
@TableField(exist = false)
@ApiModelProperty("是否收藏")
public Integer isCollection;
}

View File

@@ -0,0 +1,38 @@
package com.ruoyi.cms.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 用户岗位收藏对象 job_collection
* @author lishundong
* @date 2024-09-03
*/
@Data
@ApiModel("用户岗位收藏")
@TableName(value = "job_recommend")
public class JobRecomment extends BaseEntity
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@TableId(value = "id",type = IdType.AUTO)
@ApiModelProperty("id")
private Long id;
@Excel(name = "岗位id")
@ApiModelProperty("岗位id")
private Long jobId;
@Excel(name = "App用户id")
@ApiModelProperty("App用户id")
private Long userId;
}

View File

@@ -0,0 +1,51 @@
package com.ruoyi.cms.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
@TableName(value = "notice")
public class Notice extends BaseEntity
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@TableId(value = "notice_id",type = IdType.AUTO)
private Long noticeId;
@ApiModelProperty("标题")
private String title;
@ApiModelProperty("副标题")
private String subTitle;
@ApiModelProperty("未读数量")
private Integer notReadCount;
@ApiModelProperty("是否阅读 0未读 1已读")
private String isRead;
@JsonFormat(pattern = "MM-dd")
@ApiModelProperty("日期")
private Date date;
@ApiModelProperty("通知类型 1系统通知(包括录用) 2职位上新")
private String noticeType;
@ApiModelProperty("公告内容")
private String noticeContent;
@ApiModelProperty("用户id")
private Long userId;
@ApiModelProperty("业务id")
private Long bussinessId;
}

View File

@@ -0,0 +1,62 @@
package com.ruoyi.cms.domain;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
@Data
@TableName(value = "row_work")
public class RowWork {
private String Id;
private String TaskId;
private String TaskName;
private String Std_class;
private String JobCategory;
private String SF;
private String ZCMC;
private String Aca112;
private String Acb22a;
private String Aac011;
private String Acb240;
private String Recruit_Num;
private String Acb202;
private String Aab302;
private String Acb241;
private String Salary;
private String SalaryLow;
private String SalaryHight;
private Date Aae397;
private String AAB004;
private String AAB022;
private String AAB019;
private String AAE006;
private String AAB092;
private String ORG;
private String ACE760;
private String AAE004;
private String AAE005;
private String Num_employers;
private String Experience;
private String Highlight;
private String Minimum_age;
private String Maximum_age;
private String Sex;
private String IndustryType;
private String IndustrySub;
private String AAB019_OK;
private String Aac011_OK;
private String Experience_OK;
private String Num_OK;
private Date Collect_time;
private String ClearFlag;
private String Province;
private String City;
private String County;
private String importdate;
private String YearMonth;
private String IsRepeat;
private String latitude;
private String longitude;
}

View File

@@ -0,0 +1,45 @@
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;
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-10 10:42:16
*/
@Data
@TableName("sensitive_word_data")
public class SensitiveWordData extends BaseEntity {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@TableId(value = "id",type = IdType.AUTO)
@ApiModelProperty("id")
private Long id;
/**
* 敏感词
*/
@ExcelProperty(value = "敏感词", index = 0)
@ApiModelProperty("敏感词")
private String sensitiveWord;
/**
* 类型
*/
@ExcelProperty(value = "类型", index = 1)
@ApiModelProperty("类型")
private String type;
}

View File

@@ -0,0 +1,33 @@
package com.ruoyi.cms.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 文件对象 file
* @author ${author}
* @date 2025-03-18
*/
@Data
@TableName(value = "statics")
public class Statics extends BaseEntity
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
/** id */
@TableId(value = "id",type = IdType.AUTO)
private Long id;
@ApiModelProperty("时间")
private String time;
@ApiModelProperty("类型")
private String type;
@ApiModelProperty("名称")
private String name;
@ApiModelProperty("数据")
private String data;
}

View File

@@ -0,0 +1,39 @@
package com.ruoyi.cms.domain;
import lombok.Data;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.domain.BaseEntity;
import java.util.List;
/**
* 地铁线路对象 subway_line
* @author Lishundong
* @date 2024-11-12
*/
@Data
@ApiModel("地铁线路")
@TableName(value = "subway_line")
public class SubwayLine extends BaseEntity
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@TableId(value = "line_id",type = IdType.AUTO)
@ApiModelProperty("id")
private Long lineId;
@Excel(name = "线路名称")
@ApiModelProperty("线路名称")
private String lineName;
@TableField(exist = false)
@ApiModelProperty("站点列表")
private List<SubwayStation> subwayStationList;
}

View File

@@ -0,0 +1,56 @@
package com.ruoyi.cms.domain;
import java.math.BigDecimal;
import lombok.Data;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 地铁站点对象 subway_station
* @author Lishundong
* @date 2024-11-12
*/
@Data
@ApiModel("地铁站点")
@TableName(value = "subway_station")
public class SubwayStation extends BaseEntity
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@TableId(value = "station_id",type = IdType.AUTO)
@ApiModelProperty("id")
private Long stationId;
@Excel(name = "地铁名称")
@ApiModelProperty("地铁名称")
private String stationName;
@Excel(name = "所属线路名称")
@ApiModelProperty("所属线路名称")
private String lineName;
@Excel(name = "线路id")
@ApiModelProperty("线路id")
private Long lineId;
@Excel(name = "纬度")
@ApiModelProperty("纬度")
private BigDecimal latitude;
@Excel(name = "经度")
@ApiModelProperty("经度")
private BigDecimal longitude;
@ApiModelProperty("排序")
private Integer stationOrder;
@ApiModelProperty("地址")
private String address;
}

View File

@@ -0,0 +1,21 @@
package com.ruoyi.cms.domain;
import lombok.Data;
@Data
public class VectorJob {
private String jobTitle; // Aca112
private String jobId; // id
private String scale; // Num_employers
private String education; // Aac011_OK
private String nature; // AAB019_OK
private String experience; // Experience_OK
private String salary; // Acb241
private String companyName; // aab004
private String area; // Aab302
private String jobLocation; // acb202
private String description; // Acb22a
private String jobUrl; // ACE760
private String minSalary;
private String maxSalary;
}

View File

@@ -0,0 +1,58 @@
package com.ruoyi.cms.domain.query;
import com.ruoyi.cms.domain.Job;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 前端搜索对象
*
* @author ruoyi
*/
@Data
public class ESJobSearch extends Job
{
/** 搜索值 */
private String searchValue;
/** 当前记录起始索引 */
private Integer current;
/** 每页显示记录数 */
private Integer pageSize;
private String sessionId;
private String radius;
@ApiModelProperty("排序方式 0推荐 1最热 2最新发布 3最大薪资")
private Integer order;
//商圈id
private List<Long> commercialAreaIds;
//区县id
private List<String> countyIds;
//地铁id
private List<Integer> subwayIds;
/** 纬度 */
private BigDecimal latitude;
/** 经度 */
private BigDecimal longitude;
//是否发布 0未发布 1发布
private Integer isPublish;
private String salaryDictCode;
private String scaleDictCode;
private String area;
/*** 用户角色app角色0企业1求职者2网格员 3内部政府人员*/
private String userType;
}

View File

@@ -0,0 +1,9 @@
package com.ruoyi.cms.domain.query;
import lombok.Data;
@Data
public class LabelQuery {
private Long cardId;
private String companyName;
}

View File

@@ -0,0 +1,19 @@
package com.ruoyi.cms.domain.query;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.cms.domain.Job;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
public class MineJobQuery extends Job {
@JsonFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty("发布时间")
private String startDate;
@JsonFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty("发布时间")
private String endDate;
}

View File

@@ -0,0 +1,198 @@
package com.ruoyi.cms.domain.query;
import lombok.Data;
import java.time.Year;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Data
public class Staticsquery {
//月/季度/年
private String timeDimension;
//岗位发布数量 招聘增长率
private String type;
private String startTime;
private String endTime;
public List<String> generateTimeRange() {
switch (timeDimension) {
case "":
return generateMonthRange();
case "季度":
return generateQuarterRange();
case "":
return generateYearRange();
default:
throw new IllegalArgumentException("Invalid time dimension: " + timeDimension);
}
}
private List<String> generateMonthRange() {
List<String> months = new ArrayList<>();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
try {
YearMonth start = YearMonth.parse(startTime, formatter);
YearMonth end = YearMonth.parse(endTime, formatter);
if (start.isAfter(end)) {
YearMonth temp = start;
start = end;
end = temp;
}
YearMonth current = end;
while (!current.isBefore(start)) {
months.add(current.format(formatter));
current = current.minusMonths(1);
}
if (!start.isAfter(end)) {
Collections.reverse(months);
}
} catch (DateTimeParseException e) {
throw new IllegalArgumentException("Invalid month format. Please use yyyy-MM format.");
}
return months;
}
private List<String> generateQuarterRange() {
List<String> quarters = new ArrayList<>();
try {
Quarter start = Quarter.parse(startTime);
Quarter end = Quarter.parse(endTime);
if (start.isAfter(end)) {
Quarter temp = start;
start = end;
end = temp;
}
Quarter current = end;
while (!current.isBefore(start)) {
quarters.add(current.toString());
current = current.previous();
}
if (!start.isAfter(end)) {
Collections.reverse(quarters);
}
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException("Invalid quarter format. Please use yyyy-第x季度 format (e.g. 2024-第一季度).");
}
return quarters;
}
private List<String> generateYearRange() {
List<String> years = new ArrayList<>();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy");
try {
Year start = Year.parse(startTime, formatter);
Year end = Year.parse(endTime, formatter);
if (start.isAfter(end)) {
Year temp = start;
start = end;
end = temp;
}
Year current = end;
while (!current.isBefore(start)) {
years.add(current.format(formatter));
current = current.minusYears(1);
}
if (!start.isAfter(end)) {
Collections.reverse(years);
}
} catch (DateTimeParseException e) {
throw new IllegalArgumentException("Invalid year format. Please use yyyy format.");
}
return years;
}
// Helper class for quarter handling with Chinese characters
private static class Quarter implements Comparable<Quarter> {
private final int year;
private final int quarter;
private static final String[] CHINESE_QUARTERS = {"第一季度", "第二季度", "第三季度", "第四季度"};
private Quarter(int year, int quarter) {
if (quarter < 1 || quarter > 4) {
throw new IllegalArgumentException("Quarter must be between 1 and 4");
}
this.year = year;
this.quarter = quarter;
}
public static Quarter parse(String quarterStr) {
String[] parts = quarterStr.split("-");
if (parts.length != 2 || !parts[1].startsWith("") || !parts[1].endsWith("季度")) {
throw new IllegalArgumentException("Invalid quarter format");
}
int year = Integer.parseInt(parts[0]);
String quarterStrPart = parts[1];
// Find which quarter this matches
int quarter = -1;
for (int i = 0; i < CHINESE_QUARTERS.length; i++) {
if (CHINESE_QUARTERS[i].equals(quarterStrPart)) {
quarter = i + 1;
break;
}
}
if (quarter == -1) {
throw new IllegalArgumentException("Invalid quarter name: " + quarterStrPart);
}
return new Quarter(year, quarter);
}
public Quarter previous() {
if (quarter == 1) {
return new Quarter(year - 1, 4);
} else {
return new Quarter(year, quarter - 1);
}
}
public boolean isBefore(Quarter other) {
if (this.year < other.year) return true;
if (this.year > other.year) return false;
return this.quarter < other.quarter;
}
public boolean isAfter(Quarter other) {
return other.isBefore(this);
}
@Override
public String toString() {
return year + "-" + CHINESE_QUARTERS[quarter - 1];
}
@Override
public int compareTo(Quarter other) {
if (this.year != other.year) {
return Integer.compare(this.year, other.year);
}
return Integer.compare(this.quarter, other.quarter);
}
}
}

View File

@@ -0,0 +1,17 @@
package com.ruoyi.cms.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class AppNoticeVO {
private Long id;
private String title;
private String subTitle;
private Integer notReadCount;
private Integer isRead;
@JsonFormat(pattern = "MM-dd")
private Date date;
}

View File

@@ -0,0 +1,17 @@
package com.ruoyi.cms.domain.vo;
import com.ruoyi.common.core.domain.entity.AppSkill;
import lombok.Data;
@Data
public class AppSkillVo extends AppSkill {
/**
* 技能名称
*/
private String nameStr;
/**
* 技能等级
*/
private String levelStr;
}

View File

@@ -0,0 +1,22 @@
package com.ruoyi.cms.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* 用户注册对象
*
* @author ruoyi
*/
@Data
public class AppUserLky
{
@ApiModelProperty("技能列表")
private List<AppSkillVo> appSkillsList;
@ApiModelProperty("当前职位名称")
private List<String> jobTitles;
}

View File

@@ -0,0 +1,21 @@
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;
import java.util.Date;
@Data
public class CandidateVO extends AppUser {
@JsonFormat(pattern = "yyyy-MM-dd")
private Date applyDate;
private Integer matchingDegree;
private String applyId;
@Excel(name = "公司名称", sort = 0)
private String companyName;
@Excel(name = "岗位名称", sort = 1)
private String jobName;
}

View File

@@ -0,0 +1,9 @@
package com.ruoyi.cms.domain.vo;
import com.ruoyi.cms.domain.CompanyCard;
import lombok.Data;
@Data
public class CompanyCardVO extends CompanyCard {
private Integer isCollection = 0;
}

View File

@@ -0,0 +1,12 @@
package com.ruoyi.cms.domain.vo;
import com.ruoyi.common.core.domain.entity.CompanyContact;
import lombok.Data;
import java.util.List;
@Data
public class CompanyContactVo {
private List<CompanyContact> companyContactList;
}

View File

@@ -0,0 +1,34 @@
package com.ruoyi.cms.domain.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.entity.CompanyContact;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 公司对象 company
* @author lishundong
* @date 2024-09-04
*/
@Data
public class CompanyVo implements Serializable
{
@ApiModelProperty("公司id")
private Long companyId;
@Excel(name = "单位名称")
@ApiModelProperty("单位名称")
private String name;
@TableField(exist = false)
@ApiModelProperty("公司描述")
private String companyDescription;
@TableField(exist = false)
@ApiModelProperty("企业联系人列表")
private List<CompanyContact> companyContactList;
}

View File

@@ -0,0 +1,12 @@
package com.ruoyi.cms.domain.vo;
import lombok.Data;
@Data
public class CompetitivenessResponse {
private Integer totalApplicants; // 总申请人数
private Integer matchScore; // 匹配分数(0-100)
private Integer rank; // 排名
private Integer percentile; // 超过百分比(0-100)
private RadarChart radarChart; // 雷达图6维度数据
}

View File

@@ -0,0 +1,11 @@
package com.ruoyi.cms.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.cms.domain.Job;
import java.util.Date;
public class JobApplyVO extends Job {
@JsonFormat(pattern = "yyyy-MM-dd")
private Date applyDate;
}

View File

@@ -0,0 +1,11 @@
package com.ruoyi.cms.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.cms.domain.Job;
import java.util.Date;
public class JobCollectionVO extends Job {
@JsonFormat(pattern = "yyyy-MM-dd")
private Date collectionDate;
}

View File

@@ -0,0 +1,11 @@
package com.ruoyi.cms.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.cms.domain.Job;
import java.util.Date;
public class JobReviewVO extends Job {
@JsonFormat(pattern = "yyyy-MM-dd")
private Date reviewDate;
}

View File

@@ -0,0 +1,18 @@
package com.ruoyi.cms.domain.vo;
import lombok.Data;
/**
* 消息条数
*/
@Data
public class NoticeTotal {
/**
* 未读消息
*/
private Integer qbxx;
/**
* 全部未读
*/
private Integer wdxx;
}

View File

@@ -0,0 +1,13 @@
package com.ruoyi.cms.domain.vo;
import lombok.Data;
@Data
public class RadarChart {
private Integer skill; // 技能(0-100)
private Integer experience; // 工作经验(0-100)
private Integer education; // 学历(0-100)
private Integer salary; // 薪资(0-100)
private Integer age; // 年龄(0-100)
private Integer location; // 工作地(0-100)
}

View File

@@ -0,0 +1,143 @@
//package com.ruoyi.cms.handler;
//import java.io.File;
//import java.io.FileOutputStream;
//import java.io.IOException;
//import java.nio.ByteBuffer;
//
//import com.alibaba.nls.client.AccessToken;
//import com.alibaba.nls.client.protocol.NlsClient;
//import com.alibaba.nls.client.protocol.OutputFormatEnum;
//import com.alibaba.nls.client.protocol.SampleRateEnum;
//import com.alibaba.nls.client.protocol.tts.SpeechSynthesizer;
//import com.alibaba.nls.client.protocol.tts.SpeechSynthesizerListener;
//import com.alibaba.nls.client.protocol.tts.SpeechSynthesizerResponse;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
///**
// * 此示例演示了:
// * 长文本语音合成API调用setLongText
// * 流式合成TTS。
// * 首包延迟计算。
// *
// * 说明该示例和nls-example-tts下的SpeechSynthesizerLongTextDemo不完全相同长文本语音合成是单独的产品功能是将一长串文本直接发送给服务端去合成
// * 而SpeechSynthesizerLongTextDemo演示的是将一长串文本在调用方处切割然后分段调用语音合成接口。
// */
//public class SpeechLongSynthesizerDemo {
// private static final Logger logger = LoggerFactory.getLogger(SpeechLongSynthesizerDemo.class);
// private static long startTime;
// private String appKey;
// NlsClient client;
// public SpeechLongSynthesizerDemo(String appKey, String token, String url) {
// this.appKey = appKey;
// //创建NlsClient实例应用全局创建一个即可。生命周期可和整个应用保持一致默认服务地址为阿里云线上服务地址。
// if(url.isEmpty()) {
// client = new NlsClient(token);
// } else {
// client = new NlsClient(url, token);
// }
// }
// private static SpeechSynthesizerListener getSynthesizerListener() {
// SpeechSynthesizerListener listener = null;
// try {
// listener = new SpeechSynthesizerListener() {
// File f=new File("ttsForLongText.wav");
// FileOutputStream fout = new FileOutputStream(f);
// private boolean firstRecvBinary = true;
// //语音合成结束
// @Override
// public void onComplete(SpeechSynthesizerResponse response) {
// // 调用onComplete时表示所有TTS数据已经接收完成因此为整个合成数据的延迟。该延迟可能较大不一定满足实时场景。
// System.out.println("name: " + response.getName() + ", status: " + response.getStatus()+", output file :"+f.getAbsolutePath());
// }
// //语音合成的语音二进制数据
// @Override
// public void onMessage(ByteBuffer message) {
// try {
// if(firstRecvBinary) {
// // 此处计算首包语音流的延迟,收到第一包语音流时,即可以进行语音播放,以提升响应速度(特别是实时交互场景下)。
// firstRecvBinary = false;
// long now = System.currentTimeMillis();
// logger.info("tts first latency : " + (now - SpeechLongSynthesizerDemo.startTime) + " ms");
// }
// byte[] bytesArray = new byte[message.remaining()];
// message.get(bytesArray, 0, bytesArray.length);
// //System.out.println("write array:" + bytesArray.length);
// fout.write(bytesArray);
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// @Override
// public void onFail(SpeechSynthesizerResponse response){
// // task_id是调用方和服务端通信的唯一标识当遇到问题时需要提供此task_id以便排查。
// System.out.println(
// "task_id: " + response.getTaskId() +
// //状态码
// ", status: " + response.getStatus() +
// //错误信息
// ", status_text: " + response.getStatusText());
// }
// };
// } catch (Exception e) {
// e.printStackTrace();
// }
// return listener;
// }
// public void process(String text) {
// SpeechSynthesizer synthesizer = null;
// try {
// //创建实例,建立连接。
// synthesizer = new SpeechSynthesizer(client, getSynthesizerListener());
// synthesizer.setAppKey(appKey);
// //设置返回音频的编码格式。
// synthesizer.setFormat(OutputFormatEnum.WAV);
// //设置返回音频的采样率。
// synthesizer.setSampleRate(SampleRateEnum.SAMPLE_RATE_16K);
// //发音人。注意Java SDK不支持调用超高清场景对应的发音人例如"zhiqi"如需调用请使用restfulAPI方式。
// synthesizer.setVoice("siyue");
// //语调,范围是-500~500可选默认是0。
// synthesizer.setPitchRate(0);
// //语速,范围是-500~500默认是0。
// synthesizer.setSpeechRate(0);
// //设置用于语音合成的文本
// // 此处调用的是setLongText接口原语音合成接口是setText
// synthesizer.setLongText(text);
// //此方法将以上参数设置序列化为JSON发送给服务端并等待服务端确认。
// long start = System.currentTimeMillis();
// synthesizer.start();
// logger.info("tts start latency " + (System.currentTimeMillis() - start) + " ms");
// SpeechLongSynthesizerDemo.startTime = System.currentTimeMillis();
// //等待语音合成结束
// synthesizer.waitForComplete();
// logger.info("tts stop latency " + (System.currentTimeMillis() - start) + " ms");
// } catch (Exception e) {
// e.printStackTrace();
// } finally {
// //关闭连接
// if (null != synthesizer) {
// synthesizer.close();
// }
// }
// }
// public void shutdown() {
// client.shutdown();
// }
// public static void main(String[] args) throws Exception {
// AccessToken accessToken = new AccessToken("LTAI5tRBahK93vPNF1JDVEPA", "x95OWb4cV6ccQVtbEJ2Gxm2Uwl2thJ");
// accessToken.apply();
// String token = accessToken.getToken();
// String appKey = "mtA2pwmvCeefHT3Y";
// // url取默认值
// String url = "wss://nls-gateway-cn-shanghai.aliyuncs.com/ws/v1";
//
// String ttsTextLong = "百草堂与三味书屋 鲁迅 \n" +
// "我家的后面有一个很大的园,相传叫作百草园。现在是早已并屋子一起卖给朱文公的子孙了,连那最末次的相见也已经隔了七八年,其中似乎确凿只有一些野草;但那时却是我的乐园。\n" +
// "不必说碧绿的菜畦,光滑的石井栏,高大的皂荚树,紫红的桑葚;也不必说鸣蝉在树叶里长吟,肥胖的黄蜂伏在菜花上,轻捷的叫天子(云雀)忽然从草间直窜向云霄里去了。\n" +
// "单是周围的短短的泥墙根一带,就有无限趣味。油蛉在这里低唱,蟋蟀们在这里弹琴。翻开断砖来,有时会遇见蜈蚣;还有斑蝥,倘若用手指按住它的脊梁,便会啪的一声,\n" +
// "从后窍喷出一阵烟雾。何首乌藤和木莲藤缠络着,木莲有莲房一般的果实,何首乌有臃肿的根。有人说,何首乌根是有像人形的,吃了便可以成仙,我于是常常拔它起来,牵连不断地拔起来,\n" +
// "也曾因此弄坏了泥墙,却从来没有见过有一块根像人样! 如果不怕刺,还可以摘到覆盆子,像小珊瑚珠攒成的小球,又酸又甜,色味都比桑葚要好得远......";
// SpeechLongSynthesizerDemo demo = new SpeechLongSynthesizerDemo(appKey, token, url);
// demo.process(ttsTextLong);
// demo.shutdown();
// }
//}

View File

@@ -0,0 +1,64 @@
package com.ruoyi.cms.handler;
import com.alibaba.nls.client.protocol.asr.SpeechRecognizer;
import org.springframework.stereotype.Component;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
@Component
@ServerEndpoint("/speech-recognition")
public class SpeechRecognitionWebSocketHandler {
private SpeechRecognizerAI recognizerDemo;
public SpeechRecognitionWebSocketHandler() {
// 初始化语音识别器
String appKey = "4lFYn2yPsQymwGu8";
String id = "LTAI5t9hhSqdDHqwH3RjgyYj";
String secret = "ni5aW3vxrWouMwcGqJPfh9Uu56PBuv";
String url = System.getenv().getOrDefault("NLS_GATEWAY_URL", "wss://nls-gateway-cn-shanghai.aliyuncs.com/ws/v1");
recognizerDemo = new SpeechRecognizerAI(appKey, id, secret, url);
}
/**
* 连接建立成功调用的方法
*/
@OnOpen
public void onOpen(Session session) {
System.out.println("WebSocket 连接建立成功sessionId = " + session.getId());
}
/**
* 收到客户端消息后调用的方法
*/
@OnMessage(maxMessageSize=5242880)
public void onMessage(ByteBuffer message, Session session) throws IOException {
byte[] audioData = new byte[message.remaining()];
message.get(audioData);
// 处理音频数据
recognizerDemo.processStream(session, new ByteArrayInputStream(audioData), 16000);
}
/**
* 连接关闭调用的方法
*/
@OnClose
public void onClose(Session session) {
System.out.println("WebSocket 连接关闭sessionId = " + session.getId());
}
/**
* 发生错误时调用的方法
*/
@OnError
public void onError(Session session, Throwable error) {
System.err.println("WebSocket 发生错误:" + error.getMessage());
error.printStackTrace();
}
}

View File

@@ -0,0 +1,142 @@
package com.ruoyi.cms.handler;
import com.alibaba.nls.client.AccessToken;
import com.alibaba.nls.client.protocol.InputFormatEnum;
import com.alibaba.nls.client.protocol.NlsClient;
import com.alibaba.nls.client.protocol.SampleRateEnum;
import com.alibaba.nls.client.protocol.asr.SpeechRecognizer;
import com.alibaba.nls.client.protocol.asr.SpeechRecognizerListener;
import com.alibaba.nls.client.protocol.asr.SpeechRecognizerResponse;
import lombok.Data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.websocket.Session;
import java.io.IOException;
import java.io.InputStream;
@Data
public class SpeechRecognizerAI {
private static final Logger logger = LoggerFactory.getLogger(SpeechRecognizerAI.class);
private String appKey;
private NlsClient client;
private AccessToken accessToken;
public SpeechRecognizerAI(String appKey, String id, String secret, String url) {
this.appKey = appKey;
// 获取 AccessToken
accessToken = new AccessToken(id, secret);
try {
accessToken.apply(); // 申请 Token
logger.info("Token: {}, Expire Time: {}", accessToken.getToken(), accessToken.getExpireTime());
// 初始化 NlsClient
if (url.isEmpty()) {
this.client = new NlsClient(accessToken.getToken()); // 使用默认服务地址
} else {
this.client = new NlsClient(url, accessToken.getToken()); // 使用自定义服务地址
}
} catch (IOException e) {
logger.error("Failed to initialize NlsClient: {}", e.getMessage());
}
}
public void processStream(Session session, InputStream inputStream, int sampleRate) {
SpeechRecognizer recognizer = null;
try {
// 创建 SpeechRecognizer 实例
recognizer = new SpeechRecognizer(client, new SpeechRecognizerListener() {
@Override
public void onRecognitionResultChanged(SpeechRecognizerResponse response) {
// 打印中间识别结果
String text = response.getRecognizedText();
logger.info("中间识别结果: {}", text);
sendResult(session, text,false);
}
@Override
public void onRecognitionCompleted(SpeechRecognizerResponse response) {
// 打印最终识别结果
String text = response.getRecognizedText();
logger.info("最终识别结果: {}", text);
sendResult(session, text,true);
}
@Override
public void onStarted(SpeechRecognizerResponse response) {
logger.info("识别开始, TaskId: {}", response.getTaskId());
}
@Override
public void onFail(SpeechRecognizerResponse response) {
logger.error("识别失败: {}", response.getStatusText());
}
});
// 设置语音识别参数
recognizer.setAppKey(appKey);
recognizer.setFormat(InputFormatEnum.PCM);
recognizer.setSampleRate(sampleRate == 16000 ?
SampleRateEnum.SAMPLE_RATE_16K : SampleRateEnum.SAMPLE_RATE_8K);
recognizer.setEnableIntermediateResult(true);
recognizer.addCustomedParam("enable_voice_detection", true);
// 启动识别
recognizer.start();
// 读取音频流并发送
byte[] buffer = new byte[3200];
int len;
while ((len = inputStream.read(buffer)) > 0) {
recognizer.send(buffer, len);
}
// 停止识别
recognizer.stop();
} catch (Exception e) {
logger.error("处理音频流时出错: {}", e.getMessage());
} finally {
if (recognizer != null) {
recognizer.close();
}
}
}
private void sendResult(Session session, String text,Boolean asrEnd) {
try {
session.getBasicRemote().sendText("{\"text\": \"" + text + "\",\"asrEnd\":\"" + asrEnd + "\"}");
} catch (IOException e) {
logger.error("发送识别结果失败: {}", e.getMessage());
}
}
public void shutdown() {
if (client != null) {
client.shutdown();
}
}
/**
* 获取当前有效的 AccessToken
*
* @param id 阿里云 AccessKey ID
* @param secret 阿里云 AccessKey Secret
* @return 返回申请到的 AccessToken 字符串,失败时返回 null
*/
public static String getAccessToken(String id, String secret) {
try {
AccessToken accessToken = new AccessToken(id, secret);
accessToken.apply(); // 申请 token
if (accessToken.getToken() != null) {
logger.info("成功获取 Token: {}, 过期时间: {}", accessToken.getToken(), accessToken.getExpireTime());
return accessToken.getToken();
} else {
logger.error("get token fail:"+accessToken.getToken());
return null;
}
} catch (IOException e) {
logger.error("申请 Token 时发生网络错误: {}", e.getMessage());
return null;
}
}
}

View File

@@ -0,0 +1,145 @@
package com.ruoyi.cms.handler;
import com.alibaba.nls.client.AccessToken;
import com.alibaba.nls.client.protocol.NlsClient;
import com.alibaba.nls.client.protocol.OutputFormatEnum;
import com.alibaba.nls.client.protocol.SampleRateEnum;
import com.alibaba.nls.client.protocol.tts.SpeechSynthesizer;
import com.alibaba.nls.client.protocol.tts.SpeechSynthesizerListener;
import com.alibaba.nls.client.protocol.tts.SpeechSynthesizerResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.nio.ByteBuffer;
@Component
@ServerEndpoint("/speech-synthesis")
public class SpeechSynthesisWebSocketHandler {
private static final Logger logger = LoggerFactory.getLogger(SpeechSynthesisWebSocketHandler.class);
private NlsClient client;
private String appKey = "mtA2pwmvCeefHT3Y";
private String accessKeyId = "LTAI5tRBahK93vPNF1JDVEPA";
private String accessKeySecret = "x95OWb4cV6ccQVtbEJ2Gxm2Uwl2thJ";
private String url = "wss://nls-gateway-cn-shanghai.aliyuncs.com/ws/v1";
public SpeechSynthesisWebSocketHandler() {
// Initialize NLS client with token
AccessToken accessToken = new AccessToken(accessKeyId, accessKeySecret);
try {
accessToken.apply();
String token = accessToken.getToken();
if(url.isEmpty()) {
this.client = new NlsClient(token);
} else {
this.client = new NlsClient(url, token);
}
} catch (Exception e) {
logger.error("Failed to initialize NLS client", e);
}
}
@OnOpen
public void onOpen(Session session) {
logger.info("WebSocket connected for speech synthesis, sessionId: {}", session.getId());
}
@OnMessage(maxMessageSize=5242880)
public void onMessage(String text, Session session) {
logger.info("Received text for synthesis: {}", text);
SpeechSynthesizer synthesizer = null;
try {
// Create synthesizer with a session-specific listener
synthesizer = new SpeechSynthesizer(client, createSynthesizerListener(session));
// Configure synthesizer
synthesizer.setAppKey(appKey);
synthesizer.setFormat(OutputFormatEnum.WAV);
synthesizer.setSampleRate(SampleRateEnum.SAMPLE_RATE_16K);
synthesizer.setVoice("aiqi");
synthesizer.setPitchRate(0);
synthesizer.setSpeechRate(0);
// Use long text synthesis
synthesizer.setLongText(text);
// Start synthesis
synthesizer.start();
} catch (Exception e) {
logger.error("Error during speech synthesis", e);
try {
session.close(new CloseReason(CloseReason.CloseCodes.UNEXPECTED_CONDITION, "Synthesis error"));
} catch (IOException ioException) {
logger.error("Error closing session", ioException);
}
} finally {
// Note: We can't close the synthesizer here because synthesis is async
// It should be closed in the listener's onComplete/onFail methods
}
}
@OnClose
public void onClose(Session session) {
logger.info("WebSocket closed for speech synthesis, sessionId: {}", session.getId());
}
@OnError
public void onError(Session session, Throwable error) {
logger.error("WebSocket error for session {}: {}", session.getId(), error.getMessage(), error);
}
private SpeechSynthesizerListener createSynthesizerListener(Session session) {
return new SpeechSynthesizerListener() {
private boolean firstRecvBinary = true;
private long startTime;
@Override
public void onComplete(SpeechSynthesizerResponse response) {
logger.info("Synthesis completed for session {}, status: {}", session.getId(), response.getStatus());
try {
// Send a close message or marker to indicate completion
session.getBasicRemote().sendText("{\"status\":\"complete\"}");
} catch (IOException e) {
logger.error("Error sending completion message", e);
}
}
@Override
public void onMessage(ByteBuffer message) {
try {
if (firstRecvBinary) {
firstRecvBinary = false;
startTime = System.currentTimeMillis();
logger.info("First audio packet received for session {}", session.getId());
}
// Send audio data to client
byte[] bytesArray = new byte[message.remaining()];
message.get(bytesArray, 0, bytesArray.length);
session.getBasicRemote().sendBinary(ByteBuffer.wrap(bytesArray));
} catch (IOException e) {
logger.error("Error sending audio data to client", e);
}
}
@Override
public void onFail(SpeechSynthesizerResponse response) {
logger.error("Synthesis failed for session {}: task_id: {}, status: {}, status_text: {}",
session.getId(), response.getTaskId(), response.getStatus(), response.getStatusText());
try {
session.close(new CloseReason(CloseReason.CloseCodes.UNEXPECTED_CONDITION,
"Synthesis failed: " + response.getStatusText()));
} catch (IOException e) {
logger.error("Error closing failed session", e);
}
}
};
}
}

View File

@@ -0,0 +1,83 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Real-time Speech Recognition</title>
</head>
<body>
<button id="start">Start Recording</button>
<button id="stop" disabled>Stop Recording</button>
<div id="output"></div>
<script>
const startButton = document.getElementById('start');
const stopButton = document.getElementById('stop');
const outputDiv = document.getElementById('output');
let mediaRecorder;
let socket;
// 初始化 WebSocket
function initWebSocket() {
socket = new WebSocket('ws://127.0.0.1:8080/speech-recognition'); // 确保端口正确
socket.onopen = () => {
console.log('WebSocket connection established');
startButton.disabled = false;
};
socket.onmessage = (event) => {
const result = JSON.parse(event.data);
outputDiv.innerHTML += `<p>${result.text}</p>`;
};
socket.onclose = () => {
console.log('WebSocket connection closed');
// 尝试重连
setTimeout(() => {
console.log('Reconnecting WebSocket...');
initWebSocket();
}, 3000); // 3 秒后重连
};
socket.onerror = (error) => {
console.error('WebSocket error:', error);
};
}
// 开始录音
startButton.addEventListener('click', async () => {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
mediaRecorder = new MediaRecorder(stream, { mimeType: 'audio/webm; codecs=opus' }); // 使用 Opus 编码
mediaRecorder.ondataavailable = (event) => {
if (event.data.size > 0) {
const reader = new FileReader();
reader.onload = () => {
if (socket.readyState === WebSocket.OPEN) { // 检查 WebSocket 状态
const audioData = reader.result;
socket.send(audioData); // 发送音频数据
} else {
console.error('WebSocket is not open. Current state:', socket.readyState);
}
};
reader.readAsArrayBuffer(event.data);
}
};
mediaRecorder.start(1000); // 每 1 秒发送一次数据
startButton.disabled = true;
stopButton.disabled = false;
});
// 停止录音
stopButton.addEventListener('click', () => {
mediaRecorder.stop();
startButton.disabled = false;
stopButton.disabled = true;
});
// 初始化 WebSocket
initWebSocket();
</script>
</body>
</html>

View File

@@ -0,0 +1,69 @@
package com.ruoyi.cms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.cms.domain.AppNotice;
import com.ruoyi.cms.domain.Job;
import com.ruoyi.cms.domain.JobFair;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 通知公告表 数据层
*
* @author ruoyi
*/
public interface AppNoticeMapper extends BaseMapper<AppNotice>
{
/**
* 查询公告信息
*
* @param noticeId 公告ID
* @return 公告信息
*/
public AppNotice selectNoticeById(Long noticeId);
/**
* 查询公告列表
*
* @param notice 公告信息
* @return 公告集合
*/
public List<AppNotice> selectNoticeList(AppNotice notice);
/**
* 新增公告
*
* @param notice 公告信息
* @return 结果
*/
public int insertNotice(AppNotice notice);
/**
* 修改公告
*
* @param notice 公告信息
* @return 结果
*/
public int updateNotice(AppNotice notice);
/**
* 批量删除公告
*
* @param noticeId 公告ID
* @return 结果
*/
public int deleteNoticeById(Long noticeId);
/**
* 批量删除公告信息
*
* @param noticeIds 需要删除的公告ID
* @return 结果
*/
public int deleteNoticeByIds(Long[] noticeIds);
List<Job> recommend(@Param("jobTitle")String jobTitle,@Param("userId") Long userId);
}

View File

@@ -0,0 +1,31 @@
package com.ruoyi.cms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.cms.domain.AppReviewJob;
import com.ruoyi.cms.domain.Job;
import com.ruoyi.cms.domain.query.MineJobQuery;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 用户岗位浏览记录Mapper接口
* @author ${author}
* @date 2025-02-14
*/
public interface AppReviewJobMapper extends BaseMapper<AppReviewJob>
{
/**
* 查询用户岗位浏览记录列表
*
* @param appReviewJob 用户岗位浏览记录
* @return 用户岗位浏览记录集合
*/
public List<AppReviewJob> selectAppReviewJobList(AppReviewJob appReviewJob);
List<Job> review(@Param("userId")Long userId, @Param("jobQuery") MineJobQuery jobQuery);
List<AppReviewJob> reviewArray(Long userId);
List<Job> selectAppReviewJobListJob(AppReviewJob appReviewJob);
}

View File

@@ -0,0 +1,23 @@
package com.ruoyi.cms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.cms.domain.vo.AppSkillVo;
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<AppSkill> {
List<AppSkill> getList(AppSkill appSkill);
int batchInsert(List<AppSkill> list);
List<AppSkillVo> getUserSkillList(AppSkill appSkill);
}

View File

@@ -0,0 +1,35 @@
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.MyChart;
import com.ruoyi.common.core.domain.entity.AppUser;
import com.ruoyi.common.core.domain.entity.SysUser;
/**
* APP用户Mapper接口
* @author lishundong
* @date 2024-09-03
*/
public interface AppUserMapper extends BaseMapper<AppUser>
{
/**
* 查询APP用户列表
*
* @param appUser APP用户
* @return APP用户集合
*/
public List<AppUser> selectAppUserList(AppUser appUser);
List<AppUser> selectByJobId(Long jobId);
AppUser selectByOpenid(String openid);
int insertSysUserRole(Map<String,Object> map);
int insertSysUser(SysUser sysUser);
MyChart getMyTj(Long userId);
}

View File

@@ -0,0 +1,97 @@
package com.ruoyi.cms.mapper;
import com.ruoyi.cms.domain.BussinessDictData;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 字典表 数据层
*
* @author ruoyi
*/
public interface BussinessDictDataMapper
{
/**
* 根据条件分页查询字典数据
*
* @param dictData 字典数据信息
* @return 字典数据集合信息
*/
public List<BussinessDictData> selectDictDataList(BussinessDictData dictData);
/**
* 根据字典类型查询字典数据
*
* @param dictType 字典类型
* @return 字典数据集合信息
*/
public List<BussinessDictData> selectDictDataByType(String dictType);
/**
* 根据字典类型和字典键值查询字典数据信息
*
* @param dictType 字典类型
* @param dictValue 字典键值
* @return 字典标签
*/
public String selectDictLabel(@Param("dictType") String dictType, @Param("dictValue") String dictValue);
/**
* 根据字典数据ID查询信息
*
* @param dictCode 字典数据ID
* @return 字典数据
*/
public BussinessDictData selectDictDataById(Long dictCode);
/**
* 查询字典数据
*
* @param dictType 字典类型
* @return 字典数据
*/
public int countDictDataByType(String dictType);
/**
* 通过字典ID删除字典数据信息
*
* @param dictCode 字典数据ID
* @return 结果
*/
public int deleteDictDataById(Long dictCode);
/**
* 批量删除字典数据信息
*
* @param dictCodes 需要删除的字典数据ID
* @return 结果
*/
public int deleteDictDataByIds(Long[] dictCodes);
/**
* 新增字典数据信息
*
* @param dictData 字典数据信息
* @return 结果
*/
public int insertDictData(BussinessDictData dictData);
/**
* 修改字典数据信息
*
* @param dictData 字典数据信息
* @return 结果
*/
public int updateDictData(BussinessDictData dictData);
/**
* 同步修改字典类型
*
* @param oldDictType 旧字典类型
* @param newDictType 新旧字典类型
* @return 结果
*/
public int updateDictDataType(@Param("oldDictType") String oldDictType, @Param("newDictType") String newDictType);
}

View File

@@ -0,0 +1,18 @@
package com.ruoyi.cms.mapper;
import com.ruoyi.common.core.domain.entity.BussinessDictJobCategory;
import java.util.List;
/**
* 技能字典表
*
* @author
* @email
* @date 2025-10-30 19:25:48
*/
public interface BussinessDictJobCategoryMapper {
List<BussinessDictJobCategory> getList(BussinessDictJobCategory bussinessDictJobCategory);
}

View File

@@ -0,0 +1,86 @@
package com.ruoyi.cms.mapper;
import com.ruoyi.cms.domain.BussinessDictType;
import java.util.List;
/**
* 字典表 数据层
*
* @author ruoyi
*/
public interface BussinessDictTypeMapper
{
/**
* 根据条件分页查询字典类型
*
* @param dictType 字典类型信息
* @return 字典类型集合信息
*/
public List<BussinessDictType> selectDictTypeList(BussinessDictType dictType);
/**
* 根据所有字典类型
*
* @return 字典类型集合信息
*/
public List<BussinessDictType> selectDictTypeAll();
/**
* 根据字典类型ID查询信息
*
* @param dictId 字典类型ID
* @return 字典类型
*/
public BussinessDictType selectDictTypeById(Long dictId);
/**
* 根据字典类型查询信息
*
* @param dictType 字典类型
* @return 字典类型
*/
public BussinessDictType selectDictTypeByType(String dictType);
/**
* 通过字典ID删除字典信息
*
* @param dictId 字典ID
* @return 结果
*/
public int deleteDictTypeById(Long dictId);
/**
* 批量删除字典类型信息
*
* @param dictIds 需要删除的字典ID
* @return 结果
*/
public int deleteDictTypeByIds(Long[] dictIds);
/**
* 新增字典类型信息
*
* @param dictType 字典类型信息
* @return 结果
*/
public int insertDictType(BussinessDictType dictType);
/**
* 修改字典类型信息
*
* @param dictType 字典类型信息
* @return 结果
*/
public int updateDictType(BussinessDictType dictType);
/**
* 校验字典类型称是否唯一
*
* @param dictType 字典类型
* @return 结果
*/
public BussinessDictType checkDictTypeUnique(String dictType);
}

View File

@@ -0,0 +1,49 @@
package com.ruoyi.cms.mapper;
import com.ruoyi.cms.domain.BussinessOperLog;
import java.util.List;
/**
* 操作日志 数据层
*
* @author ruoyi
*/
public interface BussinessOperLogMapper
{
/**
* 新增操作日志
*
* @param operLog 操作日志对象
*/
public void insertOperlog(BussinessOperLog operLog);
/**
* 查询系统操作日志集合
*
* @param operLog 操作日志对象
* @return 操作日志集合
*/
public List<BussinessOperLog> selectOperLogList(BussinessOperLog operLog);
/**
* 批量删除系统操作日志
*
* @param operIds 需要删除的操作日志ID
* @return 结果
*/
public int deleteOperLogByIds(Long[] operIds);
/**
* 查询操作日志详细
*
* @param operId 操作ID
* @return 操作日志对象
*/
public BussinessOperLog selectOperLogById(Long operId);
/**
* 清空操作日志
*/
public void cleanOperLog();
}

View File

@@ -0,0 +1,21 @@
package com.ruoyi.cms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
import com.ruoyi.cms.domain.CommercialArea;
/**
* 商圈Mapper接口
* @author Lishundong
* @date 2024-11-12
*/
public interface CommercialAreaMapper extends BaseMapper<CommercialArea>
{
/**
* 查询商圈列表
*
* @param commercialArea 商圈
* @return 商圈集合
*/
public List<CommercialArea> selectCommercialAreaList(CommercialArea commercialArea);
}

View File

@@ -0,0 +1,21 @@
package com.ruoyi.cms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
import com.ruoyi.cms.domain.CompanyCardCollection;
/**
* 公司卡片收藏Mapper接口
* @author ${author}
* @date 2025-02-18
*/
public interface CompanyCardCollectionMapper extends BaseMapper<CompanyCardCollection>
{
/**
* 查询公司卡片收藏列表
*
* @param companyCardCollection 公司卡片收藏
* @return 公司卡片收藏集合
*/
public List<CompanyCardCollection> selectCompanyCardCollectionList(CompanyCardCollection companyCardCollection);
}

View File

@@ -0,0 +1,26 @@
package com.ruoyi.cms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.cms.domain.CompanyCard;
import com.ruoyi.cms.domain.vo.CompanyCardVO;
import java.util.List;
/**
* 公司卡片Mapper接口
* @author ${author}
* @date 2025-02-18
*/
public interface CompanyCardMapper extends BaseMapper<CompanyCard>
{
/**
* 查询公司卡片列表
*
* @param companyCard 公司卡片
* @return 公司卡片集合
*/
public List<CompanyCard> selectCompanyCardList(CompanyCard companyCard);
List<CompanyCardVO> selectCompanyCardListVO(CompanyCard companyCard);
}

View File

@@ -0,0 +1,28 @@
package com.ruoyi.cms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
import com.ruoyi.common.core.domain.entity.AppUser;
import com.ruoyi.common.core.domain.entity.Company;
import com.ruoyi.cms.domain.CompanyCollection;
/**
* 用户公司收藏Mapper接口
* @author lishundong
* @date 2024-09-04
*/
public interface CompanyCollectionMapper extends BaseMapper<CompanyCollection>
{
/**
* 查询用户公司收藏列表
*
* @param companyCollection 用户公司收藏
* @return 用户公司收藏集合
*/
public List<CompanyCollection> selectCompanyCollectionList(CompanyCollection companyCollection);
List<Company> collectionJob(Long userId);
List<AppUser> selectAppuserList(Long companyId);
}

View File

@@ -0,0 +1,22 @@
package com.ruoyi.cms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.common.core.domain.entity.CompanyContact;
import java.util.List;
/**
* 公司联系人
*
* @author
* @email
* @date 2025-09-30 15:57:06
*/
public interface CompanyContactMapper extends BaseMapper<CompanyContact> {
List<CompanyContact> getSelectList(CompanyContact companyContact);
int batchInsert(List<CompanyContact> list);
int batchUpdate(List<CompanyContact> list);
}

Some files were not shown because too many files have changed in this diff Show More