diff --git a/ry-xinli-admin/src/main/java/com/ddnai/web/controller/psychology/PsyAssessmentController.java b/ry-xinli-admin/src/main/java/com/ddnai/web/controller/psychology/PsyAssessmentController.java index 02d7d4cc..ddc7c68f 100644 --- a/ry-xinli-admin/src/main/java/com/ddnai/web/controller/psychology/PsyAssessmentController.java +++ b/ry-xinli-admin/src/main/java/com/ddnai/web/controller/psychology/PsyAssessmentController.java @@ -36,6 +36,7 @@ import com.ddnai.system.domain.psychology.vo.UserAssessmentSummaryVO; import com.ddnai.system.service.psychology.IPsyAssessmentService; import com.ddnai.system.service.psychology.IPsyAssessmentAnswerService; import com.ddnai.system.service.psychology.IPsyScaleItemService; +import com.ddnai.system.service.psychology.IPsyScalePermissionService; import java.util.ArrayList; /** @@ -59,6 +60,9 @@ public class PsyAssessmentController extends BaseController @Autowired private com.ddnai.system.service.psychology.IPsyAssessmentReportService reportService; + @Autowired + private IPsyScalePermissionService permissionService; + /** * 获取测评列表 */ @@ -209,11 +213,24 @@ public class PsyAssessmentController extends BaseController // 检查是否已存在该用户对该量表的测评记录 if (assessmentUserId != null && startVO.getScaleId() != null) { + Integer currentPublishNo = null; + try { + currentPublishNo = permissionService.selectCurrentPublishNoForUserScale(assessmentUserId, startVO.getScaleId()); + } catch (Exception ignored) {} + if (currentPublishNo == null) { + currentPublishNo = 1; + } + // 使用不过滤的查询方法,获取所有测评记录 List existingList = assessmentService.selectAssessmentByUserAndScale(assessmentUserId, startVO.getScaleId()); for (PsyAssessment existing : existingList) { + Integer existingPublishNo = existing.getPublishNo() != null ? existing.getPublishNo() : 1; + if (!existingPublishNo.equals(currentPublishNo)) { + continue; + } + // 检查是否已完成(状态为1),如果已完成则不允许再次测评 if ("1".equals(existing.getStatus())) { @@ -239,6 +256,13 @@ public class PsyAssessmentController extends BaseController // 初始状态为"已暂停",等用户真正进入答题页面后再改为"进行中" PsyAssessment assessment = new PsyAssessment(); assessment.setScaleId(startVO.getScaleId()); + Integer publishNo = null; + try { + if (assessmentUserId != null && startVO.getScaleId() != null) { + publishNo = permissionService.selectCurrentPublishNoForUserScale(assessmentUserId, startVO.getScaleId()); + } + } catch (Exception ignored) {} + assessment.setPublishNo(publishNo != null ? publishNo : 1); assessment.setAssesseeName(startVO.getAssesseeName()); assessment.setAssesseeGender(startVO.getAssesseeGender()); assessment.setAssesseeAge(startVO.getAssesseeAge()); diff --git a/ry-xinli-admin/src/main/java/com/ddnai/web/controller/psychology/PsyAssessmentReportController.java b/ry-xinli-admin/src/main/java/com/ddnai/web/controller/psychology/PsyAssessmentReportController.java index 903b0cb0..3df0d162 100644 --- a/ry-xinli-admin/src/main/java/com/ddnai/web/controller/psychology/PsyAssessmentReportController.java +++ b/ry-xinli-admin/src/main/java/com/ddnai/web/controller/psychology/PsyAssessmentReportController.java @@ -824,7 +824,20 @@ public class PsyAssessmentReportController extends BaseController ReportExportVO exportVO = new ReportExportVO(); exportVO.setReportId(r.getReportId()); exportVO.setAssessmentId(r.getAssessmentId()); - exportVO.setReportTitle(r.getReportTitle()); + String title = r.getReportTitle(); + Integer attemptNo = null; + try { + attemptNo = calcAttemptNoByAssessmentId(r.getAssessmentId()); + } catch (Exception ignored) {} + if (attemptNo != null && attemptNo > 0) + { + if (title == null) + { + title = ""; + } + title = title + "(次数" + attemptNo + ")"; + } + exportVO.setReportTitle(title); exportVO.setReportType(r.getReportType()); exportVO.setSummary(r.getSummary()); exportVO.setIsGenerated(r.getIsGenerated()); @@ -864,6 +877,53 @@ public class PsyAssessmentReportController extends BaseController exportReportListAsPdf(exportList, response, fileName); } + private Integer calcAttemptNoByAssessmentId(Long assessmentId) + { + if (assessmentId == null) + { + return null; + } + PsyAssessment assessment = assessmentService.selectAssessmentById(assessmentId); + if (assessment == null || assessment.getUserId() == null || assessment.getScaleId() == null) + { + return null; + } + List list = assessmentService.selectAssessmentByUserAndScale(assessment.getUserId(), assessment.getScaleId()); + if (list == null || list.isEmpty()) + { + return null; + } + java.util.List completed = new java.util.ArrayList<>(); + for (PsyAssessment a : list) + { + if (a != null && "1".equals(a.getStatus())) + { + completed.add(a); + } + } + if (completed.isEmpty()) + { + return null; + } + completed.sort((a, b) -> { + if (a.getSubmitTime() == null && b.getSubmitTime() == null) return 0; + if (a.getSubmitTime() == null) return 1; + if (b.getSubmitTime() == null) return -1; + return a.getSubmitTime().compareTo(b.getSubmitTime()); + }); + + int idx = 1; + for (PsyAssessment a : completed) + { + if (a.getAssessmentId() != null && a.getAssessmentId().equals(assessmentId)) + { + return idx; + } + idx++; + } + return completed.size(); + } + /** * 使用 PDFBox 将报告导出为简单的文本 PDF */ diff --git a/ry-xinli-admin/src/main/java/com/ddnai/web/controller/psychology/PsyQuestionnaireAnswerController.java b/ry-xinli-admin/src/main/java/com/ddnai/web/controller/psychology/PsyQuestionnaireAnswerController.java index 9e179ae2..91907f44 100644 --- a/ry-xinli-admin/src/main/java/com/ddnai/web/controller/psychology/PsyQuestionnaireAnswerController.java +++ b/ry-xinli-admin/src/main/java/com/ddnai/web/controller/psychology/PsyQuestionnaireAnswerController.java @@ -33,6 +33,7 @@ import com.ddnai.system.domain.psychology.PsyQuestionnaireAnswerDetail; import com.ddnai.system.service.psychology.IPsyQuestionnaireService; import com.ddnai.system.service.psychology.IPsyQuestionnaireItemService; import com.ddnai.system.service.psychology.IPsyQuestionnaireAnswerService; +import com.ddnai.system.service.psychology.IPsyScalePermissionService; import com.ddnai.system.service.ISysUserService; /** @@ -59,6 +60,9 @@ public class PsyQuestionnaireAnswerController extends BaseController @Autowired private ISysUserService userService; + @Autowired + private IPsyScalePermissionService permissionService; + /** * 获取问卷答题列表 */ @@ -97,9 +101,18 @@ public class PsyQuestionnaireAnswerController extends BaseController System.out.println("questionnaireId: " + questionnaireId + ", userId: " + userId); System.out.println("========================================"); + Integer currentPublishNo = null; + try { + currentPublishNo = permissionService.selectCurrentPublishNoForUserScale(userId, -questionnaireId); + } catch (Exception ignored) {} + if (currentPublishNo == null) { + currentPublishNo = 1; + } + // 检查用户是否已完成该问卷 PsyQuestionnaireAnswer query = new PsyQuestionnaireAnswer(); query.setQuestionnaireId(questionnaireId); + query.setPublishNo(currentPublishNo); query.setUserId(userId); List existingList = answerService.selectAnswerList(query); @@ -120,6 +133,7 @@ public class PsyQuestionnaireAnswerController extends BaseController // 没有已完成或进行中的记录,创建新的答题记录 PsyQuestionnaireAnswer answer = new PsyQuestionnaireAnswer(); answer.setQuestionnaireId(questionnaireId); + answer.setPublishNo(currentPublishNo); answer.setUserId(userId); answer.setRespondentName(respondentName); answer.setStatus("0"); // 进行中 diff --git a/ry-xinli-system/src/main/java/com/ddnai/system/domain/psychology/PsyAssessment.java b/ry-xinli-system/src/main/java/com/ddnai/system/domain/psychology/PsyAssessment.java index 0b7db055..82e07575 100644 --- a/ry-xinli-system/src/main/java/com/ddnai/system/domain/psychology/PsyAssessment.java +++ b/ry-xinli-system/src/main/java/com/ddnai/system/domain/psychology/PsyAssessment.java @@ -21,6 +21,8 @@ public class PsyAssessment extends BaseEntity /** 量表ID */ private Long scaleId; + private Integer publishNo; + /** 量表名称(关联查询字段,不存储在表中) */ private String scaleName; @@ -102,6 +104,16 @@ public class PsyAssessment extends BaseEntity this.scaleId = scaleId; } + public Integer getPublishNo() + { + return publishNo; + } + + public void setPublishNo(Integer publishNo) + { + this.publishNo = publishNo; + } + public String getScaleName() { return scaleName; @@ -297,6 +309,7 @@ public class PsyAssessment extends BaseEntity return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) .append("assessmentId", getAssessmentId()) .append("scaleId", getScaleId()) + .append("publishNo", getPublishNo()) .append("userId", getUserId()) .append("assesseeName", getAssesseeName()) .append("assesseeGender", getAssesseeGender()) diff --git a/ry-xinli-system/src/main/java/com/ddnai/system/domain/psychology/PsyQuestionnaireAnswer.java b/ry-xinli-system/src/main/java/com/ddnai/system/domain/psychology/PsyQuestionnaireAnswer.java index 4b28ad76..9ede481a 100644 --- a/ry-xinli-system/src/main/java/com/ddnai/system/domain/psychology/PsyQuestionnaireAnswer.java +++ b/ry-xinli-system/src/main/java/com/ddnai/system/domain/psychology/PsyQuestionnaireAnswer.java @@ -21,6 +21,8 @@ public class PsyQuestionnaireAnswer extends BaseEntity /** 问卷ID */ private Long questionnaireId; + private Integer publishNo; + /** 用户ID */ private Long userId; @@ -67,6 +69,16 @@ public class PsyQuestionnaireAnswer extends BaseEntity this.questionnaireId = questionnaireId; } + public Integer getPublishNo() + { + return publishNo; + } + + public void setPublishNo(Integer publishNo) + { + this.publishNo = publishNo; + } + public Long getUserId() { return userId; @@ -152,6 +164,7 @@ public class PsyQuestionnaireAnswer extends BaseEntity return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) .append("answerId", getAnswerId()) .append("questionnaireId", getQuestionnaireId()) + .append("publishNo", getPublishNo()) .append("userId", getUserId()) .append("respondentName", getRespondentName()) .append("startTime", getStartTime()) diff --git a/ry-xinli-system/src/main/java/com/ddnai/system/domain/psychology/PsyScalePermission.java b/ry-xinli-system/src/main/java/com/ddnai/system/domain/psychology/PsyScalePermission.java index afafd85d..dad2d4bc 100644 --- a/ry-xinli-system/src/main/java/com/ddnai/system/domain/psychology/PsyScalePermission.java +++ b/ry-xinli-system/src/main/java/com/ddnai/system/domain/psychology/PsyScalePermission.java @@ -40,6 +40,8 @@ public class PsyScalePermission extends BaseEntity @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private java.util.Date endTime; + private Integer publishNo; + /** 状态(0有效 1无效) */ private String status; @@ -138,6 +140,16 @@ public class PsyScalePermission extends BaseEntity this.endTime = endTime; } + public Integer getPublishNo() + { + return publishNo; + } + + public void setPublishNo(Integer publishNo) + { + this.publishNo = publishNo; + } + public String getStatus() { return status; @@ -209,6 +221,7 @@ public class PsyScalePermission extends BaseEntity .append("className", getClassName()) .append("startTime", getStartTime()) .append("endTime", getEndTime()) + .append("publishNo", getPublishNo()) .append("status", getStatus()) .append("createBy", getCreateBy()) .append("createTime", getCreateTime()) @@ -220,4 +233,3 @@ public class PsyScalePermission extends BaseEntity .toString(); } } - diff --git a/ry-xinli-system/src/main/java/com/ddnai/system/mapper/psychology/PsyScalePermissionMapper.java b/ry-xinli-system/src/main/java/com/ddnai/system/mapper/psychology/PsyScalePermissionMapper.java index 41058155..29f2277a 100644 --- a/ry-xinli-system/src/main/java/com/ddnai/system/mapper/psychology/PsyScalePermissionMapper.java +++ b/ry-xinli-system/src/main/java/com/ddnai/system/mapper/psychology/PsyScalePermissionMapper.java @@ -92,6 +92,12 @@ public interface PsyScalePermissionMapper */ public int deletePermissionByScaleId(Long scaleId); + public Integer selectMaxPublishNo(PsyScalePermission permission); + + public int invalidatePermissionByScope(PsyScalePermission permission); + + public Integer selectCurrentPublishNoForUserScale(@Param("userId") Long userId, @Param("scaleId") Long scaleId); + /** * 查询所有已配置权限的量表ID * diff --git a/ry-xinli-system/src/main/java/com/ddnai/system/service/impl/psychology/PsyScalePermissionServiceImpl.java b/ry-xinli-system/src/main/java/com/ddnai/system/service/impl/psychology/PsyScalePermissionServiceImpl.java index 6664dcd3..2b384976 100644 --- a/ry-xinli-system/src/main/java/com/ddnai/system/service/impl/psychology/PsyScalePermissionServiceImpl.java +++ b/ry-xinli-system/src/main/java/com/ddnai/system/service/impl/psychology/PsyScalePermissionServiceImpl.java @@ -88,6 +88,12 @@ public class PsyScalePermissionServiceImpl implements IPsyScalePermissionService return count > 0; } + @Override + public Integer selectCurrentPublishNoForUserScale(Long userId, Long scaleId) + { + return permissionMapper.selectCurrentPublishNoForUserScale(userId, scaleId); + } + /** * 新增量表权限 * @@ -103,38 +109,12 @@ public class PsyScalePermissionServiceImpl implements IPsyScalePermissionService { permission.setStatus("0"); } - - // 检查是否已存在相同的权限记录(避免重复) - PsyScalePermission query = new PsyScalePermission(); - query.setScaleId(permission.getScaleId()); - query.setUserId(permission.getUserId()); - query.setRoleId(permission.getRoleId()); - query.setDeptId(permission.getDeptId()); - query.setClassName(permission.getClassName()); - query.setStatus("0"); // 只检查有效状态的权限 - - List existing = permissionMapper.selectPermissionList(query); - if (existing != null && !existing.isEmpty()) - { - // 检查是否有完全相同的权限记录(除了时间范围) - boolean hasDuplicate = existing.stream().anyMatch(p -> { - boolean sameUser = (p.getUserId() == null && permission.getUserId() == null) - || (p.getUserId() != null && p.getUserId().equals(permission.getUserId())); - boolean sameRole = (p.getRoleId() == null && permission.getRoleId() == null) - || (p.getRoleId() != null && p.getRoleId().equals(permission.getRoleId())); - boolean sameDept = (p.getDeptId() == null && permission.getDeptId() == null) - || (p.getDeptId() != null && p.getDeptId().equals(permission.getDeptId())); - boolean sameClass = (p.getClassName() == null && permission.getClassName() == null) - || (p.getClassName() != null && p.getClassName().equals(permission.getClassName())); - return sameUser && sameRole && sameDept && sameClass; - }); - - if (hasDuplicate) - { - throw new RuntimeException("该权限已存在,请勿重复添加"); - } - } - + + Integer maxPublishNo = permissionMapper.selectMaxPublishNo(permission); + int nextPublishNo = (maxPublishNo == null ? 0 : maxPublishNo) + 1; + permission.setPublishNo(nextPublishNo); + + permissionMapper.invalidatePermissionByScope(permission); return permissionMapper.insertPermission(permission); } @@ -202,45 +182,63 @@ public class PsyScalePermissionServiceImpl implements IPsyScalePermissionService if (userId == null) { throw new IllegalArgumentException("用户ID不能为空"); } - - // 先删除该用户的所有现有权限 - try { - permissionMapper.deletePermissionByUserId(userId); - } catch (Exception e) { - log.error("删除用户现有权限失败,userId: {}", userId, e); - throw new RuntimeException("删除用户现有权限失败: " + (e.getMessage() != null ? e.getMessage() : e.getClass().getSimpleName()), e); + + String username = SecurityUtils.getUsername(); + if (username == null || username.isEmpty()) { + username = "system"; } - - // 批量插入新权限 + + java.util.Set newScaleSet = new java.util.HashSet<>(); + if (scaleIds != null) { + for (Long scaleId : scaleIds) { + if (scaleId != null) { + newScaleSet.add(scaleId); + } + } + } + + PsyScalePermission activeQuery = new PsyScalePermission(); + activeQuery.setUserId(userId); + activeQuery.setStatus("0"); + List activeList = permissionMapper.selectPermissionList(activeQuery); + if (activeList != null) { + for (PsyScalePermission p : activeList) { + if (p != null && p.getScaleId() != null && !newScaleSet.contains(p.getScaleId())) { + p.setStatus("1"); + p.setUpdateBy(username); + try { + permissionMapper.updatePermission(p); + } catch (Exception e) { + log.warn("作废权限失败,permissionId: {}", p.getPermissionId()); + } + } + } + } + int count = 0; if (scaleIds != null && scaleIds.length > 0) { - String username = SecurityUtils.getUsername(); - if (username == null || username.isEmpty()) { - username = "system"; // 如果获取不到用户名,使用默认值 - } - for (Long scaleId : scaleIds) { if (scaleId == null) { log.warn("跳过空的量表ID"); continue; } - + try { if (!validateScaleExistsSilent(scaleId)) { log.warn("量表/问卷不存在,跳过该权限分配,scaleId: {}", scaleId); continue; } - + PsyScalePermission permission = new PsyScalePermission(); permission.setUserId(userId); permission.setScaleId(scaleId); permission.setStatus("0"); permission.setCreateBy(username); - - int insertResult = permissionMapper.insertPermission(permission); + + int insertResult = insertPermission(permission); if (insertResult > 0) { count++; } else { @@ -248,7 +246,6 @@ public class PsyScalePermissionServiceImpl implements IPsyScalePermissionService } } catch (Exception e) { log.error("处理量表权限失败,userId: {}, scaleId: {}", userId, scaleId, e); - // 继续处理下一个,不中断整个流程 } } } diff --git a/ry-xinli-system/src/main/java/com/ddnai/system/service/psychology/IPsyScalePermissionService.java b/ry-xinli-system/src/main/java/com/ddnai/system/service/psychology/IPsyScalePermissionService.java index 380a1c1e..d568c3d5 100644 --- a/ry-xinli-system/src/main/java/com/ddnai/system/service/psychology/IPsyScalePermissionService.java +++ b/ry-xinli-system/src/main/java/com/ddnai/system/service/psychology/IPsyScalePermissionService.java @@ -43,6 +43,8 @@ public interface IPsyScalePermissionService */ public boolean checkUserScalePermission(Long userId, Long scaleId); + public Integer selectCurrentPublishNoForUserScale(Long userId, Long scaleId); + /** * 新增量表权限 * diff --git a/ry-xinli-system/src/main/resources/mapper/system/psychology/PsyAssessmentMapper.xml b/ry-xinli-system/src/main/resources/mapper/system/psychology/PsyAssessmentMapper.xml index f4511497..49ecb0ba 100644 --- a/ry-xinli-system/src/main/resources/mapper/system/psychology/PsyAssessmentMapper.xml +++ b/ry-xinli-system/src/main/resources/mapper/system/psychology/PsyAssessmentMapper.xml @@ -7,6 +7,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -34,7 +35,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select a.assessment_id, a.scale_id, s.scale_name, a.user_id, + select a.assessment_id, a.scale_id, a.publish_no, s.scale_name, a.user_id, COALESCE(u.nick_name, a.assessee_name) as assessee_name, a.assessee_gender, a.assessee_age, a.assessee_id_card, a.assessee_phone, a.assessee_email, a.start_time, a.pause_time, @@ -112,6 +113,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" insert into psy_assessment ( scale_id, + publish_no, user_id, assessee_name, assessee_gender, @@ -128,6 +130,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" create_time )values( #{scaleId}, + #{publishNo}, #{userId}, #{assesseeName}, #{assesseeGender}, @@ -380,10 +383,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" diff --git a/ry-xinli-system/src/main/resources/mapper/system/psychology/PsyQuestionnaireAnswerMapper.xml b/ry-xinli-system/src/main/resources/mapper/system/psychology/PsyQuestionnaireAnswerMapper.xml index b8c0ff0b..6897c3dd 100644 --- a/ry-xinli-system/src/main/resources/mapper/system/psychology/PsyQuestionnaireAnswerMapper.xml +++ b/ry-xinli-system/src/main/resources/mapper/system/psychology/PsyQuestionnaireAnswerMapper.xml @@ -7,6 +7,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -22,7 +23,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select answer_id, questionnaire_id, user_id, respondent_name, start_time, submit_time, + select answer_id, questionnaire_id, publish_no, user_id, respondent_name, start_time, submit_time, total_score, is_pass, `rank`, `status`, create_by, create_time, update_by, update_time from psy_questionnaire_answer @@ -36,6 +37,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and questionnaire_id = #{questionnaireId} + and publish_no = #{publishNo} and user_id = #{userId} and `status` = #{status} @@ -45,6 +47,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" insert into psy_questionnaire_answer ( questionnaire_id, + publish_no, user_id, respondent_name, start_time, @@ -53,6 +56,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" create_time )values( #{questionnaireId}, + #{publishNo}, #{userId}, #{respondentName}, #{startTime}, @@ -85,10 +89,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" diff --git a/ry-xinli-system/src/main/resources/mapper/system/psychology/PsyScalePermissionMapper.xml b/ry-xinli-system/src/main/resources/mapper/system/psychology/PsyScalePermissionMapper.xml index 631e4435..9de9c5b3 100644 --- a/ry-xinli-system/src/main/resources/mapper/system/psychology/PsyScalePermissionMapper.xml +++ b/ry-xinli-system/src/main/resources/mapper/system/psychology/PsyScalePermissionMapper.xml @@ -13,6 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -28,7 +29,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select p.permission_id, p.scale_id, p.dept_id, p.role_id, p.user_id, p.class_name, - p.start_time, p.end_time, p.status, p.create_by, p.create_time, p.update_by, p.update_time, p.remark, + p.start_time, p.end_time, p.publish_no, p.status, p.create_by, p.create_time, p.update_by, p.update_time, p.remark, case when p.scale_id < 0 then q.questionnaire_name else s.scale_name end as scale_name, case when p.scale_id < 0 then 'questionnaire' else 'scale' end as source_type, d.dept_name, r.role_name, u.user_name @@ -123,6 +124,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" class_name, start_time, end_time, + publish_no, status, remark, create_by, @@ -135,6 +137,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{className}, #{startTime}, #{endTime}, + #{publishNo}, #{status}, #{remark}, #{createBy}, @@ -152,6 +155,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" class_name = #{className}, start_time = #{startTime}, end_time = #{endTime}, + publish_no = #{publishNo}, status = #{status}, remark = #{remark}, update_by = #{updateBy}, @@ -159,6 +163,76 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where permission_id = #{permissionId} + + + + + update psy_scale_permission + set status = '1', + update_by = #{updateBy}, + update_time = sysdate() + + status = '0' + and scale_id = #{scaleId} + + and dept_id = #{deptId} + and dept_id is null + + + and role_id = #{roleId} + and role_id is null + + + and user_id = #{userId} + and user_id is null + + + and class_name = #{className} + and (class_name is null or class_name = '') + + + + + delete from psy_scale_permission where permission_id = #{permissionId} diff --git a/ry-xinli-system/src/main/resources/sql/20251222_add_publish_no.sql b/ry-xinli-system/src/main/resources/sql/20251222_add_publish_no.sql new file mode 100644 index 00000000..6998c7b9 --- /dev/null +++ b/ry-xinli-system/src/main/resources/sql/20251222_add_publish_no.sql @@ -0,0 +1,31 @@ +-- 2025-12-22 add publish_no for per-release attempts + +ALTER TABLE psy_scale_permission + ADD COLUMN publish_no INT NULL; + +UPDATE psy_scale_permission + SET publish_no = 1 + WHERE publish_no IS NULL; + +ALTER TABLE psy_assessment + ADD COLUMN publish_no INT NULL; + +UPDATE psy_assessment + SET publish_no = 1 + WHERE publish_no IS NULL; + +ALTER TABLE psy_questionnaire_answer + ADD COLUMN publish_no INT NULL; + +UPDATE psy_questionnaire_answer + SET publish_no = 1 + WHERE publish_no IS NULL; + +CREATE INDEX idx_psy_scale_permission_scope_publish + ON psy_scale_permission (scale_id, user_id, role_id, dept_id, status, publish_no); + +CREATE INDEX idx_psy_assessment_user_scale_publish + ON psy_assessment (user_id, scale_id, publish_no, status); + +CREATE INDEX idx_psy_questionnaire_answer_user_q_publish + ON psy_questionnaire_answer (user_id, questionnaire_id, publish_no, status);