diff --git a/backend/add_create_dept.sql b/backend/add_create_dept.sql
new file mode 100644
index 00000000..71ddce64
--- /dev/null
+++ b/backend/add_create_dept.sql
@@ -0,0 +1 @@
+ALTER TABLE jcbt_scholarship_type ADD COLUMN create_dept BIGINT(20) COMMENT '创建部门' AFTER is_system;
diff --git a/backend/debug_compatibility_type.sql b/backend/debug_compatibility_type.sql
new file mode 100644
index 00000000..86b790d5
--- /dev/null
+++ b/backend/debug_compatibility_type.sql
@@ -0,0 +1,30 @@
+-- 调试compatibility_type字段问题
+-- 检查表结构
+DESCRIBE jcbt_scholarship_type;
+
+-- 检查字段是否存在
+SHOW COLUMNS FROM jcbt_scholarship_type LIKE 'compatibility_type';
+
+-- 查看具体数据
+SELECT id, type_name, compatibility_type,
+ CASE
+ WHEN compatibility_type IS NULL THEN 'NULL值'
+ WHEN compatibility_type = '' THEN '空字符串'
+ ELSE CONCAT('有值:', compatibility_type)
+ END as value_status
+FROM jcbt_scholarship_type
+WHERE deleted = 0
+LIMIT 10;
+
+-- 统计各种值的分布
+SELECT
+ compatibility_type,
+ COUNT(*) as count,
+ CASE
+ WHEN compatibility_type IS NULL THEN 'NULL值'
+ WHEN compatibility_type = '' THEN '空字符串'
+ ELSE '有效值'
+ END as value_type
+FROM jcbt_scholarship_type
+WHERE deleted = 0
+GROUP BY compatibility_type;
diff --git a/backend/fix_compatibility_create_dept.sql b/backend/fix_compatibility_create_dept.sql
new file mode 100644
index 00000000..b025492b
--- /dev/null
+++ b/backend/fix_compatibility_create_dept.sql
@@ -0,0 +1,36 @@
+-- =====================================================
+-- 奖学金兼得关系表 - create_dept字段修复脚本
+-- 版本: v1.0
+-- 创建时间: 2025-01-27
+-- 问题描述: 实体类继承BaseEntity包含create_dept字段,但数据库表缺少该字段
+-- 解决方案: 为jcbt_scholarship_compatibility表添加create_dept字段
+-- =====================================================
+
+USE `ruoyi-vue-pro`;
+
+-- 为奖学金兼得关系表添加create_dept字段
+ALTER TABLE `jcbt_scholarship_compatibility`
+ADD COLUMN IF NOT EXISTS `create_dept` BIGINT(20) COMMENT '创建部门'
+AFTER `description`;
+
+-- 验证字段添加结果
+SELECT
+ COLUMN_NAME,
+ DATA_TYPE,
+ IS_NULLABLE,
+ COLUMN_DEFAULT,
+ COLUMN_COMMENT
+FROM INFORMATION_SCHEMA.COLUMNS
+WHERE TABLE_SCHEMA = 'ruoyi-vue-pro'
+ AND TABLE_NAME = 'jcbt_scholarship_compatibility'
+ AND COLUMN_NAME = 'create_dept';
+
+-- 显示表结构确认修复结果
+DESCRIBE `jcbt_scholarship_compatibility`;
+
+-- =====================================================
+-- 修复说明:
+-- 1. 该字段是BaseEntity的标准字段,用于记录创建部门
+-- 2. 字段类型为BIGINT(20),允许NULL,与其他表保持一致
+-- 3. 字段位置放在description字段之后,符合标准字段顺序
+-- =====================================================
diff --git a/backend/quota_diagnosis_results.txt b/backend/quota_diagnosis_results.txt
new file mode 100644
index 00000000..608d9f21
--- /dev/null
+++ b/backend/quota_diagnosis_results.txt
@@ -0,0 +1,37 @@
+mysql: [Warning] Using a password on the command line interface can be insecure.
+info
+=== 1. 班主任和班级信息检查 ===
+info
+=== 2. 奖学金批次信息检查 ===
+batch_id batch_name batch_status start_time end_time create_time
+1952730449122004993 2025-2026??????????????? ACTIVE 2025-08-05 00:00:00 2025-08-29 00:00:00 2025-08-05 21:56:34
+1 2024-2025??????????? ACTIVE 2024-09-01 00:00:00 2024-12-31 23:59:59 2025-08-05 09:04:39
+info
+=== 3. 奖学金类型信息检查 ===
+type_id type_name level_type type_status batch_id batch_name
+1 ??????? FIRST 1 1953330495479644161 2025-2026?????????????
+1 ??????? FIRST 1 1952730449122004993 2025-2026???????????????
+5 ????????? FIRST 1 1952730449122004993 2025-2026???????????????
+1953004971846852609 ??????? FIRST 1 1952730449122004993 2025-2026???????????????
+6 ????????? FIRST 1 NULL NULL
+2 ??????? SECOND 1 1953330495479644161 2025-2026?????????????
+2 ??????? SECOND 1 1952730449122004993 2025-2026???????????????
+1953005237862195202 ??????? SECOND 1 1952730449122004993 2025-2026???????????????
+7 ????????? SECOND 1 NULL NULL
+1953004602014097409 ??????? SPECIAL 1 1952730449122004993 2025-2026???????????????
+4 ????????? SPECIAL 1 1952730449122004993 2025-2026???????????????
+8 ??????? SPECIAL 1 NULL NULL
+1952634577994387457 ????? SPECIAL 1 1952730449122004993 2025-2026???????????????
+1953004324552499202 ?????? SPECIAL 1 1952730449122004993 2025-2026???????????????
+3 ??????? THIRD 1 1952730449122004993 2025-2026???????????????
+1953005415696490497 ??????? THIRD 1 1952730449122004993 2025-2026???????????????
+info
+=== 4. 班级名额分配情况检查 ===
+quota_id batch_id batch_name scholarship_type_id type_name class_id class_name total_quota used_quota available_quota allocation_method status create_time
+2001 1 2024-2025??????????? 1 ??????? 1001 NULL 2 0 2 MANUAL ACTIVE 2025-08-06 11:00:49
+2003 1 2024-2025??????????? 2 ??????? 1001 NULL 3 0 2 MANUAL ACTIVE 2025-08-06 11:00:49
+2002 1 2024-2025??????????? 1 ??????? 1002 NULL 1 0 1 MANUAL ACTIVE 2025-08-06 11:00:49
+2004 1 2024-2025??????????? 2 ??????? 1002 NULL 2 0 2 MANUAL ACTIVE 2025-08-06 11:00:49
+info
+=== 5. 已使用名额情况检查 ===
+ERROR 1054 (42S22) at line 87: Unknown column 'sa.applicant_class_id' in 'field list'
diff --git a/backend/ruoyi-modules/ruoyi-jcbt/pom.xml b/backend/ruoyi-modules/ruoyi-jcbt/pom.xml
new file mode 100644
index 00000000..d294f710
--- /dev/null
+++ b/backend/ruoyi-modules/ruoyi-jcbt/pom.xml
@@ -0,0 +1,115 @@
+
+
+
+ ruoyi-modules
+ org.dromara
+ ${revision}
+
+ 4.0.0
+
+ ruoyi-jcbt
+
+ 奖惩补贴管理模块
+
+
+
+
+
+
+ org.dromara
+ ruoyi-common-core
+
+
+
+ org.dromara
+ ruoyi-common-doc
+
+
+
+ org.dromara
+ ruoyi-common-mybatis
+
+
+
+ org.dromara
+ ruoyi-common-log
+
+
+
+ org.dromara
+ ruoyi-common-security
+
+
+
+ org.dromara
+ ruoyi-common-web
+
+
+
+ org.dromara
+ ruoyi-common-excel
+
+
+
+ org.dromara
+ ruoyi-common-idempotent
+
+
+
+ org.dromara
+ ruoyi-common-tenant
+
+
+
+ org.dromara
+ ruoyi-common-social
+
+
+
+ org.dromara
+ ruoyi-common-ratelimiter
+
+
+
+ org.dromara
+ ruoyi-common-mail
+
+
+
+ org.dromara
+ ruoyi-system
+
+
+
+ org.dromara
+ ruoyi-job
+
+
+
+
+ org.dromara
+ ruoyi-generator
+
+
+
+
+ org.dromara
+ ruoyi-demo
+
+
+
+
+ org.dromara
+ ruoyi-workflow
+
+
+
+
+ org.dromara
+ ruoyi-xg
+
+
+
+
+
diff --git a/backend/ruoyi-modules/ruoyi-jcbt/src/main/java/org/dromara/jcbt/RuoyiJcbtApplication.java b/backend/ruoyi-modules/ruoyi-jcbt/src/main/java/org/dromara/jcbt/RuoyiJcbtApplication.java
new file mode 100644
index 00000000..ebd48cbe
--- /dev/null
+++ b/backend/ruoyi-modules/ruoyi-jcbt/src/main/java/org/dromara/jcbt/RuoyiJcbtApplication.java
@@ -0,0 +1,19 @@
+package org.dromara.jcbt;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * 奖惩补贴管理模块启动程序
+ *
+ * @author ruoyi
+ */
+@SpringBootApplication
+public class RuoyiJcbtApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(RuoyiJcbtApplication.class, args);
+ System.out.println("(♥◠‿◠)ノ゙ 奖惩补贴管理模块启动成功 ლ(´ڡ`ლ)゙");
+ }
+
+}
diff --git a/backend/ruoyi-modules/ruoyi-jcbt/src/main/java/org/dromara/jcbt/controller/.gitkeep b/backend/ruoyi-modules/ruoyi-jcbt/src/main/java/org/dromara/jcbt/controller/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/backend/ruoyi-modules/ruoyi-jcbt/src/main/java/org/dromara/jcbt/controller/JcbtScholarshipApplicationController.java b/backend/ruoyi-modules/ruoyi-jcbt/src/main/java/org/dromara/jcbt/controller/JcbtScholarshipApplicationController.java
new file mode 100644
index 00000000..a7e0e6b9
--- /dev/null
+++ b/backend/ruoyi-modules/ruoyi-jcbt/src/main/java/org/dromara/jcbt/controller/JcbtScholarshipApplicationController.java
@@ -0,0 +1,339 @@
+package org.dromara.jcbt.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.jcbt.domain.bo.JcbtScholarshipApplicationBo;
+import org.dromara.jcbt.domain.vo.JcbtScholarshipApplicationVo;
+import org.dromara.jcbt.service.IJcbtScholarshipApplicationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * 奖学金申请记录管理
+ *
+ * @author ruoyi
+ * @date 2025-01-01
+ */
+@Validated
+@Tag(name = "奖学金申请记录管理", description = "奖学金申请记录管理Controller")
+@RestController
+@RequestMapping("/jcbt/scholarshipApplication")
+public class JcbtScholarshipApplicationController extends BaseController {
+
+ @Autowired
+ private IJcbtScholarshipApplicationService applicationService;
+
+ // ========== 基础管理接口(6个) ==========
+
+ /**
+ * 查询奖学金申请记录列表
+ */
+ @SaCheckPermission("jcbt:scholarshipApplication:list")
+ @GetMapping("/list")
+ @Operation(summary = "查询奖学金申请记录列表")
+ public TableDataInfo list(JcbtScholarshipApplicationBo bo, PageQuery pageQuery) {
+ return applicationService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 获取奖学金申请记录详细信息
+ */
+ @SaCheckPermission("jcbt:scholarshipApplication:query")
+ @GetMapping("/{id}")
+ @Operation(summary = "获取奖学金申请记录详细信息")
+ public R getInfo(@Parameter(description = "主键") @PathVariable Long id) {
+ return R.ok(applicationService.queryById(id));
+ }
+
+ /**
+ * 新增奖学金申请记录
+ */
+ @SaCheckPermission("jcbt:scholarshipApplication:add")
+ @Log(title = "奖学金申请记录", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping
+ @Operation(summary = "新增奖学金申请记录")
+ public R add(@Parameter(description = "奖学金申请记录") @Validated(AddGroup.class) @RequestBody JcbtScholarshipApplicationBo bo) {
+ return toAjax(applicationService.insertByBo(bo));
+ }
+
+ /**
+ * 修改奖学金申请记录
+ */
+ @SaCheckPermission("jcbt:scholarshipApplication:edit")
+ @Log(title = "奖学金申请记录", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping
+ @Operation(summary = "修改奖学金申请记录")
+ public R edit(@Parameter(description = "奖学金申请记录") @Validated(EditGroup.class) @RequestBody JcbtScholarshipApplicationBo bo) {
+ return toAjax(applicationService.updateByBo(bo));
+ }
+
+ /**
+ * 删除奖学金申请记录
+ */
+ @SaCheckPermission("jcbt:scholarshipApplication:remove")
+ @Log(title = "奖学金申请记录", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ @Operation(summary = "删除奖学金申请记录")
+ public R remove(@Parameter(description = "主键串") @PathVariable Long[] ids) {
+ return toAjax(applicationService.deleteWithValidByIds(List.of(ids), true));
+ }
+
+ /**
+ * 获取可申请的奖学金类型列表
+ */
+ @SaCheckPermission("jcbt:scholarshipApplication:available")
+ @GetMapping("/available")
+ @Operation(summary = "获取可申请的奖学金类型列表")
+ public R>> getAvailableScholarshipTypes(@Parameter(description = "班级ID") @RequestParam Long classId,
+ @Parameter(description = "批次ID") @RequestParam Long batchId) {
+ return R.ok(applicationService.queryAvailableScholarshipTypes(classId, batchId));
+ }
+
+ // ========== 业务功能接口(4个) ==========
+
+ /**
+ * 查询我的申请记录(班主任)
+ */
+ @SaCheckPermission("jcbt:scholarshipApplication:my")
+ @GetMapping("/my")
+ @Operation(summary = "查询我的申请记录")
+ public R> getMyApplications(@Parameter(description = "申请人ID") @RequestParam Long applicantId,
+ @Parameter(description = "批次ID") @RequestParam(required = false) Long batchId) {
+ return R.ok(applicationService.queryApplicationsByApplicant(applicantId, batchId));
+ }
+
+ /**
+ * 查询待审核申请
+ */
+ @SaCheckPermission("jcbt:scholarshipApplication:pending")
+ @GetMapping("/pending")
+ @Operation(summary = "查询待审核申请")
+ public R> getPendingApplications(@Parameter(description = "审核人ID") @RequestParam(required = false) Long reviewerId,
+ @Parameter(description = "申请状态") @RequestParam(required = false) String status) {
+ return R.ok(applicationService.queryPendingApplications(reviewerId, status));
+ }
+
+ /**
+ * 检查学生申请资格
+ */
+ @SaCheckPermission("jcbt:scholarshipApplication:check")
+ @GetMapping("/check")
+ @Operation(summary = "检查学生申请资格")
+ public R