教室编号生成调整

This commit is contained in:
2026-09-16 12:02:33 +08:00
parent 49b3232e79
commit 58499afe8e
4 changed files with 68 additions and 1 deletions
@@ -20,4 +20,11 @@ public interface ClassRoomMapper extends BaseMapper<JSB> {
* @return 分页结果 * @return 分页结果
*/ */
Page<JSB> selectPageList(Page<JSB> page, @Param("jsb") JSB jsb); Page<JSB> selectPageList(Page<JSB> page, @Param("jsb") JSB jsb);
/**
* 获取最大教室编号(仅统计纯数字编号)
*
* @return 最大教室编号
*/
String selectMaxJsbh();
} }
@@ -54,4 +54,8 @@
ORDER BY 序号 ORDER BY 序号
</select> </select>
<select id="selectMaxJsbh" resultType="java.lang.String">
SELECT MAX(CAST(教室编号 AS INT)) FROM 教室表 WHERE DEL_FLAG = 0 AND REGEXP_LIKE(教室编号, '^[0-9]+$')
</select>
</mapper> </mapper>
@@ -2,6 +2,7 @@ package com.roomroot.jwgl.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.roomroot.common.utils.StringUtils;
import com.roomroot.jwgl.entity.JSB; import com.roomroot.jwgl.entity.JSB;
import com.roomroot.jwgl.mapper.ClassRoomMapper; import com.roomroot.jwgl.mapper.ClassRoomMapper;
import com.roomroot.jwgl.service.ClassRoomService; import com.roomroot.jwgl.service.ClassRoomService;
@@ -26,9 +27,30 @@ public class ClassRoomServiceImpl implements ClassRoomService {
public void add(JSB jsb) { public void add(JSB jsb) {
jsb.setId(UuidUtil.getUUID()); jsb.setId(UuidUtil.getUUID());
jsb.setDelFlag(0); jsb.setDelFlag(0);
// 教室编号为非空列:留空时按现有最大数字编号 +1 自动生成
if (StringUtils.isEmpty(jsb.getJsbh())) {
jsb.setJsbh(nextJsbh());
} else {
jsb.setJsbh(jsb.getJsbh().trim());
}
jsbMapper.insert(jsb); jsbMapper.insert(jsb);
} }
/**
* 获取下一个教室编号(纯数字编号中取最大值 +1)
*/
private String nextJsbh() {
String maxJsbh = jsbMapper.selectMaxJsbh();
if (StringUtils.isEmpty(maxJsbh)) {
return "1";
}
try {
return String.valueOf(Integer.parseInt(maxJsbh.trim()) + 1);
} catch (NumberFormatException e) {
return "1";
}
}
@Override @Override
public void delete(String id) { public void delete(String id) {
JSB jsb = getById(id); JSB jsb = getById(id);
@@ -100,6 +100,11 @@
:close-on-click-modal="false"> :close-on-click-modal="false">
<el-form ref="classroomForm" :model="dialog.form" :rules="rules" label-width="110px"> <el-form ref="classroomForm" :model="dialog.form" :rules="rules" label-width="110px">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12">
<el-form-item label="教室编号">
<el-input v-model="dialog.form.jsbh" placeholder="留空自动生成(按现有最大编号 +1)" maxlength="50" clearable />
</el-form-item>
</el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="教室名称" prop="jsmc"> <el-form-item label="教室名称" prop="jsmc">
<el-input v-model="dialog.form.jsmc" placeholder="请输入教室名称" /> <el-input v-model="dialog.form.jsmc" placeholder="请输入教室名称" />
@@ -107,7 +112,15 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="教学楼代号"> <el-form-item label="教学楼代号">
<el-input v-model="dialog.form.jxldh" placeholder="请输入教学楼代号" /> <el-select v-model="dialog.form.jxldh" :loading="buildOptionsLoading" placeholder="请选择教学楼"
clearable filterable class="w-full">
<el-option
v-for="item in buildOptions"
:key="item.id"
:label="formatBuildLabel(item)"
:value="item.jxldh"
/>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@@ -200,6 +213,7 @@ import {
listClassroom, listClassroom,
listAllClassroom listAllClassroom
} from '@/api/teachBusiness/classroom' } from '@/api/teachBusiness/classroom'
import { listAllBuild } from '@/api/teachBusiness/build'
export default { export default {
name: 'Venue', name: 'Venue',
@@ -215,6 +229,9 @@ export default {
}, },
tableData: [], tableData: [],
jxcdlxOptions: [], jxcdlxOptions: [],
// 教学楼下拉选项(来源:教学楼表,未删除数据)
buildOptions: [],
buildOptionsLoading: false,
total: 0, total: 0,
pageNum: 1, pageNum: 1,
pageSize: 20, pageSize: 20,
@@ -231,9 +248,26 @@ export default {
}, },
created() { created() {
this.loadVenueTypeOptions() this.loadVenueTypeOptions()
this.loadBuildOptions()
this.fetchList() this.fetchList()
}, },
methods: { methods: {
/** 加载全部未删除的教学楼,作为新增/编辑弹窗中教学楼代号下拉选项。 */
loadBuildOptions() {
this.buildOptionsLoading = true
listAllBuild().then(response => {
this.buildOptions = Array.isArray(response.data) ? response.data : []
}).catch(() => {
this.buildOptions = []
}).finally(() => {
this.buildOptionsLoading = false
})
},
formatBuildLabel(item) {
const base = [item.jxldh, item.jxlmc].filter(Boolean).join(' ')
return base || item.id
},
/** /**
* 独立加载全部场地类型,避免查询结果收窄后下拉候选项同步丢失。 * 独立加载全部场地类型,避免查询结果收窄后下拉候选项同步丢失。
*/ */