You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于CourtType自动生成带条件前缀的TCaseNo并修复序号递增问题

解决方案

1. 后端实现序号查询与递增逻辑

序号的维护必须放在后端,确保F、M类各自独立的年度序列仅在表单提交成功后才递增:

  • 新增接口用于查询下一个可用序号(仅查询不更新,避免前端切换选项时误递增)
  • 表单提交成功后,更新对应类型和年份的序号记录(可通过专门的序号表存储类型、年份、当前最大序号)

示例后端C#代码:

// 获取下一个可用的案件序号(仅查询,不修改数据库)
public JsonResult GetNextCaseNumber(string type)
{
    var currentYear = DateTime.Now.Year % 100; // 取年份后两位
    // 从数据库查询对应类型+年份的当前最大序号,无记录则默认0
    var lastSeq = _db.CaseNumberSequences
        .FirstOrDefault(s => s.Type == type && s.Year == currentYear)?
        .CurrentMaxNo ?? 0;
    var nextSeq = lastSeq + 1;
    return Json(new { 
        Prefix = $"T{type}-", 
        Seq = nextSeq.ToString("D3"), // 补零为3位
        Year = currentYear.ToString() 
    });
}

// 提交表单后更新序号
[HttpPost]
public IActionResult Create(InvestigationLog model)
{
    if (ModelState.IsValid)
    {
        // 保存案件记录
        _db.InvestigationLogs.Add(model);
        
        // 更新对应类型的序号
        var typeCode = model.CourtType.Contains("(F)") ? "F" : "M";
        var currentYear = DateTime.Now.Year % 100;
        var sequence = _db.CaseNumberSequences
            .FirstOrDefault(s => s.Type == typeCode && s.Year == currentYear);
        
        if (sequence != null)
        {
            sequence.CurrentMaxNo += 1;
        }
        else
        {
            _db.CaseNumberSequences.Add(new CaseNumberSequence
            {
                Type = typeCode,
                Year = currentYear,
                CurrentMaxNo = 1
            });
        }
        
        _db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(model);
}

2. 前端JavaScript修正

前端仅负责选择类型时调用后端接口获取编号,不做本地递增,同时缓存当前类型的编号信息避免重复请求:

// 缓存当前选中类型的编号信息
let currentCaseCache = null;

function assignCaseNo() {
    const courtType = document.getElementById("SelectCourtType").value;
    const caseNoInput = document.getElementById("TCaseNumber");
    
    // 非目标类型时清空输入框
    if (!courtType || (!courtType.includes("Transfer In (F)") && !courtType.includes("Transfer In (M)"))) {
        caseNoInput.value = "";
        currentCaseCache = null;
        return;
    }
    
    const typeCode = courtType.includes("(F)") ? "F" : "M";
    
    // 已缓存当前类型的编号,直接复用
    if (currentCaseCache && currentCaseCache.type === typeCode) {
        caseNoInput.value = `${currentCaseCache.prefix}${currentCaseCache.seq}-${currentCaseCache.year}`;
        return;
    }
    
    // 调用后端接口获取编号
    fetch(`/YourControllerName/GetNextCaseNumber?type=${typeCode}`)
        .then(res => res.json())
        .then(data => {
            const caseNumber = `${data.Prefix}${data.Seq}-${data.Year}`;
            caseNoInput.value = caseNumber;
            currentCaseCache = {
                type: typeCode,
                prefix: data.Prefix,
                seq: data.Seq,
                year: data.Year
            };
        })
        .catch(err => console.error("生成案件编号失败:", err));
}

// 表单提交前校验编号是否已生成
document.querySelector("form").addEventListener("submit", function(e) {
    if (!document.getElementById("TCaseNumber").value) {
        e.preventDefault();
        alert("请先选择案件类型生成编号");
    }
});

3. 视图(cshtml)调整

确保下拉框事件绑定正确,移除前端本地递增的冗余逻辑:

<td style="width: 25%">
    <div class="mb-3">
        <label asp-for="InvestigationLog.TCaseNo"></label>
        <input asp-for="InvestigationLog.TCaseNo" id="TCaseNumber" type="text" class="form-control" readonly="readonly" />
    </div>
</td>            
<td style="width: 25%">
    <div class="mb-3">
        <label asp-for="InvestigationLog.CourtType"></label>
        <select asp-for="InvestigationLog.CourtType" id="SelectCourtType" class="form-select" 
                asp-items="@(new SelectList(Model.DisplayCourtTypeData.OrderBy(x => x.CourtTypeDesc),"CourtTypeDesc", "CourtTypeDesc"))" 
                onchange="assignCaseNo()">
            <option value="" selected disabled>---Select Court Type---</option>
        </select>
    </div>
</td>

核心逻辑说明

  • 序号的生成与更新完全由后端控制,避免前端切换选项时的误递增问题
  • 前端通过缓存机制减少重复请求,提升体验
  • 仅在表单提交成功后才更新序号,确保序列的唯一性与准确性

内容的提问来源于stack exchange,提问作者MelB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:03:32