Browse Source

1、解决已知bug

rayson 11 months ago
parent
commit
2e6e26f49e
11 changed files with 79 additions and 41 deletions
  1. 8 1
      citu-framework/citu-spring-boot-starter-web/src/main/java/com/citu/framework/apilog/core/service/ApiAccessLogFrameworkServiceImpl.java
  2. 10 0
      citu-module-infra/citu-module-infra-biz/src/main/java/com/citu/module/infra/dal/dataobject/logger/ApiAccessLogDO.java
  3. 14 1
      citu-module-infra/citu-module-infra-biz/src/main/java/com/citu/module/infra/service/logger/ApiAccessLogServiceImpl.java
  4. 3 1
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/account/BalanceBizTypeEnum.java
  5. 1 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/account/PointBizTypeEnum.java
  6. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/enterprise/EnterpriseAccountController.java
  7. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/appadmin/job/AppAdminJobAdvertisedController.java
  8. 3 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/appadmin/person/cv/AppAdminJobCvRelRespVO.java
  9. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/interview/InterviewInviteMapper.java
  10. 2 29
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/job/JobCvRelMapper.java
  11. 35 6
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/interview/InterviewInviteServiceImpl.java

+ 8 - 1
citu-framework/citu-spring-boot-starter-web/src/main/java/com/citu/framework/apilog/core/service/ApiAccessLogFrameworkServiceImpl.java

@@ -3,6 +3,7 @@ package com.citu.framework.apilog.core.service;
 import com.citu.module.infra.api.logger.ApiAccessLogApi;
 import com.citu.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Async;
 
 /**
@@ -12,6 +13,7 @@ import org.springframework.scheduling.annotation.Async;
  *
  * @author 芋道源码
  */
+@Slf4j
 @RequiredArgsConstructor
 public class ApiAccessLogFrameworkServiceImpl implements ApiAccessLogFrameworkService {
 
@@ -20,7 +22,12 @@ public class ApiAccessLogFrameworkServiceImpl implements ApiAccessLogFrameworkSe
     @Override
     @Async
     public void createApiAccessLog(ApiAccessLogCreateReqDTO reqDTO) {
-        apiAccessLogApi.createApiAccessLog(reqDTO);
+        try {
+            apiAccessLogApi.createApiAccessLog(reqDTO);
+        } catch (Throwable ex) {
+            // 由于 @Async 异步调用,这里打印下日志,更容易跟进
+            log.error("[createApiAccessLog][url({}) log({}) 发生异常]", reqDTO.getRequestUrl(), reqDTO, ex);
+        }
     }
 
 }

+ 10 - 0
citu-module-infra/citu-module-infra-biz/src/main/java/com/citu/module/infra/dal/dataobject/logger/ApiAccessLogDO.java

@@ -26,6 +26,16 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 public class ApiAccessLogDO extends BaseDO {
 
+    /**
+     * {@link #requestParams} 的最大长度
+     */
+    public static final Integer REQUEST_PARAMS_MAX_LENGTH = 8000;
+
+    /**
+     * {@link #resultMsg} 的最大长度
+     */
+    public static final Integer RESULT_MSG_MAX_LENGTH = 512;
+
     /**
      * 编号
      */

+ 14 - 1
citu-module-infra/citu-module-infra-biz/src/main/java/com/citu/module/infra/service/logger/ApiAccessLogServiceImpl.java

@@ -1,7 +1,10 @@
 package com.citu.module.infra.service.logger;
 
+import cn.hutool.core.util.StrUtil;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.framework.tenant.core.context.TenantContextHolder;
+import com.citu.framework.tenant.core.util.TenantUtils;
 import com.citu.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO;
 import com.citu.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO;
 import com.citu.module.infra.dal.dataobject.logger.ApiAccessLogDO;
@@ -13,6 +16,9 @@ import org.springframework.validation.annotation.Validated;
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
 
+import static com.citu.module.infra.dal.dataobject.logger.ApiAccessLogDO.REQUEST_PARAMS_MAX_LENGTH;
+import static com.citu.module.infra.dal.dataobject.logger.ApiAccessLogDO.RESULT_MSG_MAX_LENGTH;
+
 /**
  * API 访问日志 Service 实现类
  *
@@ -29,7 +35,14 @@ public class ApiAccessLogServiceImpl implements ApiAccessLogService {
     @Override
     public void createApiAccessLog(ApiAccessLogCreateReqDTO createDTO) {
         ApiAccessLogDO apiAccessLog = BeanUtils.toBean(createDTO, ApiAccessLogDO.class);
-        apiAccessLogMapper.insert(apiAccessLog);
+        apiAccessLog.setRequestParams(StrUtil.maxLength(apiAccessLog.getRequestParams(), REQUEST_PARAMS_MAX_LENGTH));
+        apiAccessLog.setResultMsg(StrUtil.maxLength(apiAccessLog.getResultMsg(), RESULT_MSG_MAX_LENGTH));
+        if (TenantContextHolder.getTenantId() != null) {
+            apiAccessLogMapper.insert(apiAccessLog);
+        } else {
+            // 极端情况下,上下文中没有租户时,此时忽略租户上下文,避免插入失败!
+            TenantUtils.executeIgnore(() -> apiAccessLogMapper.insert(apiAccessLog));
+        }
     }
 
     @Override

+ 3 - 1
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/account/BalanceBizTypeEnum.java

@@ -22,7 +22,9 @@ public enum BalanceBizTypeEnum {
     PLATFORM_COMMISSION(4, "平台抽成", "平台抽取 {} ", true),
     RECOMMENDED_POSITIONS(5, "推荐职位", "推荐职位,获得 {}", true),
     DELIVERY_PERSON(6, "投递人", "投递人,获得 {}", true),
-    GIFT(7, "赠与", "赠与,获得 {}", true)
+    GIFT(7, "赠与", "赠与,获得 {}", true),
+    NOT_RECOMMENDED(8,"无推荐人,推荐人佣金给到平台","推荐职位,获得 {}",true),
+
     ;
 
 

+ 1 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/account/PointBizTypeEnum.java

@@ -23,6 +23,7 @@ public enum PointBizTypeEnum {
     RECOMMENDED_POSITIONS(5, "推荐职位", "推荐职位,获得 {}", true),
     DELIVERY_PERSON(6, "投递人", "投递人,获得 {}", true),
     GIFT(7, "赠与", "赠与,获得 {}", true),
+    NOT_RECOMMENDED(8,"无推荐人,推荐人佣金给到平台","推荐职位,获得 {}",true),
     SIGN(98, "签到", "签到获得 {} 积分", true),
     EVENT(99, "事件跟踪", "访问[{}],{}{} 积分", true),
     ;

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/enterprise/EnterpriseAccountController.java

@@ -47,7 +47,7 @@ public class EnterpriseAccountController {
     
     @GetMapping("/page")
     @Operation(summary = "获得企业账户分页")
-    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-account-record:query')")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-account:query')")
     public CommonResult<PageResult<EnterpriseAccountPageRespVO>> getEnterpriseAccountPage
             (@Valid EnterpriseAccountPageReqVO pageReqVO) {
         PageResult<EnterpriseAccountPageRespVO> pageResult = enterpriseAccountService.page2(pageReqVO);

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/appadmin/job/AppAdminJobAdvertisedController.java

@@ -50,7 +50,7 @@ public class AppAdminJobAdvertisedController {
     @PreAuthenticated
     @GetMapping("/list")
     @Operation(summary = "获取发布的职位列表")
-    public CommonResult<List<AppAdminJobSimpleRespVO>> getList(@RequestParam("hire") boolean hire) {
+    public CommonResult<List<AppAdminJobSimpleRespVO>> getList(@RequestParam(value = "hire",required = false) boolean hire) {
         return success(jobAdvertisedService.getList(hire));
     }
 

+ 3 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/appadmin/person/cv/AppAdminJobCvRelRespVO.java

@@ -24,6 +24,9 @@ public class AppAdminJobCvRelRespVO {
     @Schema(description = "投递用户id")
     private Long userId;
 
+    @Schema(description = "投递类型(0 平台投递 | 1 赏金投递)")
+    private String type;
+
     @Schema(description = "简历状态")
     private String status;
 

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/interview/InterviewInviteMapper.java

@@ -91,7 +91,7 @@ public interface InterviewInviteMapper extends BaseMapperX<InterviewInviteDO> {
                 .betweenIfPresent(InterviewInviteDO::getTime, reqVO.getTime())
                 .eqIfPresent(InterviewInviteDO::getPhone, reqVO.getPhone())
                 .eqIfPresent(InterviewInviteDO::getStatus, reqVO.getStatus())
-                .eqIfPresent(InterviewInviteDO::getStatus, reqVO.getConversationStatus());
+                .eqIfPresent(InterviewInviteDO::getConversationStatus, reqVO.getConversationStatus());
 
         query.orderByDesc(InterviewInviteDO::getUpdateTime);
 

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

@@ -46,33 +46,6 @@ public interface JobCvRelMapper extends BaseMapperX<JobCvRelDO> {
 
 
     default PageResult<AppAdminJobCvRelRespVO> selectPage(AppAdminJobCvRelPageReqVO reqVO) {
-//        // 职位投递userId inner 招聘职位userId and 职位投递userId inner 人才信息userId
-//        MPJLambdaWrapperX<JobCvRelDO> wrapper = new MPJLambdaWrapperX<>();
-//        wrapper.selectAsClass(JobCvRelDO.class, AppAdminJobCvRelRespVO.class);
-//        wrapper.selectAssociation(JobAdvertisedDO.class, AppAdminJobCvRelRespVO::getJob);
-//        wrapper.selectAssociation(PersonInfoDO.class, AppAdminJobCvRelRespVO::getPerson);
-//
-//        // 投递的职位 inner 招聘职位
-//        wrapper.innerJoin(JobAdvertisedDO.class, JobAdvertisedDO::getId, JobCvRelDO::getJobId);
-//        // 招聘职位的条件
-//        wrapper.eqIfExists(JobCvRelDO::getJobId, reqVO.getJobId());
-//        wrapper.eqIfPresent(JobCvRelDO::getStatus, reqVO.getStatus());
-//        wrapper.eqIfExists(JobCvRelDO::getType, reqVO.getType());
-//
-//        // 投递的职位 inner 人才信息
-//        wrapper.innerJoin(PersonInfoDO.class, PersonInfoDO::getUserId, JobCvRelDO::getUserId);
-//        // 人才相关的条件
-//        wrapper.eqIfExists(PersonInfoDO::getJobStatus, reqVO.getJobStatus());
-//        wrapper.eqIfExists(PersonInfoDO::getEduType, reqVO.getEduType());
-//        wrapper.eqIfExists(PersonInfoDO::getExpType, reqVO.getExpType());
-//        wrapper.likeIfExists(PersonInfoDO::getName, reqVO.getName());
-//        wrapper.likeIfExists(PersonInfoDO::getUserId, reqVO.getUserId());
-//
-//        setUnfitCandidate(wrapper);
-//
-//        wrapper.orderByDesc(JobCvRelDO::getUpdateTime);
-//        return selectJoinPage(reqVO, AppAdminJobCvRelRespVO.class, wrapper);
-        // 职位投递userId inner 招聘职位userId and 职位投递userId inner 人才信息userId
         MPJLambdaWrapperX<JobCvRelDO> wrapper = new MPJLambdaWrapperX<>();
         wrapper.selectAsClass(JobCvRelDO.class, AppAdminJobCvRelRespVO.class);
         wrapper.selectAssociation(JobAdvertisedDO.class, AppAdminJobCvRelRespVO::getJob);
@@ -190,8 +163,8 @@ public interface JobCvRelMapper extends BaseMapperX<JobCvRelDO> {
         return selectOne(new LambdaQueryWrapperX<JobCvRelDO>()
                 .eq(JobCvRelDO::getUserId, userId)
                 .eq(JobCvRelDO::getJobId, jobId)
-                // 于15天内投递的
-                .lt(JobCvRelDO::getCreateTime, LocalDateTime.now().minusDays(15))
+                // 于15天内投递的
+                .ge(JobCvRelDO::getCreateTime, LocalDateTime.now().minusDays(15))
         );
     }
 

+ 35 - 6
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/interview/InterviewInviteServiceImpl.java

@@ -224,7 +224,9 @@ public class InterviewInviteServiceImpl implements InterviewInviteService {
         mapper.updateById(interviewInvite);
     }
 
-    /** 状态检查 */
+    /**
+     * 状态检查
+     */
     public void checkStatusIsCompleted(InterviewInviteDO interviewInvite) {
         if (Integer.parseInt(interviewInvite.getStatus())
                 < Integer.parseInt(InterviewInviteStatusEnum.COMPLETED.getStatus())) {
@@ -241,7 +243,7 @@ public class InterviewInviteServiceImpl implements InterviewInviteService {
 
         checkStatusIsCompleted(interviewInvite);
         // 标记为入职
-        interviewInvite.setStatus(ConversationStatusEnum.ENTRY.getStatus());
+        interviewInvite.setConversationStatus(ConversationStatusEnum.ENTRY.getStatus());
         mapper.updateById(interviewInvite);
 
         //TODO 发送推送消息
@@ -255,13 +257,13 @@ public class InterviewInviteServiceImpl implements InterviewInviteService {
 
         checkStatusIsCompleted(interviewInvite);
 
-        if(!interviewInvite.getConversationStatus()
+        if (!interviewInvite.getConversationStatus()
                 .equals(ConversationStatusEnum.ENTRY.getStatus())) {
             // 不是已入职状态
             throw exception(INTERVIEW_INVITE_STATUS_NOT_ENTRY);
         }
         // 标记为结算
-        interviewInvite.setStatus(ConversationStatusEnum.SETTLEMENT.getStatus());
+        interviewInvite.setConversationStatus(ConversationStatusEnum.SETTLEMENT.getStatus());
         mapper.updateById(interviewInvite);
 
         // 获取 面试的求职者投递的简历信息
@@ -320,8 +322,22 @@ public class InterviewInviteServiceImpl implements InterviewInviteService {
             );
         }
 
+        // 如果推荐人ID为空,则将推荐人的佣金也给到猎头
+        if (null == cv.getRecommendUserId()) {
+            enterpriseAccountRecordService.createBalanceRecord(
+                    1L,
+                    1L,
+                    BalanceBizTypeEnum.NOT_RECOMMENDED.getName(),
+                    MathOperationEnum.ADD,
+                    recommendPrice,
+                    BalanceBizTypeEnum.NOT_RECOMMENDED,
+                    String.valueOf(job.getId())
+            );
+        }
+
         // 推荐人
-        if (headhuntPrice.compareTo(BigDecimal.ZERO) > 0) {
+        if (headhuntPrice.compareTo(BigDecimal.ZERO) > 0
+                && null != cv.getRecommendUserId()) {
             userAccountRecordService.createBalanceRecord(
                     cv.getRecommendUserId(),
                     BalanceBizTypeEnum.RECOMMENDED_POSITIONS.getName(),
@@ -385,8 +401,21 @@ public class InterviewInviteServiceImpl implements InterviewInviteService {
             );
         }
 
+        // 如果推荐人ID为空,则将推荐人的佣金也给到猎头
+        if (null == cv.getRecommendUserId()) {
+            enterpriseAccountRecordService.createPointRecord(
+                    1L,
+                    1L,
+                    PointBizTypeEnum.NOT_RECOMMENDED.getName(),
+                    MathOperationEnum.ADD,
+                    recommendPoint,
+                    PointBizTypeEnum.NOT_RECOMMENDED,
+                    String.valueOf(job.getId())
+            );
+        }
+
         // 推荐人
-        if (headhuntPoint > 0) {
+        if (headhuntPoint > 0 && null!= cv.getRecommendUserId()) {
             userAccountRecordService.createPointRecord(
                     cv.getRecommendUserId(),
                     "",