1
0

18 Revīzijas d632c508e5 ... c18a97755b

Autors SHA1 Ziņojums Datums
  DESKTOP-VAEGFGM\zqc c18a97755b 修复搜索时黑名单异常问题 2 nedēļas atpakaļ
  DESKTOP-VAEGFGM\zqc 4077e1506c 未发布职位的默认不推荐人才 2 nedēļas atpakaļ
  DESKTOP-VAEGFGM\zqc ba6de13a6b .. 2 nedēļas atpakaļ
  DESKTOP-VAEGFGM\zqc 6e1cfd4e2b 检索求职者功能变更 3 nedēļas atpakaļ
  DESKTOP-VAEGFGM\zqc 2a58b761cb 调整正则表达式 3 nedēļas atpakaļ
  DESKTOP-VAEGFGM\zqc 49e6bf0703 招聘会新增状态参数 3 nedēļas atpakaļ
  DESKTOP-VAEGFGM\zqc abf0a63d25 .. 3 nedēļas atpakaļ
  DESKTOP-VAEGFGM\zqc 915ba200f1 修复后台检索酒店品牌重复问题 3 nedēļas atpakaļ
  DESKTOP-VAEGFGM\zqc c43f42e369 后台平台检索使用全文索引 4 nedēļas atpakaļ
  DESKTOP-VAEGFGM\zqc dbba4ef129 优化检索企业名称使用全文索引 4 nedēļas atpakaļ
  DESKTOP-VAEGFGM\zqc 6a5ba46912 调整企业套餐和前端页面检索品牌功能,优化查询效率 4 nedēļas atpakaļ
  DESKTOP-VAEGFGM\zqc 525194dee8 优化职位检索逻辑 去除 已删除的招聘会数据 1 mēnesi atpakaļ
  DESKTOP-VAEGFGM\zqc b04a89aa47 去除职位有效期 职位名称不允许重复 招聘会模式优化 增加企业职位搜索 1 mēnesi atpakaļ
  DESKTOP-VAEGFGM\zqc 3eca92d7f0 调整职位筛选 区分招聘会的职位 和非招聘会职位 1 mēnesi atpakaļ
  DESKTOP-VAEGFGM\zqc 8e5b832cd0 关闭职位名称检测 职位激活不在扣除额度 1 mēnesi atpakaļ
  DESKTOP-VAEGFGM\zqc 4454cbef41 清理无效日志 1 mēnesi atpakaļ
  DESKTOP-VAEGFGM\zqc f67acbead4 测试代码变更是否生效 1 mēnesi atpakaļ
  DESKTOP-VAEGFGM\zqc ab2c96c169 更新日志拦截器 1 mēnesi atpakaļ
40 mainītis faili ar 704 papildinājumiem un 72 dzēšanām
  1. 21 4
      citu-gateway/src/main/java/com/citu/gateway/filter/logging/AccessLogFilter.java
  2. 1 1
      citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/controller/admin/user/vo/user/UserSaveReqVO.java
  3. 2 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/ErrorCodeConstants.java
  4. 6 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/fair/AppFairController.java
  5. 8 3
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/fair/AppRecruitFairController.java
  6. 32 4
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/job/AppRecruitJobAdvertisedController.java
  7. 3 3
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/job/vo/AppRecruitJobExportRespVO.java
  8. 6 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/job/vo/AppRecruitJobPageReqVO.java
  9. 8 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/job/vo/AppRecruitJobRespVO.java
  10. 3 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/job/vo/AppRecruitJobSaveReqVO.java
  11. 125 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/job/vo/JobAdvertisedFairDTO.java
  12. 19 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/fair/AppJobFairPageReqVO.java
  13. 3 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/fair/JobFairJobInfoPageReqVO.java
  14. 3 4
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/job/JobAdvertisedImportExcelVO.java
  15. 5 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/job/JobAdvertisedSimpleRespVO.java
  16. 15 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/PersonQueryReqVO.java
  17. 5 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/info/PersonInfoRespVO.java
  18. 25 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/userperson/UserPersonPageReqVO.java
  19. 1 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/convert/JobInterestedConvert.java
  20. 1 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/convert/WorkExpConvert.java
  21. 51 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/enterprise/EnterpriseBrandDO.java
  22. 13 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/enterprise/EnterpriseEntitlementMapper.java
  23. 2 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/fair/FairDetailMapper.java
  24. 10 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/fair/FairMapper.java
  25. 55 5
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/job/JobAdvertisedMapper.java
  26. 2 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/job/JobInterestedMapper.java
  27. 6 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/PersonEnterpriseBlockMapper.java
  28. 63 7
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/PersonInfoMapper.java
  29. 49 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/user/MdeUserMapper.java
  30. 11 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/workexp/WorkExpMapper.java
  31. 2 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/vip/EnterpriseEntitlementService.java
  32. 5 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/vip/EnterpriseEntitlementServiceImpl.java
  33. 21 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/vip/EnterprisePackageServiceImpl.java
  34. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/fair/FairService.java
  35. 3 6
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/fair/FairServiceImpl.java
  36. 8 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/JobAdvertisedService.java
  37. 37 5
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/JobAdvertisedServiceImpl.java
  38. 15 12
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/JobIntegrationServiceImpl.java
  39. 5 5
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/handler/JobDefaultOperateHandler.java
  40. 53 4
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/PersonIntegrationServiceImpl.java

+ 21 - 4
citu-gateway/src/main/java/com/citu/gateway/filter/logging/AccessLogFilter.java

@@ -2,14 +2,13 @@ package com.citu.gateway.filter.logging;
 
 import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.map.MapUtil;
-import cn.hutool.json.JSONUtil;
+import com.alibaba.nacos.common.utils.JacksonUtils;
 import com.citu.framework.common.util.json.JsonUtils;
 import com.citu.gateway.util.SecurityFrameworkUtils;
 import com.citu.gateway.util.WebFrameworkUtils;
 import com.alibaba.nacos.common.utils.StringUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.reactivestreams.Publisher;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
 import org.springframework.cloud.gateway.filter.GlobalFilter;
 import org.springframework.cloud.gateway.filter.factory.rewrite.CachedBodyOutputMessage;
@@ -81,18 +80,36 @@ public class AccessLogFilter implements GlobalFilter, Ordered {
         values.put("schema", gatewayLog.getSchema());
         values.put("requestUrl", gatewayLog.getRequestUrl());
         values.put("queryParams", gatewayLog.getQueryParams().toSingleValueMap());
+
         values.put("requestBody", JsonUtils.isJson(gatewayLog.getRequestBody()) ? // 保证 body 的展示好看
-                JSONUtil.parse(gatewayLog.getRequestBody()) : gatewayLog.getRequestBody());
+                        JacksonUtils.toObj(gatewayLog.getRequestBody()) : gatewayLog.getRequestBody());
+//                JSONUtil.parse(gatewayLog.getRequestBody()) : gatewayLog.getRequestBody());
+
+
         values.put("requestHeaders", JsonUtils.toJsonString(gatewayLog.getRequestHeaders().toSingleValueMap()));
         values.put("userIp", gatewayLog.getUserIp());
         values.put("responseBody", JsonUtils.isJson(gatewayLog.getResponseBody()) ? // 保证 body 的展示好看
-                JSONUtil.parse(gatewayLog.getResponseBody()) : gatewayLog.getResponseBody());
+                 JacksonUtils.toObj(gatewayLog.getResponseBody()) : gatewayLog.getRequestBody());
+//        JSONUtil.parse(gatewayLog.getResponseBody()) : gatewayLog.getResponseBody());
+
+
         values.put("responseHeaders", gatewayLog.getResponseHeaders() != null ?
                 JsonUtils.toJsonString(gatewayLog.getResponseHeaders().toSingleValueMap()) : null);
         values.put("httpStatus", gatewayLog.getHttpStatus());
         values.put("startTime", LocalDateTimeUtil.format(gatewayLog.getStartTime(), NORM_DATETIME_MS_FORMATTER));
         values.put("endTime", LocalDateTimeUtil.format(gatewayLog.getEndTime(), NORM_DATETIME_MS_FORMATTER));
         values.put("duration", gatewayLog.getDuration() != null ? gatewayLog.getDuration() + " ms" : null);
+//        log.info("test ---->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+//        log.info("test ---->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+//        log.info("test ---->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+//        log.info("test ---->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+//        log.info("test ---->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+//        log.info("test ---->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+//        log.info("test ---->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+//        log.info("test ---->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+//        log.info("test ---->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+//        log.info("test ---->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+
         log.info("[writeAccessLog][网关日志:{}]", JsonUtils.toJsonPrettyString(values));
     }
 

+ 1 - 1
citu-module-system/citu-module-system-biz/src/main/java/com/citu/module/system/controller/admin/user/vo/user/UserSaveReqVO.java

@@ -23,7 +23,7 @@ public class UserSaveReqVO {
 
     @Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "citu")
     @NotBlank(message = "用户账号不能为空")
-    @Pattern(regexp = "^[a-zA-Z0-9]$", message = "用户账号由 数字、字母 组成")
+    @Pattern(regexp = "^[a-z|A-Z|0-9]+$", message = "用户账号由 数字、字母 组成")
     @Size(min = 4, max = 30, message = "用户账号长度为 4-30 个字符")
     @DiffLogField(name = "用户账号")
     private String username;

+ 2 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/ErrorCodeConstants.java

@@ -603,6 +603,8 @@ public interface ErrorCodeConstants {
     ErrorCode ENTERPRISE_PACKAGE_PUBLISH_JOB_COUNT_NOT_NULL = new ErrorCode(1_100_053_008, "允许发布职位数量不能为空");
 
     ErrorCode ENTERPRISE_PACKAGE_SEARCH_COUNT_NOT_NULL = new ErrorCode(1_100_053_009, "允许搜索人才的数量不能为空");
+    ErrorCode ENTERPRISE_PACKAGE_DEFAULT_PACKAGE_NOT_DELETE = new ErrorCode(1_100_053_010, "默认企业套餐不能删除");
+
 
 
     // ========== 企业权益记录 1_100_054_000 ==========

+ 6 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/fair/AppFairController.java

@@ -4,6 +4,7 @@ import com.citu.framework.common.pojo.CommonResult;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.common.util.object.BeanUtils;
 import com.citu.module.menduner.system.controller.base.fair.*;
+import com.citu.module.menduner.system.dal.dataobject.fair.FairDO;
 import com.citu.module.menduner.system.service.fair.FairService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -32,8 +33,11 @@ public class AppFairController {
 
     @GetMapping("/list")
     @Operation(summary = "获得招聘会列表")
-    public CommonResult<List<JobFairRespVO>> list() {
-        return success(BeanUtils.toBean(fairService.list(), JobFairRespVO.class));
+    public CommonResult<PageResult<JobFairRespVO>> list(@Valid AppJobFairPageReqVO reqVO) {
+        PageResult<FairDO> pageResult = fairService.list(reqVO);
+        PageResult<JobFairRespVO> resp = BeanUtils.toBean(pageResult, JobFairRespVO.class);
+//        resp.getList().forEach(this::setTagSort);
+        return success(resp);
     }
     @GetMapping("/get")
     @Operation(summary = "获得招聘会")

+ 8 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/fair/AppRecruitFairController.java

@@ -9,9 +9,11 @@ import com.citu.framework.security.core.annotations.PreAuthenticated;
 import com.citu.module.menduner.common.util.LoginUserContext;
 import com.citu.module.menduner.system.controller.app.recruit.job.vo.AppRecruitJobRespVO;
 import com.citu.module.menduner.system.controller.app.recruit.job.vo.joinJobFairReqVO;
+import com.citu.module.menduner.system.controller.base.fair.AppJobFairPageReqVO;
 import com.citu.module.menduner.system.controller.base.fair.JobFairNotJoinedJobPageReqVO;
 import com.citu.module.menduner.system.controller.base.fair.JobFairRespVO;
 import com.citu.module.menduner.system.controller.base.fair.white.FairWhiteRespVO;
+import com.citu.module.menduner.system.dal.dataobject.fair.FairDO;
 import com.citu.module.menduner.system.dal.dataobject.fair.FairWhiteDO;
 import com.citu.module.menduner.system.enums.MendunerStatusEnum;
 import com.citu.module.menduner.system.service.area.AreaService;
@@ -63,8 +65,11 @@ public class AppRecruitFairController {
     @PreAuthenticated
     @GetMapping("/list")
     @Operation(summary = "获得招聘会列表")
-    public CommonResult<List<JobFairRespVO>> list() {
-        return success(BeanUtils.toBean(fairService.list(), JobFairRespVO.class));
+    public CommonResult<PageResult<JobFairRespVO>> list(@Valid AppJobFairPageReqVO reqVO) {
+        PageResult<FairDO> pageResult = fairService.list(reqVO);
+        PageResult<JobFairRespVO> resp = BeanUtils.toBean(pageResult, JobFairRespVO.class);
+//        resp.getList().forEach(this::setTagSort);
+        return success(resp);
     }
 
     @PreAuthenticated
@@ -109,7 +114,7 @@ public class AppRecruitFairController {
         if (ObjectUtil.isEmpty(jobIdList)) {
             return success(null);
         }
-        List<AppRecruitJobRespVO> list = jobAdvertisedService.getByIdsList(jobIdList);
+        List<AppRecruitJobRespVO> list = jobAdvertisedService.getByIdsList(jobIdList,"0");
         list.forEach(item -> {
             if (null != item.getAreaId()) {
                 item.setArea(areaService.getById(item.getAreaId()));

+ 32 - 4
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/job/AppRecruitJobAdvertisedController.java

@@ -89,14 +89,14 @@ public class AppRecruitJobAdvertisedController {
                         .expType(ExpTypeEnum.THREE_TO_FIVE_YEARS.getType()).eduType(EducationTypeEnum.COLLEGE.getType())
                         .payFrom(BigDecimal.valueOf(10000)).payTo(BigDecimal.valueOf(15000))
                         .payUnit(PayTypeEnum.MONTH_WAGE.getType()).content("岗位职责内容").requirement("岗位要求")
-                        .expireTime(LocalDateTimeUtils.addTime(Duration.ofDays(7))).area("广州市").address("天河区")
+                        .area("广州市").address("天河区")
                         .status(JobStatusEnum.ENABLE.getStatus()).build(),
 
                 JobAdvertisedImportExcelVO.builder().name("企业副总裁").position("副总裁").type(JobTypeEnum.TEMPORARY.getType())
                         .expType(ExpTypeEnum.MORE_THAN_TWENTY_YEARS.getType()).eduType(EducationTypeEnum.DOCTOR.getType())
                         .payFrom(BigDecimal.valueOf(10000)).payTo(BigDecimal.valueOf(15000))
                         .payUnit(PayTypeEnum.DAY_WAGE.getType()).content("岗位职责内容").requirement("岗位要求")
-                        .expireTime(null).area("北京市").address("海定区")
+                        .area("北京市").address("海定区")
                         .status(JobStatusEnum.DISABLE.getStatus()).build()
         );
         // 输出
@@ -131,8 +131,10 @@ public class AppRecruitJobAdvertisedController {
     @Operation(summary = "获取发布的职位列表")
     public CommonResult<List<AppRecruitJobRespVO>> getList
             (@RequestParam(value = "status", required = false) String status,
-             @RequestParam(value = "exTime", defaultValue = "0") Short exTime) {
-        return success(jobAdvertisedService.getList(status,exTime));
+             @RequestParam(value = "exTime", defaultValue = "0") Short exTime,
+             @RequestParam(value = "jobName", defaultValue = "") String  jobName) {
+        // jobName 为精确检索 用于 给 前端进行判断是否存在这个岗位
+        return success(jobAdvertisedService.getList(status,exTime,jobName));
     }
 
 
@@ -144,6 +146,28 @@ public class AppRecruitJobAdvertisedController {
         return success(jobAdvertisedService.save(pageReqVO));
     }
 
+
+    @PreAuthenticated
+    @PostMapping("/publish/job/enable")
+    @ApiSignature(timeout = 30)
+    @Operation(summary = "会员发布支付")
+    public CommonResult<Boolean> publishJobEnable(@RequestParam("ids") String ids) {
+        jobAdvertisedService.publishJobEnable(StrUtils.splitToLong(ids));
+        return success(true);
+    }
+
+
+    @PreAuthenticated
+    @PostMapping("/del")
+    @ApiSignature(timeout = 30)
+    @Operation(summary = "删除职位")
+    public CommonResult<Boolean> del(@RequestParam("ids") String ids) {
+        jobAdvertisedService.del(StrUtils.splitToLong(ids));
+        return success(true);
+    }
+
+
+
     @PreAuthenticated
     @PostMapping("/enable")
     @ApiSignature(timeout = 30)
@@ -162,6 +186,10 @@ public class AppRecruitJobAdvertisedController {
         return success(true);
     }
 
+
+
+
+
     @PreAuthenticated
     @PostMapping("/refresh")
     @ApiSignature(timeout = 30)

+ 3 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/job/vo/AppRecruitJobExportRespVO.java

@@ -82,9 +82,9 @@ public class AppRecruitJobExportRespVO {
     @ExcelProperty("职位要求")
     private String requirement;
 
-    @Schema(description = "过期时间")
-    @ExcelProperty("过期时间")
-    private LocalDateTime expireTime;
+//    @Schema(description = "过期时间")
+//    @ExcelProperty("过期时间")
+//    private LocalDateTime expireTime;
 
     @Schema(description = "是否置顶")
     @ExcelProperty("是否置顶")

+ 6 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/job/vo/AppRecruitJobPageReqVO.java

@@ -56,4 +56,10 @@ public class AppRecruitJobPageReqVO extends PageParam {
     @Schema(description = "是否雇佣 (众聘)")
     private Boolean hire;
 
+    @Schema(description = "招聘会id")
+    private Long jobFairId;
+
+
+
+
 }

+ 8 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/job/vo/AppRecruitJobRespVO.java

@@ -1,6 +1,7 @@
 package com.citu.module.menduner.system.controller.app.recruit.job.vo;
 
 
+import com.citu.module.menduner.system.controller.base.fair.JobFairRespVO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -24,4 +25,11 @@ public class AppRecruitJobRespVO extends AppRecruitJobSimpleRespVO {
 
     @Schema(description = "目前加入哪些招聘会")
     private List<Long> jobFairIds;
+
+    private String  jobFairName;
+
+
+    private Long  jobFairId;
+
+
 }

+ 3 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/job/vo/AppRecruitJobSaveReqVO.java

@@ -27,6 +27,7 @@ public class AppRecruitJobSaveReqVO {
 //    @NotNull(message = "{1_100_004_003}")
     private Long areaId;
 
+
     @Schema(description = "职位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
     @NotEmpty(message = "{1_100_025_003}")
     private String name;
@@ -65,8 +66,8 @@ public class AppRecruitJobSaveReqVO {
     @Schema(description = "职位要求")
     private String requirement;
 
-    @Schema(description = "过期时间")
-    private LocalDateTime expireTime;
+//    @Schema(description = "过期时间")
+//    private LocalDateTime expireTime;
 
     @Schema(description = "工作地址")
     private String address;

+ 125 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/job/vo/JobAdvertisedFairDTO.java

@@ -0,0 +1,125 @@
+package com.citu.module.menduner.system.controller.app.recruit.job.vo;
+
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.citu.module.menduner.system.enums.job.JobStatusEnum;
+import com.citu.module.menduner.system.enums.job.JobTypeEnum;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+public class JobAdvertisedFairDTO {
+
+    /**
+     * id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 职位来源(0职位管理|1众聘职位|2招聘会)
+     */
+    private String source;
+    /**
+     * 来源方关联id
+     */
+    private Long bizId;
+    /**
+     * 企业id
+     */
+    private Long enterpriseId;
+    /**
+     * 发布用户id
+     */
+    private Long userId;
+    /**
+     * 工作地区
+     */
+    private Long areaId;
+    /**
+     * 职位名称
+     */
+    private String name;
+    /**
+     * 职位类型id
+     */
+    private Long positionId;
+    /**
+     * 招聘类型
+     * <p>
+     * 枚举 {@link JobTypeEnum 对应的类}
+     */
+    private String type;
+    /**
+     * 工作经验
+     */
+    private String expType;
+    /**
+     * 学历要求
+     */
+    private String eduType;
+    /**
+     * 薪酬from
+     */
+    private BigDecimal payFrom;
+    /**
+     * 薪酬to
+     */
+    private BigDecimal payTo;
+    /**
+     * 薪酬单位
+     */
+    private String payUnit;
+    /**
+     * 职位标签
+     */
+    private List<String> tagList;
+    /**
+     * 职位内容
+     */
+    private String content;
+    /**
+     * 职位要求
+     */
+    private String requirement;
+    /**
+     * 过期时间
+     */
+    private LocalDateTime expireTime;
+    /**
+     * 是否置顶
+     */
+    private Boolean top;
+    /**
+     * 工作地址
+     */
+    private String address;
+    /**
+     * 经度
+     */
+    private String longitude;
+    /**
+     * 维度
+     */
+    private String latitude;
+    /**
+     * 是否雇佣 (众聘)
+     */
+    private Boolean hire;
+    /**
+     * 雇佣金额
+     */
+    private Long hirePrice;
+    /**
+     * 刷新时间
+     */
+    private LocalDateTime refreshTime;
+    /**
+     * 职位状态
+     * <p>
+     * 枚举 {@link JobStatusEnum 对应的类}
+     */
+    private String status;
+}

+ 19 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/fair/AppJobFairPageReqVO.java

@@ -0,0 +1,19 @@
+package com.citu.module.menduner.system.controller.base.fair;
+
+import com.citu.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+public class AppJobFairPageReqVO extends PageParam {
+
+
+    @Schema(description = "状态(0正常 1停用)")
+    private String status;
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+}

+ 3 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/fair/JobFairJobInfoPageReqVO.java

@@ -29,4 +29,7 @@ public class JobFairJobInfoPageReqVO extends PageParam {
     @Schema(description = "职位类型id")
     private List<Long> positionId;
 
+    @Schema(description = "职位状态")
+    private String status;
+
 }

+ 3 - 4
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/job/JobAdvertisedImportExcelVO.java

@@ -4,7 +4,6 @@ import com.alibaba.excel.annotation.ExcelProperty;
 import com.citu.framework.excel.core.annotations.DictFormat;
 import com.citu.framework.excel.core.annotations.ExcelColumnSelect;
 import com.citu.framework.excel.core.convert.DictConvert;
-import com.citu.framework.excel.core.convert.LocalDateTimeStringConverter;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -79,9 +78,9 @@ public class JobAdvertisedImportExcelVO {
     @ExcelProperty("职位要求")
     private String requirement;
 
-    @Schema(description = "过期时间")
-    @ExcelProperty(value = "过期时间(长期有效不用填)")
-    private LocalDateTime expireTime;
+//    @Schema(description = "过期时间")
+//    @ExcelProperty(value = "过期时间(长期有效不用填)")
+//    private LocalDateTime expireTime;
 
     @Schema(description = "工作地址")
     @ExcelProperty("工作地址")

+ 5 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/job/JobAdvertisedSimpleRespVO.java

@@ -75,6 +75,11 @@ public class JobAdvertisedSimpleRespVO {
     @Schema(description = "区域")
     private AreaWebRespVO area;
 
+    @Schema(description = "企业id")
+    private Long enterpriseId;
+
+
+
 
 
 }

+ 15 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/PersonQueryReqVO.java

@@ -28,4 +28,19 @@ public class PersonQueryReqVO extends PageParam {
 
     @Schema(description = "学历", example = "2")
     private String eduType;
+
+    @Schema(description = "工作城市")
+    private List<Long> workAreaIds;
+
+    @Schema(description = "酒店品牌")
+    private String brand;
+
+    @Schema(description = "检索用户Id")
+    private List<Long> userIds;
+
+
+    @Schema(description = "黑名单用户Id")
+    private List<Long> blockUserIds;
+
+
 }

+ 5 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/info/PersonInfoRespVO.java

@@ -2,6 +2,7 @@ package com.citu.module.menduner.system.controller.base.person.info;
 
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.citu.module.menduner.system.controller.app.recruit.person.workexp.AppRecruitWorkExpRespVO;
 import com.citu.module.menduner.system.controller.base.area.AreaWebRespVO;
 import com.citu.module.menduner.system.controller.base.position.PositionWebRespVO;
 import com.citu.module.menduner.system.controller.base.workexp.WorkExpRespVO;
@@ -119,4 +120,8 @@ public class PersonInfoRespVO {
 
     @Schema(description = "最近工作经历")
     private WorkExpRespVO lastWorkExp;
+
+    List<AppRecruitWorkExpRespVO> workExpList;
+
+
 }

+ 25 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/userperson/UserPersonPageReqVO.java

@@ -7,6 +7,7 @@ import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 import static com.citu.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 
@@ -23,4 +24,28 @@ public class UserPersonPageReqVO extends PersonInfoPageReqVO {
     @Schema(description = "vip过期时间")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] vipExpireDate;
+
+    @Schema(description = "内容关键字")
+    private String content;
+
+    @Schema(description = "职位类型id")
+    private List<Long> positionIds;
+
+    @Schema(description = "地区id")
+    private List<Long> areaIds;
+
+    @Schema(description = "工作经验", example = "1")
+    private String expType;
+
+    @Schema(description = "学历", example = "2")
+    private String eduType;
+
+    @Schema(description = "工作城市")
+    private List<Long> workAreaIds;
+
+    @Schema(description = "酒店品牌")
+    private String brand;
+
+
+
 }

+ 1 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/convert/JobInterestedConvert.java

@@ -18,6 +18,7 @@ public interface JobInterestedConvert  {
     List<AppJobInterestedRespVO> convertList(List<JobInterestedDO> list);
 
     AppJobAdvertisedDetailRespVO convert(JobInterestedDO bean);
+    AppRecruitJobInterestedRespVO convert2(JobInterestedDO list);
 
     List<AppRecruitJobInterestedRespVO> convertList2(List<JobInterestedDO> list);
 

+ 1 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/convert/WorkExpConvert.java

@@ -21,4 +21,5 @@ public interface WorkExpConvert {
     List<WorkExpRespVO> convertList3(List<WorkExpDO> list);
 
     WorkExpRespVO convert(WorkExpDO workExpDO);
+    AppRecruitWorkExpRespVO convert2(WorkExpDO workExpDO);
 }

+ 51 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/enterprise/EnterpriseBrandDO.java

@@ -0,0 +1,51 @@
+package com.citu.module.menduner.system.dal.dataobject.enterprise;
+
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.citu.framework.tenant.core.db.TenantBaseDO;
+import lombok.*;
+
+
+import java.time.LocalDateTime;
+
+@TableName("mde_enterprise_brand")
+@KeySequence("mde_enterprise_brand") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class EnterpriseBrandDO  extends TenantBaseDO {
+
+
+
+
+
+        private Long id;
+
+        private String enterpriseEnName;
+
+        private String enterpriseCnName;
+
+        private String brandEnName;
+
+        private String brandCnName;
+
+        private String creator;
+
+        private LocalDateTime createTime;
+
+        private String updater;
+
+        private LocalDateTime updateTime;
+
+        private Boolean deleted;
+
+        private Long tenantId;
+
+
+
+
+
+}

+ 13 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/enterprise/EnterpriseEntitlementMapper.java

@@ -46,4 +46,17 @@ public interface EnterpriseEntitlementMapper extends BaseMapperX<EnterpriseEntit
 
     @Update("update mde_enterprise_entitlement set publish_job_count = publish_job_count + #{publishJobCount},tmp_publish_job_count=tmp_publish_job_count+#{publishJobCount} where enterprise_id = #{enterpriseId}")
     void addPublishJobCount(@Param("enterpriseId") Long enterpriseId,@Param("publishJobCount") int publishJobCount);
+
+    /**
+     * 修改非会员的企业 默认权益
+     * @param publishJobCount
+     * @param searchCount
+     * @param lookCvCount
+     */
+    @Update("update mde_enterprise_entitlement set  " +
+            " publish_job_count = if(publish_job_count +#{publishJobCount}<=0,0,publish_job_count +#{publishJobCount} )," +
+            " search_count = if(search_count +#{searchCount}<=0,0,search_count +#{searchCount} )," +
+            " look_cv_count = if(look_cv_count +#{lookCvCount}<=0,0,look_cv_count +#{lookCvCount} )" +
+            "where  enterprise_id in ( select id  from mde_enterprise where  vip_expire_date is null )")
+    void updateDefaultEnterprise(@Param("publishJobCount")Integer publishJobCount, @Param("searchCount")Integer searchCount, @Param("lookCvCount")Integer lookCvCount);
 }

+ 2 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/fair/FairDetailMapper.java

@@ -136,6 +136,8 @@ public interface FairDetailMapper extends BaseMapperX<FairDetailDO> {
         query.eqIfPresent(FairDetailDO::getJobFairId, reqVO.getJobFairId());
         query.eqIfPresent(FairDetailDO::getEnterpriseId, reqVO.getEnterpriseId());
         query.eqIfPresent(FairDetailDO::getJobId, reqVO.getJobId());
+        query.eq(org.apache.commons.lang3.StringUtils.isNotBlank(reqVO.getStatus()),JobAdvertisedDO::getStatus, reqVO.getStatus());
+
         if (StringUtils.hasText(reqVO.getKeyword())) {
             query.and(q -> q.likeIfExists(JobAdvertisedDO::getName, reqVO.getKeyword())
                     .or()

+ 10 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/fair/FairMapper.java

@@ -4,6 +4,7 @@ package com.citu.module.menduner.system.dal.mysql.fair;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.mybatis.core.mapper.BaseMapperX;
 import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.citu.module.menduner.system.controller.base.fair.AppJobFairPageReqVO;
 import com.citu.module.menduner.system.controller.base.fair.JobFairPageReqVO;
 import com.citu.module.menduner.system.dal.dataobject.fair.FairDO;
 import com.citu.module.menduner.system.dal.dataobject.fair.FairWhiteDO;
@@ -34,6 +35,15 @@ public interface FairMapper extends BaseMapperX<FairDO> {
                 .orderByDesc(FairDO::getId));
     }
 
+    default PageResult<FairDO> selectAppPage(AppJobFairPageReqVO reqVO,LocalDate date) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<FairDO>()
+                .eq(null!=reqVO.getStatus(),FairDO::getStatus,reqVO.getStatus())
+                .ge(MendunerStatusEnum.ENABLE.getStatus().equals(reqVO.getStatus()), FairDO::getEndTime, date.atStartOfDay())
+                .le(MendunerStatusEnum.DISABLE.getStatus().equals(reqVO.getStatus()), FairDO::getEndTime, date.atStartOfDay())
+                .orderByDesc(FairDO::getEndTime)
+        );
+    }
+
 
     default List<FairDO> selectListByEnterpriseId(Long enterpriseId) {
         MPJLambdaWrapper<FairDO> wrapper = new MPJLambdaWrapper<>();

+ 55 - 5
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/job/JobAdvertisedMapper.java

@@ -19,6 +19,7 @@ import com.citu.module.menduner.system.controller.app.recruit.job.vo.AppRecruitJ
 import com.citu.module.menduner.system.controller.base.CommonRespVO;
 import com.citu.module.menduner.system.controller.base.analysis.RecruitAnalysisPageReqVO;
 import com.citu.module.menduner.system.controller.base.analysis.RecruitJobAnalysisRespVO;
+import com.citu.module.menduner.system.controller.base.fair.JobFairDetailPageReqVO;
 import com.citu.module.menduner.system.controller.base.job.JobAdvertisedDetailRespVO;
 import com.citu.module.menduner.system.controller.base.job.JobAdvertisedPageReqVO;
 import com.citu.module.menduner.system.controller.base.job.JobAdvertisedReqVO;
@@ -27,6 +28,8 @@ import com.citu.module.menduner.system.controller.base.job.cv.JobCvRelDetailResp
 import com.citu.module.menduner.system.dal.dataobject.area.AreaDO;
 import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseDO;
 import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseUserBindDO;
+import com.citu.module.menduner.system.dal.dataobject.fair.FairDO;
+import com.citu.module.menduner.system.dal.dataobject.fair.FairDetailDO;
 import com.citu.module.menduner.system.dal.dataobject.job.JobAdvertisedDO;
 import com.citu.module.menduner.system.dal.dataobject.job.JobCvRelDO;
 import com.citu.module.menduner.system.dal.dataobject.person.PersonJobFavoriteDO;
@@ -41,6 +44,7 @@ import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Select;
 
 import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -95,6 +99,26 @@ public interface JobAdvertisedMapper extends BaseMapperX<JobAdvertisedDO> {
                 .orderByDesc(JobAdvertisedDO::getId));
     }
 
+    default  List<Long> getJobPostionIds(Long enterpriseId, Long userId, String status){
+        List<Long> res =new ArrayList<>();
+
+        List<JobAdvertisedDO> jobAdvertisedDOS = selectList(new LambdaQueryWrapperX<JobAdvertisedDO>()
+                .eqIfPresent(JobAdvertisedDO::getEnterpriseId, enterpriseId)
+                .eqIfPresent(JobAdvertisedDO::getUserId, userId)
+                .eqIfPresent(JobAdvertisedDO::getStatus, status)
+                .orderByDesc(JobAdvertisedDO::getId)
+                .select(JobAdvertisedDO::getPositionId, JobAdvertisedDO::getId)
+        );
+
+        for (JobAdvertisedDO jobAdvertisedDO : jobAdvertisedDOS) {
+            res.add(jobAdvertisedDO.getPositionId());
+        }
+
+        return  res;
+    }
+
+
+
     default List<JobAdvertisedDO> selectBySourceAndBizId(String source, Long bizId) {
         return selectList(new LambdaQueryWrapperX<JobAdvertisedDO>()
                 .eq(JobAdvertisedDO::getSource, source)
@@ -286,8 +310,11 @@ public interface JobAdvertisedMapper extends BaseMapperX<JobAdvertisedDO> {
     /**
      * 根据查询条件、企业id、用户id 分页查询职位信息
      **/
-    default PageResult<JobAdvertisedDO> selectPage(AppRecruitJobPageReqVO reqVO, Long enterpriseId, Long userId) {
-        LambdaQueryWrapper<JobAdvertisedDO> query = new LambdaQueryWrapperX<JobAdvertisedDO>()
+    default PageResult<AppRecruitJobRespVO> selectPage(AppRecruitJobPageReqVO reqVO, Long enterpriseId, Long userId) {
+
+
+        MPJLambdaWrapperX<JobAdvertisedDO> query = new MPJLambdaWrapperX<JobAdvertisedDO>()
+//                .selectAssociation(JobAdvertisedDO::)
                 .eqIfPresent(JobAdvertisedDO::getAreaId, reqVO.getAreaId())
                 .likeIfPresent(JobAdvertisedDO::getName, reqVO.getName())
                 .eqIfPresent(JobAdvertisedDO::getPositionId, reqVO.getPositionId())
@@ -300,8 +327,27 @@ public interface JobAdvertisedMapper extends BaseMapperX<JobAdvertisedDO> {
                 .eqIfPresent(JobAdvertisedDO::getUserId, userId)
                 .betweenIfPresent(JobAdvertisedDO::getCreateTime, reqVO.getCreateTime());
 
+        query.selectAll(JobAdvertisedDO.class);
+        query.selectAs(FairDetailDO::getJobFairId,  AppRecruitJobRespVO::getJobFairId);
         query.notIn(CollUtil.isNotEmpty(reqVO.getFilterNotJobIds()),JobAdvertisedDO::getId, reqVO.getFilterNotJobIds());
+        query.leftJoin(FairDetailDO.class, FairDetailDO::getJobId, JobAdvertisedDO::getId);
+
+
+        if(Long.valueOf(0L).equals(reqVO.getJobFairId())){
+
+
+
+            query.isNull(FairDetailDO::getJobId);
+        }else{
+            query.selectAs(FairDO::getTitle, AppRecruitJobRespVO::getJobFairName);
+            query.apply(" ( t1.Job_fair_id  is null or (t1.Job_fair_id  is not null and t2.id is not null)) " );
+            query.leftJoin(FairDO.class,  FairDO::getId,FairDetailDO::getJobFairId);
 
+        }
+
+        if(null!=reqVO.getJobFairId() &&  !Long.valueOf(0L).equals(reqVO.getJobFairId())){
+            query.eq(FairDetailDO::getJobFairId, reqVO.getJobFairId());
+        }
         if (reqVO.isHasExpiredData()) {
             // 获取过期的数据 当前时间小于过期时间
             query.le(JobAdvertisedDO::getExpireTime, LocalDateTime.now());
@@ -309,7 +355,8 @@ public interface JobAdvertisedMapper extends BaseMapperX<JobAdvertisedDO> {
             notExpireTime(query);
         }
         query.orderByDesc(JobAdvertisedDO::getTop, JobAdvertisedDO::getUpdateTime);
-        return selectPage(reqVO, query);
+
+        return  selectJoinPage(reqVO,AppRecruitJobRespVO.class,query);
     }
 
     /**
@@ -321,7 +368,7 @@ public interface JobAdvertisedMapper extends BaseMapperX<JobAdvertisedDO> {
      **/
     default List<AppRecruitJobRespVO> list(Long enterpriseId, Long userId, List<Long> ids, String status) {
 
-        return list(enterpriseId,userId,ids,status,(short) 0);
+        return list(enterpriseId,userId,ids,status,(short) 0,null);
     }
 
 
@@ -332,7 +379,7 @@ public interface JobAdvertisedMapper extends BaseMapperX<JobAdvertisedDO> {
      * @param userId       用户id
      * @param ids          id集合
      **/
-    default List<AppRecruitJobRespVO> list(Long enterpriseId, Long userId, List<Long> ids, String status,short exTime) {
+    default List<AppRecruitJobRespVO> list(Long enterpriseId, Long userId, List<Long> ids, String status,short exTime,String jobName) {
         MPJLambdaWrapperX<JobAdvertisedDO> query = new MPJLambdaWrapperX<>();
         query.selectAll(JobAdvertisedDO.class);
         query.eq(JobAdvertisedDO::getEnterpriseId, enterpriseId);
@@ -340,6 +387,7 @@ public interface JobAdvertisedMapper extends BaseMapperX<JobAdvertisedDO> {
         if(exTime==0) {
             notExpireTime(query);
         }
+        query.eqIfPresent(JobAdvertisedDO::getName, jobName);
         query.eqIfPresent(JobAdvertisedDO::getStatus, status);
         query.inIfPresent(JobAdvertisedDO::getId, ids);
         query.orderByDesc(JobAdvertisedDO::getUpdateTime);
@@ -625,4 +673,6 @@ public interface JobAdvertisedMapper extends BaseMapperX<JobAdvertisedDO> {
 
         return selectJoinList(CommonRespVO.class, wrapper);
     }
+
+
 }

+ 2 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/job/JobInterestedMapper.java

@@ -8,6 +8,7 @@ import com.citu.module.menduner.system.controller.base.job.interested.JobInteres
 import com.citu.module.menduner.system.dal.dataobject.job.JobInterestedDO;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.Collection;
 import java.util.List;
 
 /**
@@ -49,7 +50,7 @@ public interface JobInterestedMapper extends BaseMapperX<JobInterestedDO> {
                 .eqIfPresent(JobInterestedDO::getUserId, userId));
     }
 
-    default List<JobInterestedDO> selectByUserIdsList(List<Long> userIds) {
+    default List<JobInterestedDO> selectByUserIdsList(Collection<Long> userIds) {
         return selectList(new LambdaQueryWrapperX<JobInterestedDO>()
                 .inIfPresent(JobInterestedDO::getUserId, userIds));
     }

+ 6 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/PersonEnterpriseBlockMapper.java

@@ -10,6 +10,9 @@ import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseDO;
 import com.citu.module.menduner.system.dal.dataobject.person.PersonEnterpriseBlockDO;
 import com.citu.module.menduner.system.dal.dataobject.person.PersonEnterpriseSubscribeDO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  * 人才屏蔽企业关系 Mapper
@@ -42,4 +45,7 @@ public interface PersonEnterpriseBlockMapper extends BaseMapperX<PersonEnterpris
         query.orderByDesc(PersonEnterpriseSubscribeDO::getUpdateTime);
         return selectJoinPage(param, EnterpriseBaseSimpleRespVO.class, query);
     }
+
+    @Select("SELECT user_id FROM mde_person_enterprise_block WHERE enterprise_id = #{enterpriseId}")
+    List<Long> getEnterpriseBlockUserIds(Long enterpriseId);
 }

+ 63 - 7
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/PersonInfoMapper.java

@@ -15,6 +15,7 @@ import com.citu.module.menduner.system.controller.base.person.PersonQueryReqVO;
 import com.citu.module.menduner.system.controller.base.person.PersonRecommendQueryReqVO;
 import com.citu.module.menduner.system.controller.base.person.info.PersonInfoPageReqVO;
 import com.citu.module.menduner.system.controller.base.person.info.PersonInfoRespVO;
+import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseBrandDO;
 import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseTalentPoolDO;
 import com.citu.module.menduner.system.dal.dataobject.job.JobInterestedDO;
 import com.citu.module.menduner.system.dal.dataobject.person.PersonInfoDO;
@@ -28,6 +29,8 @@ import org.apache.ibatis.annotations.Mapper;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 
 /**
@@ -187,26 +190,73 @@ public interface PersonInfoMapper extends BaseMapperX<PersonInfoDO> {
      **/
     default PageResult<PersonInfoRespVO> queryPage(PersonQueryReqVO reqVO, Long enterpriseId) {
         MPJLambdaWrapperX<PersonInfoDO> query = new MPJLambdaWrapperX<>();
-        query.distinct();
+//        query.distinct();
         query.selectAsClass(PersonInfoDO.class, PersonInfoRespVO.class);
 
         // 连接用户表设置vip条件
         JoinHelper.joinAndFilterVipUser(query, PersonInfoDO::getUserId);
-        // 过滤屏蔽用户
-        JoinHelper.filterBlockedUsersForEnterprise(query, PersonInfoDO::getUserId, enterpriseId);
-        // 求职意向
-        query.leftJoin(JobInterestedDO.class, JobInterestedDO::getUserId, PersonInfoDO::getUserId);
+        // 过滤屏蔽用户  优化SQL
+//        JoinHelper.filterBlockedUsersForEnterprise(query, PersonInfoDO::getUserId, enterpriseId);
+        if(null!=reqVO.getUserIds() &&!reqVO.getUserIds().isEmpty() ){
+            HashSet<Long> userIds = new HashSet<>(reqVO.getUserIds());
+            if(null!=reqVO.getBlockUserIds()) {
+                userIds.removeAll(reqVO.getBlockUserIds());
+            }
+            query.in(PersonInfoDO::getUserId, userIds);
+        }else{
+            query.notIn(null!=reqVO.getBlockUserIds() && reqVO.getBlockUserIds().size() > 0,PersonInfoDO::getUserId, reqVO.getBlockUserIds());
+        }
+
+
+//        query.leftJoin(WorkExpDO.class, WorkExpDO::getUserId, PersonInfoDO::getUserId);
+//        query.leftJoin(EnterpriseBrandDO.class, on->
+//            on.eq(EnterpriseBrandDO::getEnterpriseCnName,WorkExpDO::getEnterpriseName)
+//                    .or(qw->qw.eq(EnterpriseBrandDO::getEnterpriseEnName,WorkExpDO::getEnterpriseName))
+//         );
+//        query.leftJoin(WorkExpDO.class, WorkExpDO::getUserId, PersonInfoDO::getUserId);
+
+//        query.leftJoin(JobInterestedDO.class, JobInterestedDO::getUserId, WorkExpDO::getUserId);
 
         // 并且条件
         query.inIfPresent(PersonInfoDO::getAreaId, reqVO.getAreaIds());
         query.eqIfPresent(PersonInfoDO::getEduType, reqVO.getEduType());
         query.eqIfPresent(PersonInfoDO::getExpType, reqVO.getExpType());
         query.eqIfPresent(PersonInfoDO::getType, reqVO.getType());
+        if(StringUtils.isNotBlank(reqVO.getBrand())){
+//            query.apply(" user_id in ( select user_id  from  mde_work_exp where MATCH(enterprise_Name) AGAINST(concat({0},'*') IN BOOLEAN MODE))",reqVO.getBrand());
+            query.innerJoin(WorkExpDO.class, on-> on.eq(WorkExpDO::getUserId, PersonInfoDO::getUserId).apply("MATCH(enterprise_Name) AGAINST({0}  IN BOOLEAN MODE)",reqVO.getBrand()+"*"));
+        }
 
-        query.and(CollUtil.isNotEmpty(reqVO.getPositionIds()) || CollUtil.isNotEmpty(reqVO.getAreaIds()) ,qw->qw.in(CollUtil.isNotEmpty(reqVO.getPositionIds()), JobInterestedDO::getPositionId, reqVO.getPositionIds())
+//        query.and(StringUtils.isNotBlank(reqVO.getBrand()),
+//                qw->qw.
+//                        apply("t.user_id in ( " +
+//                                "    select   ifnull(tab2.user_id,0)   from   mde_work_exp tab2 " +
+//                                " where " +
+//                                "  tab2.enterprise_name like  concat('%',{0},'%')   " +
+//                                ")",reqVO.getBrand(),reqVO.getBrand()) );
+//        query.and(StringUtils.isNotBlank(reqVO.getBrand()),
+//                qw->qw.
+//                        apply("t.user_id in ( " +
+//                                "    select   ifnull(tab2.user_id,0)   from mde_enterprise_brand tab1 inner join mde_work_exp tab2 " +
+//                                "   on       (tab2.enterprise_name =  tab1.enterprise_en_name  or  tab2.enterprise_name =  tab1.enterprise_cn_name)" +
+//                                     " where " +
+//                                          "  (tab1.brand_en_name  like concat('%',{0},'%')  or tab1.brand_cn_name  like  concat('%',{1},'%')  )  " +
+//                                ")",reqVO.getBrand(),reqVO.getBrand()) );
+
+        if(CollUtil.isNotEmpty(reqVO.getAreaIds())||CollUtil.isNotEmpty(reqVO.getPositionIds()) || CollUtil.isNotEmpty(reqVO.getAreaIds()) || (null!=reqVO.getWorkAreaIds()&& !reqVO.getWorkAreaIds().isEmpty()) ) {
+            // 求职意向
+            query.leftJoin(JobInterestedDO.class, JobInterestedDO::getUserId, PersonInfoDO::getUserId);
+        }
+
+        query.and(CollUtil.isNotEmpty(reqVO.getPositionIds()) || CollUtil.isNotEmpty(reqVO.getAreaIds()) ,
+                qw->qw.in(CollUtil.isNotEmpty(reqVO.getPositionIds()), JobInterestedDO::getPositionId, reqVO.getPositionIds())
                 .or(CollUtil.isNotEmpty(reqVO.getPositionIds()))
                 .in(CollUtil.isNotEmpty(reqVO.getAreaIds()), JobInterestedDO::getWorkAreaId, reqVO.getAreaIds()))
         ;
+        query.in(null!=reqVO.getWorkAreaIds()&& !reqVO.getWorkAreaIds().isEmpty(),JobInterestedDO::getWorkAreaId, reqVO.getWorkAreaIds());
+
+
+
         // 2504414 反馈BUG后修改前代码
 //        query.in(CollUtil.isNotEmpty(reqVO.getPositionIds()), JobInterestedDO::getPositionId, reqVO.getPositionIds())
 //                .or()
@@ -225,6 +275,12 @@ public interface PersonInfoMapper extends BaseMapperX<PersonInfoDO> {
         query.and(StringUtils.isNotEmpty(reqVO.getContent()),
                 qw->qw.like(PersonInfoDO::getName, reqVO.getContent())
                         .or()
+//                        .like(EnterpriseBrandDO::getBrandCnName,reqVO.getContent())
+//                        .or()
+//                        .like(EnterpriseBrandDO::getBrandEnName,reqVO.getContent())
+//                        .or()
+//                        .like(WorkExpDO::getEnterpriseName,reqVO.getContent())
+                        .or()
                         .like(PersonInfoDO::getTagList, reqVO.getContent())
                         .or()
                         .like(PersonInfoDO::getAdvantage, reqVO.getContent())
@@ -240,7 +296,7 @@ public interface PersonInfoMapper extends BaseMapperX<PersonInfoDO> {
 //                .or()
 //                .likeIfExists(PersonInfoDO::getForeignName, reqVO.getContent());
 
-
+        query.groupBy(PersonInfoDO::getId);
         query.orderByDesc(PersonInfoDO::getUpdateTime);
 
         return selectJoinPage(reqVO, PersonInfoRespVO.class, query);

+ 49 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/user/MdeUserMapper.java

@@ -1,5 +1,6 @@
 package com.citu.module.menduner.system.dal.mysql.user;
 
+import cn.hutool.core.collection.CollUtil;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.mybatis.core.mapper.BaseMapperX;
 import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
@@ -16,10 +17,13 @@ import com.citu.module.menduner.system.controller.base.userperson.UserPersonResp
 import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseDO;
 import com.citu.module.menduner.system.dal.dataobject.interview.InterviewInviteDO;
 import com.citu.module.menduner.system.dal.dataobject.job.JobAdvertisedDO;
+import com.citu.module.menduner.system.dal.dataobject.job.JobInterestedDO;
 import com.citu.module.menduner.system.dal.dataobject.logger.LoginLogDO;
 import com.citu.module.menduner.system.dal.dataobject.person.PersonInfoDO;
 import com.citu.module.menduner.system.dal.dataobject.user.MdeUserDO;
+import com.citu.module.menduner.system.dal.dataobject.workexp.WorkExpDO;
 import com.citu.module.menduner.system.util.RecruitAnalysisUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.time.LocalDateTime;
@@ -56,6 +60,7 @@ public interface MdeUserMapper extends BaseMapperX<MdeUserDO> {
         query.selectAssociation(MdeUserDO.class, UserPersonRespVO::getUser);
         query.selectAssociation(PersonInfoDO.class, UserPersonRespVO::getPerson);
         query.leftJoin(PersonInfoDO.class, on -> on.eq(PersonInfoDO::getUserId, MdeUserDO::getId));
+        query.leftJoin(JobInterestedDO.class, JobInterestedDO::getUserId, PersonInfoDO::getUserId);
 
         query.likeRightIfExists(PersonInfoDO::getName, reqVO.getName())
                 .likeRightIfExists(PersonInfoDO::getForeignName, reqVO.getForeignName());
@@ -72,12 +77,54 @@ public interface MdeUserMapper extends BaseMapperX<MdeUserDO> {
                 .eqIfExists(PersonInfoDO::getEduType, reqVO.getEduType())
                 .eqIfExists(PersonInfoDO::getExpType, reqVO.getExpType());
 
+
         query.eqIfExists(MdeUserDO::getVipFlag, reqVO.getVipFlag());
         query.eqIfExists(MdeUserDO::getStatus, reqVO.getStatus());
         query.likeRightIfExists(MdeUserDO::getId, reqVO.getUserId());
         query.betweenIfPresent2(MdeUserDO::getVipExpireDate, reqVO.getVipExpireDate());
         query.betweenIfPresent2(MdeUserDO::getCreateTime, reqVO.getCreateTime());
 
+
+        // 并且条件
+        query.in(null!=reqVO.getAreaIds() && !reqVO.getAreaIds().isEmpty(),PersonInfoDO::getAreaId, reqVO.getAreaIds());
+        query.eq(StringUtils.isNotEmpty(reqVO.getEduType()),PersonInfoDO::getEduType, reqVO.getEduType());
+        query.eq(StringUtils.isNotEmpty(reqVO.getExpType()),PersonInfoDO::getExpType, reqVO.getExpType());
+        query.eq(StringUtils.isNotEmpty(reqVO.getType()),PersonInfoDO::getType, reqVO.getType());
+        query.and(CollUtil.isNotEmpty(reqVO.getPositionIds()) || CollUtil.isNotEmpty(reqVO.getAreaIds()) , qw->qw.in(CollUtil.isNotEmpty(reqVO.getPositionIds()), JobInterestedDO::getPositionId, reqVO.getPositionIds())
+                .or(CollUtil.isNotEmpty(reqVO.getPositionIds()))
+                .in(CollUtil.isNotEmpty(reqVO.getAreaIds()), JobInterestedDO::getWorkAreaId, reqVO.getAreaIds()))
+
+        ;
+
+        if(StringUtils.isNotBlank(reqVO.getBrand())){
+            query.apply("t.id in ( select  ifnull(user_id,0)   from   mde_work_exp  where  MATCH(enterprise_name) AGAINST({0} IN BOOLEAN MODE) )  " ,reqVO.getBrand()+"*");
+//            query.innerJoin(WorkExpDO.class, on-> on.eq(WorkExpDO::getUserId, MdeUserDO::getId).apply("MATCH(enterprise_name) AGAINST({0} IN BOOLEAN MODE)",reqVO.getBrand()+"*"));
+        }
+
+
+//        query.and(StringUtils.isNotBlank(reqVO.getBrand()),
+//                qw->qw.
+//                        apply("t.user_id in ( " +
+//                                "    select   ifnull(tab2.user_id,0)   from   mde_work_exp tab2 " +
+//                                " where " +
+//                                "  tab2.enterprise_name like  concat('%',{0},'%')   " +
+//                                ")",reqVO.getBrand(),reqVO.getBrand()) );
+
+
+        query.in(null!=reqVO.getWorkAreaIds()&& !reqVO.getWorkAreaIds().isEmpty(),JobInterestedDO::getWorkAreaId, reqVO.getWorkAreaIds());
+
+        query.and(StringUtils.isNotEmpty(reqVO.getContent()),
+                qw->qw.like(PersonInfoDO::getName, reqVO.getContent())
+                        .or()
+                        .like(PersonInfoDO::getTagList, reqVO.getContent())
+                        .or()
+                        .like(PersonInfoDO::getAdvantage, reqVO.getContent())
+                        .or()
+                        .like(PersonInfoDO::getForeignName, reqVO.getContent())
+        );
+
+        query.groupBy(MdeUserDO::getId);
+
         query.orderByDesc(PersonInfoDO::getUpdateTime);
         return selectJoinPage(reqVO, UserPersonRespVO.class, query);
     }
@@ -186,4 +233,6 @@ public interface MdeUserMapper extends BaseMapperX<MdeUserDO> {
         query.orderByDesc(LoginLogDO::getCreateTime);
         return selectJoinPage(reqVO, UserPersonRespVO.class, query);
     }
+
+    void selectByEnterpriseName(String brand);
 }

+ 11 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/workexp/WorkExpMapper.java

@@ -7,8 +7,11 @@ import com.citu.module.menduner.system.controller.base.workexp.WorkExpPageReqVO;
 import com.citu.module.menduner.system.dal.dataobject.eduexp.EduExpDO;
 import com.citu.module.menduner.system.dal.dataobject.workexp.WorkExpDO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
 
+import java.util.Collection;
 import java.util.List;
+import java.util.Set;
 
 /**
  * 工作经历 Mapper
@@ -40,6 +43,12 @@ public interface WorkExpMapper extends BaseMapperX<WorkExpDO> {
         );
     }
 
+     default    List<WorkExpDO> selectByUserIdsList(Collection<Long> userIds){
+         return selectList(new LambdaQueryWrapperX<WorkExpDO>()
+                 .inIfPresent(WorkExpDO::getUserId, userIds)
+                 .orderByDesc(WorkExpDO::getStartTime));
+     }
+
 
     default WorkExpDO selectByIdAndUserId(Long id, Long userId) {
         return selectOne(new LambdaQueryWrapperX<WorkExpDO>()
@@ -61,5 +70,6 @@ public interface WorkExpMapper extends BaseMapperX<WorkExpDO> {
                 .last("limit 1"));
     }
 
-
+    @Select("select user_id  from mde_work_exp where enterprise_name LIKE concat('%',#{brand},'%') group by user_id limit 10000  ")
+    List<Long> selectByEnterpriseName(String brand);
 }

+ 2 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/vip/EnterpriseEntitlementService.java

@@ -106,4 +106,6 @@ public interface EnterpriseEntitlementService {
      boolean checkPermissionRetBol(String type);
 
     void addPublishJobCount(Long enterpriseId, int publishJobCount);
+
+    void updateDefaultEnterprise(Integer publishJobCount, Integer searchCount, Integer lookCvCount);
 }

+ 5 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/vip/EnterpriseEntitlementServiceImpl.java

@@ -345,4 +345,9 @@ public class EnterpriseEntitlementServiceImpl implements EnterpriseEntitlementSe
     public void addPublishJobCount(Long enterpriseId, int publishJobCount) {
         mapper.addPublishJobCount(enterpriseId, publishJobCount);
     }
+
+    @Override
+    public void updateDefaultEnterprise(Integer publishJobCount, Integer searchCount, Integer lookCvCount) {
+        mapper.updateDefaultEnterprise(publishJobCount,searchCount,lookCvCount);
+    }
 }

+ 21 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/vip/EnterprisePackageServiceImpl.java

@@ -7,6 +7,7 @@ import com.citu.module.menduner.system.controller.base.enterprise.vip.Enterprise
 import com.citu.module.menduner.system.controller.base.enterprise.vip.EnterprisePackageSaveReqVO;
 import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterprisePackageDO;
 import com.citu.module.menduner.system.dal.mysql.enterprise.EnterprisePackageMapper;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
@@ -14,6 +15,7 @@ import javax.annotation.Resource;
 import java.util.List;
 
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.citu.module.menduner.system.enums.ErrorCodeConstants.ENTERPRISE_PACKAGE_DEFAULT_PACKAGE_NOT_DELETE;
 import static com.citu.module.menduner.system.enums.ErrorCodeConstants.ENTERPRISE_PACKAGE_NOT_EXISTS;
 
 /**
@@ -32,6 +34,10 @@ public class EnterprisePackageServiceImpl implements EnterprisePackageService {
     @Resource
     private EnterprisePackageMapper mapper;
 
+    @Resource
+    @Lazy
+    EnterpriseEntitlementService enterpriseEntitlementService;
+
     @Override
     public Long createEnterprisePackage(EnterprisePackageSaveReqVO createReqVO) {
         // 插入
@@ -47,11 +53,26 @@ public class EnterprisePackageServiceImpl implements EnterprisePackageService {
         validateEnterprisePackageExists(updateReqVO.getId());
         // 更新
         EnterprisePackageDO updateObj = BeanUtils.toBean(updateReqVO, EnterprisePackageDO.class);
+        EnterprisePackageDO enterprisePackageDO = mapper.selectById(updateObj.getId());
+        // 默认租户套餐额外进行处理
+        if(enterprisePackageDO.getDefaultPackage()){
+            // 发布职位数量
+            Integer publishJobCount =  updateObj.getPublishJobCount() -  enterprisePackageDO.getPublishJobCount();
+            Integer searchCount =  updateObj.getSearchCount() -  enterprisePackageDO.getSearchCount();
+            Integer lookCvCount =  updateObj.getLookCvCount() -  enterprisePackageDO.getLookCvCount();
+            enterpriseEntitlementService.updateDefaultEnterprise(publishJobCount,searchCount,lookCvCount);
+
+
+        }
         mapper.updateById(updateObj);
     }
 
     @Override
     public void deleteEnterprisePackage(Long id) {
+        EnterprisePackageDO enterprisePackageDO = mapper.selectById(id);
+        if(enterprisePackageDO.getDefaultPackage()){
+            throw exception(ENTERPRISE_PACKAGE_DEFAULT_PACKAGE_NOT_DELETE);
+        }
         // 校验存在
         validateEnterprisePackageExists(id);
         // 删除

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/fair/FairService.java

@@ -69,7 +69,7 @@ public interface FairService {
     /**
      * 获取在时间段内的招聘会列表
      **/
-    List<FairDO> list();
+    PageResult<FairDO> list(AppJobFairPageReqVO reqVO);
 
     /**
      * 获取在时间段内的招聘会列表

+ 3 - 6
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/fair/FairServiceImpl.java

@@ -201,13 +201,10 @@ public class FairServiceImpl implements FairService {
     }
 
     @Override
-    public List<FairDO> list() {
+    public PageResult<FairDO> list(AppJobFairPageReqVO reqVO) {
         LocalDate date = LocalDate.now();
-        return fairMapper.selectList(new LambdaQueryWrapperX<FairDO>()
-                .eq(FairDO::getStatus, MendunerStatusEnum.ENABLE.getStatus())
-                .ge(FairDO::getEndTime, date.atStartOfDay())
-                .orderByDesc(FairDO::getEndTime)
-        );
+        PageResult<FairDO> fairDOPageResult = fairMapper.selectAppPage(reqVO, date);
+        return fairDOPageResult;
     }
 
     @Override

+ 8 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/JobAdvertisedService.java

@@ -174,6 +174,11 @@ public interface JobAdvertisedService {
      **/
     void enable(List<Long> ids);
 
+    void publishJobEnable(List<Long> longs);
+
+    void del(List<Long> longs);
+
+
     /**
      * 开启职位并修改过期时间
      **/
@@ -194,14 +199,14 @@ public interface JobAdvertisedService {
      *
      * @return 简易职位信息的集合
      **/
-    List<AppRecruitJobRespVO> getList(String status,short exTime);
+    List<AppRecruitJobRespVO> getList(String status,short exTime,String jobName);
 
     /**
      * 获取根据id集合获取对应发布的职位
      *
      * @return 简易职位信息的集合
      **/
-    List<AppRecruitJobRespVO> getByIdsList(List<Long> ids);
+    List<AppRecruitJobRespVO> getByIdsList(List<Long> ids,  String status);
 
     /**
      * 置顶职位
@@ -276,4 +281,5 @@ public interface JobAdvertisedService {
      */
     List<RecruitJobAnalysisRespVO> getNewJob(RecruitAnalysisPageReqVO reqVO, Integer topNum);
 
+    List<Long> getJobPositionIds(String number);
 }

+ 37 - 5
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/JobAdvertisedServiceImpl.java

@@ -406,13 +406,33 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
                 // 已经是开启状态
                 throw exception(MDE_JOB_ADVERTISED_STATUS_ENABLE_ERROR);
             }
+//            boolean exec = job.getCreateTime().isAfter(LocalDateTime.of(2024, 11, 1, 0, 0));
+            // 扣除额度 20241101之后的数据才做处理  250609 不在扣除额度
+//            vipEntitlementCheckAspect.deductQuota(VipEntitlementCheck.OPERATE_PUBLISH_JOB, exec);
+            enable(job);
+        }
+    }
+
+    @Override
+    public void publishJobEnable(List<Long> ids) {
+        for (Long id : ids) {
+            JobAdvertisedDO job = get(id);
+            if (JobStatusEnum.ENABLE.getStatus().equals(job.getStatus())) {
+                // 已经是开启状态
+                throw exception(MDE_JOB_ADVERTISED_STATUS_ENABLE_ERROR);
+            }
             boolean exec = job.getCreateTime().isAfter(LocalDateTime.of(2024, 11, 1, 0, 0));
-            // 扣除额度 20241101之后的数据才做处理
             vipEntitlementCheckAspect.deductQuota(VipEntitlementCheck.OPERATE_PUBLISH_JOB, exec);
             enable(job);
         }
     }
 
+    public void del(List<Long> ids){
+        for (Long id : ids) {
+            mapper.deleteById(id);
+        }
+    }
+
     void enable(JobAdvertisedDO job) {
         job.setStatus(JobStatusEnum.ENABLE.getStatus());
         job.setUpdateTime(LocalDateTime.now());
@@ -479,11 +499,11 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
     }
 
     @Override
-    public List<AppRecruitJobRespVO> getList(String status,short exTime) {
+    public List<AppRecruitJobRespVO> getList(String status,short exTime,String jobName) {
         List<AppRecruitJobRespVO> list = mapper.list(
                 LoginUserContext.getEnterpriseId(),
                 LoginUserContext.getUserId(),
-                null, status,exTime
+                null, status,exTime,jobName
         );
         list.forEach(item -> {
             if (null != item.getAreaId()) {
@@ -494,11 +514,11 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
     }
 
     @Override
-    public List<AppRecruitJobRespVO> getByIdsList(List<Long> ids) {
+    public List<AppRecruitJobRespVO> getByIdsList(List<Long> ids,String status) {
         return mapper.list(
                 LoginUserContext.getEnterpriseId(),
                 LoginUserContext.getUserId(),
-                ids, null
+                ids, status
         );
     }
 
@@ -680,4 +700,16 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
         }
         return mapper.getJobNum(reqVO, timeRange[0], timeRange[1]).getList();
     }
+
+    @Override
+    public List<Long> getJobPositionIds(String status) {
+
+
+        return  mapper.getJobPostionIds(
+                LoginUserContext.getEnterpriseId(),
+                LoginUserContext.getUserId(),
+                 status
+        );
+
+    }
 }

+ 15 - 12
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/JobIntegrationServiceImpl.java

@@ -334,7 +334,7 @@ public class JobIntegrationServiceImpl implements JobIntegrationService {
 
     @Override
     public PageResult<AppRecruitJobRespVO> page(AppRecruitJobPageReqVO reqVO) {
-        PageResult<JobAdvertisedDO> pageResult = jobAdvertisedMapper.selectPage(reqVO,
+        PageResult<AppRecruitJobRespVO> pageResult = jobAdvertisedMapper.selectPage(reqVO,
                 LoginUserContext.getEnterpriseId(), LoginUserContext.getUserId());
         if (CollUtil.isEmpty(pageResult.getList())) {
             return PageResult.empty();
@@ -343,36 +343,39 @@ public class JobIntegrationServiceImpl implements JobIntegrationService {
 
         // 获取招聘职位id集合
         List<Long> jobIdList
-                = pageResult.getList().stream().map(JobAdvertisedDO::getId).collect(Collectors.toList());
+                = pageResult.getList().stream().map(AppRecruitJobRespVO::getId).collect(Collectors.toList());
 
         // 查询简历
         List<JobCvRelDO> jobCvRelDOList = jobCvRelMapper.selectByJobIdListAndFilterUnfit(jobIdList);
 
-        pageResult.getList().forEach(job -> {
-            AppRecruitJobRespVO respVO = JobAdvertisedConvert.INSTANCE.convert4(job);
+        pageResult.getList().forEach(respVO -> {
+//            AppRecruitJobRespVO respVO = JobAdvertisedConvert.INSTANCE.convert4(job);
             Long count = jobCvRelDOList.stream()
-                    .filter(jobCvRelDO -> jobCvRelDO.getJobId().equals(job.getId())).count();
+                    .filter(jobCvRelDO -> jobCvRelDO.getJobId().equals(respVO.getId())).count();
             respVO.setCount(count);
             // 计算多少天后到期
-            if (null != job.getExpireTime()) {
+            if (null != respVO.getExpireTime()) {
                 respVO.setExpireDay(ChronoUnit.DAYS.between(LocalDateTime.now(), respVO.getExpireTime()));
             }
 
-            boolean isVip = enterpriseMapper.checkVip(job.getEnterpriseId());
+            boolean isVip = enterpriseMapper.checkVip(respVO.getEnterpriseId());
             // 如果不是企业vip并且发布职位的job.createTime超过了24小时则不可编辑,respVO.setEdit(false);
-            if (!isVip && JobStatusEnum.ENABLE.getStatus().equals(job.getStatus())
-                    && ChronoUnit.HOURS.between(job.getCreateTime(), LocalDateTime.now()) > 24) {
+            if (!isVip && JobStatusEnum.ENABLE.getStatus().equals(respVO.getStatus())
+                    && ChronoUnit.HOURS.between(respVO.getCreateTime(), LocalDateTime.now()) > 24) {
                 respVO.setEdit(false);
             } else {
                 respVO.setEdit(true);
             }
 
-            if (null != job.getAreaId()) {
-                respVO.setArea(areaService.getById(job.getAreaId()));
+            if (null != respVO.getAreaId()) {
+                respVO.setArea(areaService.getById(respVO.getAreaId()));
             }
 
             // 查询当前职位加入哪些招聘会
-            respVO.setJobFairIds(fairDetailMapper.selectJobFairIdsByJobId(job.getId()));
+//            respVO.setJobFairIds(fairDetailMapper.selectJobFairIdsByJobId(respVO.getId()));
+//            fairDetailMapper.select
+
+//            fairDetailMapper.selectById()
 
             list.add(respVO);
 

+ 5 - 5
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/handler/JobDefaultOperateHandler.java

@@ -47,11 +47,11 @@ public class JobDefaultOperateHandler implements JobOperateHandler {
         if (null == job.getSource()) {
             job.setSource(JobSourceEnum.MANAGER.getType());
         }
-
-        // 检查职位名称是否重复
-        if (mapper.existByName(LoginUserContext.getEnterpriseId(), LoginUserContext.getUserId(), job.getId(), job.getName())) {
-            throw exception(MDE_JOB_ADVERTISED_NAME_DUPLICATE, job.getName());
-        }
+//        250609  关闭检测 职位名称是否重复
+//        // 检查职位名称是否重复
+//        if (mapper.existByName(LoginUserContext.getEnterpriseId(), LoginUserContext.getUserId(), job.getId(), job.getName())) {
+//            throw exception(MDE_JOB_ADVERTISED_NAME_DUPLICATE, job.getName());
+//        }
     }
 
     @Override

+ 53 - 4
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/PersonIntegrationServiceImpl.java

@@ -9,8 +9,11 @@ import com.citu.module.menduner.system.api.python.GraphApi;
 import com.citu.module.menduner.system.api.python.GraphQueryDTO;
 import com.citu.module.menduner.system.api.python.GraphQueryPageDTO;
 import com.citu.module.menduner.system.api.python.GraphSendDTO;
+import com.citu.module.menduner.system.controller.app.recruit.person.job.AppRecruitJobInterestedRespVO;
 import com.citu.module.menduner.system.controller.app.recruit.person.vo.AppRecruitPersonDetailRespVO;
 import com.citu.module.menduner.system.controller.app.recruit.person.vo.AppRecruitPersonInfoRespVO;
+import com.citu.module.menduner.system.controller.app.recruit.person.workexp.AppRecruitWorkExpRespVO;
+import com.citu.module.menduner.system.controller.base.area.AreaWebRespVO;
 import com.citu.module.menduner.system.controller.base.person.PersonMapQueryReqVO;
 import com.citu.module.menduner.system.controller.base.person.PersonQueryReqVO;
 import com.citu.module.menduner.system.controller.base.person.PersonRecommendQueryReqVO;
@@ -26,6 +29,7 @@ import com.citu.module.menduner.system.dal.dataobject.eduexp.EduExpDO;
 import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseTalentPoolDO;
 import com.citu.module.menduner.system.dal.dataobject.job.JobAdvertisedDO;
 import com.citu.module.menduner.system.dal.dataobject.job.JobInterestedDO;
+import com.citu.module.menduner.system.dal.dataobject.person.PersonEnterpriseBlockDO;
 import com.citu.module.menduner.system.dal.dataobject.person.PersonInfoDO;
 import com.citu.module.menduner.system.dal.dataobject.person.PersonSkillDO;
 import com.citu.module.menduner.system.dal.dataobject.projectexp.ProjectExpDO;
@@ -35,6 +39,7 @@ import com.citu.module.menduner.system.dal.dataobject.workexp.WorkExpDO;
 import com.citu.module.menduner.system.dal.mysql.eduexp.EduExpMapper;
 import com.citu.module.menduner.system.dal.mysql.enterprise.EnterpriseTalentPoolMapper;
 import com.citu.module.menduner.system.dal.mysql.job.JobInterestedMapper;
+import com.citu.module.menduner.system.dal.mysql.person.PersonEnterpriseBlockMapper;
 import com.citu.module.menduner.system.dal.mysql.person.PersonInfoMapper;
 import com.citu.module.menduner.system.dal.mysql.person.PersonSkillMapper;
 import com.citu.module.menduner.system.dal.mysql.projectexp.ProjectExpMapper;
@@ -48,6 +53,7 @@ import com.citu.module.menduner.system.service.job.JobAdvertisedService;
 import com.citu.module.menduner.system.service.position.PositionService;
 import com.citu.module.menduner.system.util.RedisUtils;
 import org.jetbrains.annotations.NotNull;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 import org.springframework.validation.annotation.Validated;
@@ -106,6 +112,11 @@ public class PersonIntegrationServiceImpl implements PersonIntegrationService {
 
     @Resource
     private RedisUtils redisUtils;
+    @Autowired
+    private MdeUserMapper mdeUserMapper;
+
+    @Resource
+    PersonEnterpriseBlockMapper personEnterpriseBlockMapper;
 
     @Override
     public PageResult<UserPersonRespVO> page(UserPersonPageReqVO pageReqVO) {
@@ -351,24 +362,56 @@ public class PersonIntegrationServiceImpl implements PersonIntegrationService {
                 reqVO.setAreaIds(areaIdList);
             }
         }
+        List<Long> blockUserIds = personEnterpriseBlockMapper.getEnterpriseBlockUserIds(LoginUserContext.getEnterpriseId());
+        reqVO.setBlockUserIds(blockUserIds);
+//
+//        if(org.apache.commons.lang3.StringUtils.isNotBlank(reqVO.getBrand())){
+//          List<Long> userIds =   workExpMapper.selectByEnterpriseName(reqVO.getBrand());
+//          if(userIds.size() > 5000){
+//              // TODO 考虑提示用户输入更精确的检索
+//          }
+//          reqVO.setUserIds(userIds);
+//
+//        }
+
+
+
         PageResult<PersonInfoRespVO> result = personInfoMapper.queryPage(reqVO, LoginUserContext.getEnterpriseId());
+
         fillPosition(result);
         result = fillArea(result);
         PageResult<AppRecruitPersonInfoRespVO> recruitResult =
                 BeanUtils.toBean(result, AppRecruitPersonInfoRespVO.class);
+        Map<Long,List<AppRecruitJobInterestedRespVO>> appRecruitJobInterestedRespVOCache =new HashMap<>();
+        Map<Long,List<AppRecruitWorkExpRespVO>> workExpRespVOCache =new HashMap<>();
+
         recruitResult.getList().forEach(item -> {
-            item.setInterestedList(
-                    JobInterestedConvert.INSTANCE.convertList2(jobInterestedMapper.selectByUserIdList(item.getUserId()))
+            List<AppRecruitJobInterestedRespVO> appRecruitJobInterestedRespVOS = appRecruitJobInterestedRespVOCache.computeIfAbsent(item.getUserId(), k -> new ArrayList<>());
+            List<AppRecruitWorkExpRespVO> workExpRespVO= workExpRespVOCache.computeIfAbsent(item.getUserId(), k -> new ArrayList<>());
+
+            item.setInterestedList(appRecruitJobInterestedRespVOS
+//                    JobInterestedConvert.INSTANCE.convertList2(jobInterestedMapper.selectByUserIdList(item.getUserId()))
             );
-            item.setWorkList(
-                    WorkExpConvert.INSTANCE.convertList2(workExpMapper.selectByUserIdList(item.getUserId()))
+            item.setWorkList(workExpRespVO
+//                    WorkExpConvert.INSTANCE.convertList2(workExpMapper.selectByUserIdList(item.getUserId()))
             );
         });
+        if(!appRecruitJobInterestedRespVOCache.isEmpty()) {
+            List<JobInterestedDO> jobInterestedDOS = jobInterestedMapper.selectByUserIdsList(appRecruitJobInterestedRespVOCache.keySet());
+            jobInterestedDOS.forEach(item -> appRecruitJobInterestedRespVOCache.getOrDefault(item.getUserId(), new ArrayList<>()).add(JobInterestedConvert.INSTANCE.convert2(item)));
+        }
+        if(!workExpRespVOCache.isEmpty()) {
+            List<WorkExpDO> workExpDOS =  workExpMapper.selectByUserIdsList(workExpRespVOCache.keySet());
+            workExpDOS.forEach(item->workExpRespVOCache.getOrDefault(item.getUserId(),new ArrayList<>()).add(  WorkExpConvert.INSTANCE.convert2(item)));
+        }
+
         return recruitResult;
     }
 
     @NotNull
     private PageResult<PersonInfoRespVO> fillArea(PageResult<PersonInfoRespVO> result) {
+
+
         result.getList().forEach(item -> {
             if (null != item.getAreaId()) {
                 item.setArea(areaService.getById(item.getAreaId()));
@@ -454,6 +497,12 @@ public class PersonIntegrationServiceImpl implements PersonIntegrationService {
                     reqVO.setPositionIds(Collections.singletonList(job.getPositionId()));
                 }
             }
+        }else{
+                List<Long> positionIds  =     jobAdvertisedService.getJobPositionIds("0");
+                if(positionIds.isEmpty()){
+                    return new PageResult<>(0L);
+                }
+                reqVO.setPositionIds(positionIds);
         }
 
         PageResult<PersonInfoRespVO> result = personInfoMapper.queryRecommendPerson(reqVO,