zhangying 2 дней назад
Родитель
Сommit
552f64020c

+ 5 - 0
jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/common/exception/JeecgBootExceptionHandler.java

@@ -145,6 +145,11 @@ public class JeecgBootExceptionHandler {
 		if (ObjectUtil.isNotEmpty(errorInfoEnum)) {
 			return Result.error(errorInfoEnum.getError());
 		}
+		// 处理MyBatis包装的数据完整性异常(DMException等),返回友好提示
+		if (e.getMessage() != null && e.getMessage().contains("违反")) {
+			addSysLog(e);
+			return Result.error("数据查询失败");
+		}
 		addSysLog(e);
 		return Result.error("操作失败,"+e.getMessage());
 	}

+ 51 - 13
jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/src/main/java/org/jeecg/modules/zjrs/application/controller/JobApplicationController.java

@@ -70,21 +70,42 @@ public class JobApplicationController extends JeecgController<JobApplication, IJ
 
     /**
      * 个人端 - 投递简历
-     * 检查重复投递,设置初始状态和投递时间
+     * 检查重复投递,设置初始状态和投递时间。
+     * 已取消的投递支持重新投递(更新原记录为待查看状态)。
      */
     @AutoLog(value = "投递简历")
     @Operation(summary = "投递简历")
     @PostMapping(value = "/apply")
     public Result<?> apply(@RequestBody JobApplication application) {
-        // 检查是否已投递过该岗位(排除已取消的记录)
-        QueryWrapper<JobApplication> checkWrapper = new QueryWrapper<>();
-        checkWrapper.eq("personal_id", application.getPersonalId())
+        // 检查是否存在未取消的投递记录
+        QueryWrapper<JobApplication> activeQuery = new QueryWrapper<>();
+        activeQuery.eq("personal_id", application.getPersonalId())
                 .eq("post_id", application.getPostId())
                 .ne("status", "4");
-        Long count = jobApplicationService.count(checkWrapper);
-        if (count > 0) {
+        Long activeCount = jobApplicationService.count(activeQuery);
+        if (activeCount > 0) {
             return Result.error("您已投递过该岗位,请勿重复投递");
         }
+
+        // 检查是否存在已取消的投递记录(status=4),有则复用该记录
+        QueryWrapper<JobApplication> cancelledQuery = new QueryWrapper<>();
+        cancelledQuery.eq("personal_id", application.getPersonalId())
+                .eq("post_id", application.getPostId())
+                .eq("status", "4");
+        JobApplication cancelledRecord = jobApplicationService.getOne(cancelledQuery);
+        if (cancelledRecord != null) {
+            // 复用已取消的记录,更新状态和投递时间
+            cancelledRecord.setStatus("0"); // 待查看
+            cancelledRecord.setApplyTime(new Date());
+            // 更新前端可能传入的备注等字段
+            if (application.getRemark() != null) {
+                cancelledRecord.setRemark(application.getRemark());
+            }
+            jobApplicationService.updateById(cancelledRecord);
+            return Result.OK("投递成功");
+        }
+
+        // 全新投递
         application.setApplyTime(new Date());
         application.setStatus("0"); // 待查看
         jobApplicationService.save(application);
@@ -93,22 +114,18 @@ public class JobApplicationController extends JeecgController<JobApplication, IJ
 
     /**
      * 个人端 - 查询我的投递记录
+     * 支持按岗位名称模糊查询(关联 post_info 表获取当前岗位名称)
      */
     @Operation(summary = "我的投递记录")
     @GetMapping(value = "/myApplications")
     public Result<IPage<JobApplication>> myApplications(
             @RequestParam(name = "personalId", required = true) String personalId,
             @RequestParam(name = "status", required = false) String status,
+            @RequestParam(name = "postName", required = false) String postName,
             @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
             @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
         Page<JobApplication> page = new Page<>(pageNo, pageSize);
-        QueryWrapper<JobApplication> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("personal_id", personalId);
-        if (status != null && !status.isEmpty()) {
-            queryWrapper.eq("status", status);
-        }
-        queryWrapper.orderByDesc("apply_time");
-        IPage<JobApplication> pageList = jobApplicationService.page(page, queryWrapper);
+        IPage<JobApplication> pageList = jobApplicationService.queryMyApplications(page, personalId, status, postName);
         return Result.OK(pageList);
     }
 
@@ -271,6 +288,27 @@ public class JobApplicationController extends JeecgController<JobApplication, IJ
         return Result.OK("恢复成功");
     }
 
+    /**
+     * 个人端 - 查询我的投递数量
+     *
+     * @param personalId 人员ID
+     * @param status     可选,按状态过滤
+     * @return 投递数量
+     */
+    @Operation(summary = "我的投递数量")
+    @GetMapping(value = "/countApplications")
+    public Result<Long> countApplications(
+            @RequestParam(name = "personalId", required = true) String personalId,
+            @RequestParam(name = "status", required = false) String status) {
+        QueryWrapper<JobApplication> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("personal_id", personalId);
+        if (status != null && !status.isEmpty()) {
+            queryWrapper.eq("status", status);
+        }
+        long count = jobApplicationService.count(queryWrapper);
+        return Result.OK(count);
+    }
+
     /**
      * 查询投递详情
      */

+ 11 - 0
jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/src/main/java/org/jeecg/modules/zjrs/application/mapper/JobApplicationMapper.java

@@ -1,6 +1,9 @@
 package org.jeecg.modules.zjrs.application.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.zjrs.application.entity.JobApplication;
 
 /**
@@ -10,4 +13,12 @@ import org.jeecg.modules.zjrs.application.entity.JobApplication;
  * @Version: V2.0
  */
 public interface JobApplicationMapper extends BaseMapper<JobApplication> {
+
+    /**
+     * 分页查询个人投递记录,关联 post_info 获取当前岗位名称,支持按岗位名称模糊查询
+     */
+    IPage<JobApplication> queryMyApplications(Page<JobApplication> page,
+                                              @Param("personalId") String personalId,
+                                              @Param("status") String status,
+                                              @Param("postName") String postName);
 }

+ 7 - 0
jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/src/main/java/org/jeecg/modules/zjrs/application/service/IJobApplicationService.java

@@ -1,5 +1,7 @@
 package org.jeecg.modules.zjrs.application.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.modules.zjrs.application.entity.JobApplication;
 
@@ -10,4 +12,9 @@ import org.jeecg.modules.zjrs.application.entity.JobApplication;
  * @Version: V2.0
  */
 public interface IJobApplicationService extends IService<JobApplication> {
+
+    /**
+     * 分页查询个人投递记录,关联 post_info 获取当前岗位名称,支持按岗位名称模糊查询
+     */
+    IPage<JobApplication> queryMyApplications(Page<JobApplication> page, String personalId, String status, String postName);
 }

+ 7 - 0
jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/src/main/java/org/jeecg/modules/zjrs/application/service/impl/JobApplicationServiceImpl.java

@@ -1,5 +1,7 @@
 package org.jeecg.modules.zjrs.application.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.jeecg.modules.zjrs.application.entity.JobApplication;
 import org.jeecg.modules.zjrs.application.mapper.JobApplicationMapper;
@@ -14,4 +16,9 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class JobApplicationServiceImpl extends ServiceImpl<JobApplicationMapper, JobApplication> implements IJobApplicationService {
+
+    @Override
+    public IPage<JobApplication> queryMyApplications(Page<JobApplication> page, String personalId, String status, String postName) {
+        return baseMapper.queryMyApplications(page, personalId, status, postName);
+    }
 }

+ 3 - 0
jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/src/main/java/org/jeecg/modules/zjrs/careerguidancedocument/controller/CareerGuidanceDocumentController.java

@@ -35,6 +35,7 @@ import com.alibaba.fastjson.JSON;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Operation;
 import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.config.shiro.IgnoreAuth;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 
 import java.net.URLEncoder;
@@ -212,6 +213,7 @@ public class CareerGuidanceDocumentController extends JeecgController<CareerGuid
 
 	    //update-begin---author:kk ---date:2026-06-11  for:【职业指导公开文件】文件在线查看-----------
 	    @Operation(summary = "职业指导文档-在线查看", description = "职业指导文档-在线查看")
+	    @IgnoreAuth
 	    @GetMapping(value = "/view")
 	    public void view(@RequestParam(name = "id", required = true) String id, HttpServletResponse response) {
 	        serveFile(id, response, true);
@@ -222,6 +224,7 @@ public class CareerGuidanceDocumentController extends JeecgController<CareerGuid
 	     * 下载文件
 	     */
 	    @Operation(summary = "职业指导文档-下载", description = "职业指导文档-下载")
+	    @IgnoreAuth
 	    @GetMapping(value = "/download")
 	    public void download(@RequestParam(name = "id", required = true) String id, HttpServletResponse response) {
 	        serveFile(id, response, false);

+ 29 - 0
jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/src/main/java/org/jeecg/modules/zjrs/careerguidanceservice/controller/CareerGuidanceServiceController.java

@@ -103,6 +103,35 @@ public class CareerGuidanceServiceController {
         return Result.OK(pageList);
     }
 
+    /**
+     * 个人查询自己的申请记录(分页)
+     * 适用于小程序/粤信签个人用户查询自己提交的职业指导服务申请
+     */
+    @AutoLog(value = "职业指导服务-个人查询自己的申请记录")
+    @Operation(summary = "职业指导服务-个人查询自己的申请记录", description = "职业指导服务-个人查询自己的申请记录")
+    @GetMapping(value = "/myList")
+    public Result<?> queryMyList(
+            @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+            @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
+        // 获取当前登录用户信息,从用户名中提取 personalId
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String username = loginUser.getUsername();
+        String personalId = null;
+        // 小程序/粤信签个人登录的用户名格式为 personal_{personalInfoId}
+        if (username != null && username.startsWith("personal_")) {
+            personalId = username.substring("personal_".length());
+        }
+        if (personalId == null || personalId.isEmpty()) {
+            return Result.error("无法获取个人信息ID");
+        }
+        // 构建查询参数,按 personalId 精确过滤
+        java.util.Map<String, String> params = new java.util.HashMap<>();
+        params.put("personalId", personalId);
+        Page<CareerGuidanceServiceListVo> page = new Page<>(pageNo, pageSize);
+        IPage<CareerGuidanceServiceListVo> pageList = careerGuidanceServiceService.queryPageList(page, params);
+        return Result.OK(pageList);
+    }
+
     /**
      * 添加
      *

+ 3 - 0
jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/src/main/java/org/jeecg/modules/zjrs/careerguidanceservice/mapper/xml/CareerGuidanceServiceMapper.xml

@@ -5,6 +5,9 @@
     <select id="queryPageList" resultType="org.jeecg.modules.zjrs.careerguidanceservice.entity.CareerGuidanceServiceListVo">
         SELECT * FROM V_CAREER_GUIDANCE_SERVICE
         <where>
+            <if test="params.personalId != null and params.personalId != ''">
+                AND personal_id = #{params.personalId}
+            </if>
             <if test="params.name != null and params.name != ''">
                 AND name LIKE CONCAT('%', #{params.name}, '%')
             </if>

+ 2 - 0
jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/src/main/java/org/jeecg/modules/zjrs/careerguidanceservice/vo/CareerGuidanceServicePage.java

@@ -3,6 +3,7 @@ package org.jeecg.modules.zjrs.careerguidanceservice.vo;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.List;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import org.jeecg.modules.zjrs.careerguidanceservice.entity.CareerGuidanceRecord;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -70,6 +71,7 @@ public class CareerGuidanceServicePage implements Serializable {
     /**申请日期*/
     @Excel(name = "申请日期", width = 15, format = "yyyy-MM-dd")
     @Schema(description = "申请日期")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date applicationDate;
     
     /**是否跟进*/