实现新增、删除数据关联

This commit is contained in:
Qi 2025-06-15 16:40:41 +08:00
parent be2ae25b5c
commit addbef8cb2
20 changed files with 505 additions and 104 deletions

View File

@ -14,6 +14,7 @@ import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.entity.CetGraduates;
import org.jeecg.modules.service.ICetGraduatesService;
import org.jeecg.modules.service.ICetInvigilateDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
@ -21,6 +22,7 @@ import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
/**
* @Description: 研究生数据表
@ -35,7 +37,8 @@ import java.util.Arrays;
public class CetGraduatesController extends JeecgController<CetGraduates, ICetGraduatesService> {
@Autowired
private ICetGraduatesService cetGraduatesService;
@Autowired
private ICetInvigilateDataService cetInvigilateDataService;
/**
* 分页列表查询
*
@ -69,8 +72,7 @@ public class CetGraduatesController extends JeecgController<CetGraduates, ICetGr
// @RequiresPermissions("cet:cet_graduates:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody CetGraduates cetGraduates) {
cetGraduatesService.add(cetGraduates);
return Result.OK("添加成功!");
return cetGraduatesService.add(cetGraduates);
}
/**
@ -99,8 +101,29 @@ public class CetGraduatesController extends JeecgController<CetGraduates, ICetGr
@RequiresPermissions("cet:cet_graduates:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
cetGraduatesService.removeById(id);
return Result.OK("删除成功!");
// 1. 查询研究生分表
CetGraduates graduate = cetGraduatesService.lambdaQuery()
.eq(CetGraduates::getId, id)
.one();
if (graduate == null) {
return Result.error("研究生数据不存在,无法删除!");
}
try {
// 2. 删除研究生分表记录
cetGraduatesService.lambdaUpdate()
.eq(CetGraduates::getId, id)
.remove();
// 3. 删除总表记录
cetInvigilateDataService.removeById(id);
return Result.OK("删除成功!");
} catch (Exception e) {
log.error("删除研究生及其总表数据异常ID[{}]: {}", id, e.getMessage(), e);
return Result.error("删除失败:" + e.getMessage());
}
}
/**
@ -114,8 +137,23 @@ public class CetGraduatesController extends JeecgController<CetGraduates, ICetGr
@RequiresPermissions("cet:cet_graduates:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.cetGraduatesService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
String[] idArray = ids.split(",");
List<String> idList = Arrays.asList(idArray);
try {
// 1. 删除研究生分表记录graduate_id in ...
cetGraduatesService.lambdaUpdate()
.in(CetGraduates::getId, idList)
.remove();
// 2. 删除总表记录主键id in ...
cetInvigilateDataService.removeByIds(idList);
return Result.OK("批量删除成功!");
} catch (Exception e) {
log.error("批量删除研究生及总表记录失败: {}", e.getMessage(), e);
return Result.error("批量删除失败:" + e.getMessage());
}
}
/**

View File

@ -1,6 +1,8 @@
package org.jeecg.modules.controller;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@ -9,11 +11,16 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.entity.CetGraduates;
import org.jeecg.modules.entity.CetTeachers;
import org.jeecg.modules.entity.CetNoTeachers;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.modules.entity.CetInvigilateData;
import org.jeecg.modules.service.ICetGraduatesService;
import org.jeecg.modules.service.ICetInvigilateDataService;
import org.jeecg.modules.service.ICetNoTeachersService;
import org.jeecg.modules.service.ICetTeachersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -38,6 +45,10 @@ public class CetInvigilateDataController extends JeecgController<CetInvigilateDa
private ICetInvigilateDataService cetInvigilateDataService;
@Autowired
private ICetTeachersService cetTeachersService;
@Autowired
private ICetGraduatesService cetGraduatesService;
@Autowired
private ICetNoTeachersService cetNoTeachersService;
/**
* 分页列表查询
@ -72,8 +83,8 @@ public class CetInvigilateDataController extends JeecgController<CetInvigilateDa
@RequiresPermissions("cet:cet_invigilate_data:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody CetInvigilateData cetInvigilateData) {
cetInvigilateDataService.add(cetInvigilateData);
return Result.OK("添加成功!");
return cetInvigilateDataService.add(cetInvigilateData);
}
/**
@ -102,10 +113,46 @@ public class CetInvigilateDataController extends JeecgController<CetInvigilateDa
@RequiresPermissions("cet:cet_invigilate_data:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
cetInvigilateDataService.removeById(id);
return Result.OK("删除成功!");
// 1. 查询总表记录获取类型
CetInvigilateData data = cetInvigilateDataService.getById(id);
if (data == null) {
return Result.error("数据不存在,无法删除!");
}
String type = data.getType();
try {
// 2. 根据类型删除对应的分表记录
switch (type) {
case "教师":
cetTeachersService.lambdaUpdate()
.eq(CetTeachers::getId, id)
.remove();
break;
case "研究生":
cetGraduatesService.lambdaUpdate()
.eq(CetGraduates::getId, id)
.remove();
break;
case "非教师":
cetNoTeachersService.lambdaUpdate()
.eq(CetNoTeachers::getId, id)
.remove();
break;
default:
return Result.error("未知类型,无法删除关联数据!");
}
// 3. 删除总表记录
cetInvigilateDataService.removeById(id);
return Result.OK("删除成功!");
} catch (Exception e) {
log.error("删除人员数据异常 ID[{}] 类型[{}]: {}", id, type, e.getMessage(), e);
return Result.error("删除失败: " + e.getMessage());
}
}
/**
* 批量删除
*
@ -117,8 +164,57 @@ public class CetInvigilateDataController extends JeecgController<CetInvigilateDa
@RequiresPermissions("cet:cet_invigilate_data:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.cetInvigilateDataService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
String[] idArray = ids.split(",");
List<String> successIds = new ArrayList<>();
List<String> failedIds = new ArrayList<>();
for (String id : idArray) {
// 1. 查询总表记录
CetInvigilateData data = cetInvigilateDataService.getById(id);
if (data == null) {
failedIds.add(id + "(数据不存在)");
continue;
}
String type = data.getType();
try {
// 2. 删除对应分表记录
switch (type) {
case "教师":
cetTeachersService.lambdaUpdate()
.eq(CetTeachers::getId, id)
.remove();
break;
case "研究生":
cetGraduatesService.lambdaUpdate()
.eq(CetGraduates::getId, id)
.remove();
break;
case "非教师":
cetNoTeachersService.lambdaUpdate()
.eq(CetNoTeachers::getId, id)
.remove();
break;
default:
failedIds.add(id + "(未知类型:" + type + ")");
continue;
}
// 3. 删除总表记录
cetInvigilateDataService.removeById(id);
successIds.add(id);
} catch (Exception e) {
log.error("删除异常ID[{}] 类型[{}]: {}", id, type, e.getMessage(), e);
failedIds.add(id + "(异常: " + e.getMessage() + ")");
}
}
if (failedIds.isEmpty()) {
return Result.OK("批量删除成功,共删除 " + successIds.size() + " 条数据!");
} else {
return Result.error("部分删除失败!成功 " + successIds.size() + " 条,失败 " + failedIds.size()
+ " 条:\n" + String.join(", ", failedIds));
}
}
/**

View File

@ -1,6 +1,7 @@
package org.jeecg.modules.controller;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@ -12,7 +13,9 @@ import org.jeecg.common.system.query.QueryGenerator;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.modules.entity.CetGraduates;
import org.jeecg.modules.entity.CetNoTeachers;
import org.jeecg.modules.service.ICetInvigilateDataService;
import org.jeecg.modules.service.ICetNoTeachersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -35,7 +38,8 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
public class CetNoTeachersController extends JeecgController<CetNoTeachers, ICetNoTeachersService> {
@Autowired
private ICetNoTeachersService cetNoTeachersService;
@Autowired
private ICetInvigilateDataService cetInvigilateDataService;
/**
* 分页列表查询
*
@ -69,8 +73,8 @@ public class CetNoTeachersController extends JeecgController<CetNoTeachers, ICet
// @RequiresPermissions("cet:cet_no_teachers:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody CetNoTeachers cetNoTeachers) {
cetNoTeachersService.add(cetNoTeachers);
return Result.OK("添加成功!");
return cetNoTeachersService.add(cetNoTeachers);
}
/**
@ -99,8 +103,29 @@ public class CetNoTeachersController extends JeecgController<CetNoTeachers, ICet
@RequiresPermissions("cet:cet_no_teachers:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
cetNoTeachersService.removeById(id);
return Result.OK("删除成功!");
// 1. 查询研究生分表
CetNoTeachers nonTeachers = cetNoTeachersService.lambdaQuery()
.eq(CetNoTeachers::getId, id)
.one();
if (nonTeachers == null) {
return Result.error("研究生数据不存在,无法删除!");
}
try {
// 2. 删除研究生分表记录
cetNoTeachersService.lambdaUpdate()
.eq(CetNoTeachers::getId, id)
.remove();
// 3. 删除总表记录
cetInvigilateDataService.removeById(id);
return Result.OK("删除成功!");
} catch (Exception e) {
log.error("删除研究生及其总表数据异常ID[{}]: {}", id, e.getMessage(), e);
return Result.error("删除失败:" + e.getMessage());
}
}
/**
@ -114,8 +139,23 @@ public class CetNoTeachersController extends JeecgController<CetNoTeachers, ICet
@RequiresPermissions("cet:cet_no_teachers:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.cetNoTeachersService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
String[] idArray = ids.split(",");
List<String> idList = Arrays.asList(idArray);
try {
// 1. 删除研究生分表记录graduate_id in ...
cetNoTeachersService.lambdaUpdate()
.in(CetNoTeachers::getId, idList)
.remove();
// 2. 删除总表记录主键id in ...
cetInvigilateDataService.removeByIds(idList);
return Result.OK("批量删除成功!");
} catch (Exception e) {
log.error("批量删除研究生及总表记录失败: {}", e.getMessage(), e);
return Result.error("批量删除失败:" + e.getMessage());
}
}
/**

View File

@ -1,6 +1,7 @@
package org.jeecg.modules.controller;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@ -13,7 +14,9 @@ import org.jeecg.common.system.query.QueryGenerator;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.modules.entity.CetGraduates;
import org.jeecg.modules.entity.CetTeachers;
import org.jeecg.modules.service.ICetInvigilateDataService;
import org.jeecg.modules.service.ICetTeachersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -36,6 +39,8 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
public class CetTeachersController extends JeecgController<CetTeachers, ICetTeachersService> {
@Autowired
private ICetTeachersService cetTeachersService;
@Autowired
private ICetInvigilateDataService cetInvigilateDataService;
/**
* 分页列表查询
@ -70,8 +75,8 @@ public class CetTeachersController extends JeecgController<CetTeachers, ICetTeac
@RequiresPermissions("data:cet_teachers:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody CetTeachers cetTeachers) {
cetTeachersService.add(cetTeachers);
return Result.OK("添加成功!");
return cetTeachersService.add(cetTeachers);
}
/**
@ -100,8 +105,30 @@ public class CetTeachersController extends JeecgController<CetTeachers, ICetTeac
@RequiresPermissions("data:cet_teachers:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
cetTeachersService.removeById(id);
return Result.OK("删除成功!");
// 1. 查询研究生分表
CetTeachers teachers = cetTeachersService.lambdaQuery()
.eq(CetTeachers::getId, id)
.one();
if (teachers == null) {
return Result.error("研究生数据不存在,无法删除!");
}
try {
// 2. 删除研究生分表记录
cetTeachersService.lambdaUpdate()
.eq(CetTeachers::getId, id)
.remove();
// 3. 删除总表记录
cetInvigilateDataService.removeById(id);
return Result.OK("删除成功!");
} catch (Exception e) {
log.error("删除研究生及其总表数据异常ID[{}]: {}", id, e.getMessage(), e);
return Result.error("删除失败:" + e.getMessage());
}
}
/**
@ -115,8 +142,23 @@ public class CetTeachersController extends JeecgController<CetTeachers, ICetTeac
@RequiresPermissions("data:cet_teachers:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.cetTeachersService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
String[] idArray = ids.split(",");
List<String> idList = Arrays.asList(idArray);
try {
// 1. 删除研究生分表记录graduate_id in ...
cetTeachersService.lambdaUpdate()
.in(CetTeachers::getId, idList)
.remove();
// 2. 删除总表记录主键id in ...
cetInvigilateDataService.removeByIds(idList);
return Result.OK("批量删除成功!");
} catch (Exception e) {
log.error("批量删除研究生及总表记录失败: {}", e.getMessage(), e);
return Result.error("批量删除失败:" + e.getMessage());
}
}
/**

View File

@ -33,7 +33,7 @@ public class CetGraduates implements Serializable {
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private String id;
private String Id ;
/**学号*/
@Excel(name = "学号", width = 15)
@ApiModelProperty(value = "学号")
@ -83,5 +83,5 @@ public class CetGraduates implements Serializable {
private String sysOrgCode;
/**类型*/
@TableField(exist = false)
private Integer type;
private String type;
}

View File

@ -32,15 +32,11 @@ public class CetInvigilateData implements Serializable {
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private String id;
/**学号*/
@Excel(name = "学号", width = 15)
@ApiModelProperty(value = "学号")
private String studentNumber;
/**工号*/
@Excel(name = "工号", width = 15)
@ApiModelProperty(value = "工号")
private Integer jobNumber;
private String Id;
/**学号/工号*/
@Excel(name = "学号/工号", width = 15)
@ApiModelProperty(value = "学号/工号")
private String code;
/**教师姓名*/
@Excel(name = "教师姓名", width = 15)
@ApiModelProperty(value = "教师姓名")
@ -85,5 +81,7 @@ public class CetInvigilateData implements Serializable {
@ApiModelProperty(value = "所属部门")
private String sysOrgCode;
/**类型*/
private Integer type;
@Excel(name = "类型", width = 15)
@ApiModelProperty(value = "类型")
private String type;
}

View File

@ -33,7 +33,7 @@ public class CetNoTeachers implements Serializable {
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private String id;
private String Id ;
/**教师姓名*/
@Excel(name = "教师姓名", width = 15)
@ApiModelProperty(value = "教师姓名")
@ -75,5 +75,5 @@ public class CetNoTeachers implements Serializable {
private String sysOrgCode;
/**类型*/
@TableField(exist = false)
private Integer type;
private String type;
}

View File

@ -33,11 +33,11 @@ public class CetTeachers implements Serializable {
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private String id;
private String Id ;
/**工号*/
@Excel(name = "工号", width = 15)
@ApiModelProperty(value = "工号")
private Integer jobNumber;
private String jobNumber;
/**教师姓名*/
@Excel(name = "教师姓名", width = 15)
@ApiModelProperty(value = "教师姓名")
@ -83,6 +83,6 @@ public class CetTeachers implements Serializable {
private String sysOrgCode;
/**类型*/
@TableField(exist = false)
private Integer type;
private String type;
}

View File

@ -31,34 +31,38 @@ public class ClassRoom implements Serializable {
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
private String id;
/**教学楼名,如“理工一”、“崇师楼”*/
@Excel(name = "教学楼名", width = 15)
@ApiModelProperty(value = "教学楼名,如“理工一”、“崇师楼”")
private java.lang.String building;
private String building;
/**区域如“A区”、“B区”无则为空*/
@Excel(name = "区域", width = 15)
@ApiModelProperty(value = "区域如“A区”、“B区”无则为空")
private java.lang.String area;
private String area;
/**楼层号,如 5楼、2楼 等*/
@Excel(name = "楼层号", width = 15)
@ApiModelProperty(value = "楼层号,如 5楼、2楼 等")
private java.lang.String floor;
private String floor;
/**房间编号如“511教室”*/
@Excel(name = "教室”", width = 15)
@ApiModelProperty(value = "房间编号如“511教室”")
private java.lang.String roomNumber;
private String roomNumber;
/**完整名称如“崇师楼B区511教室”*/
@Excel(name = "完整名称如“崇师楼B区511教室”", width = 15)
@ApiModelProperty(value = "完整名称如“崇师楼B区511教室”")
private java.lang.String fullName;
private String fullName;
/**校区*/
@Excel(name = "校区", width = 15)
@ApiModelProperty(value = "校区")
private String campus;
/** 备注*/
@Excel(name = " 备注", width = 15)
@ApiModelProperty(value = " 备注")
private java.lang.String remarks;
private String remarks;
/**创建人*/
@ApiModelProperty(value = "创建人")
private java.lang.String createBy;
private String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ -66,7 +70,7 @@ public class ClassRoom implements Serializable {
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private java.lang.String updateBy;
private String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ -74,5 +78,5 @@ public class ClassRoom implements Serializable {
private java.util.Date updateTime;
/**所属部门*/
@ApiModelProperty(value = "所属部门")
private java.lang.String sysOrgCode;
private String sysOrgCode;
}

View File

@ -2,6 +2,7 @@ package org.jeecg.modules.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.common.system.base.entity.CetGraduatesCore;
import org.jeecg.modules.entity.CetGraduates;
/**

View File

@ -2,6 +2,7 @@ package org.jeecg.modules.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.entity.CetGraduates;
/**
@ -12,5 +13,5 @@ import org.jeecg.modules.entity.CetGraduates;
*/
public interface ICetGraduatesService extends IService<CetGraduates> {
void add(CetGraduates cetGraduates);
Result<String> add(CetGraduates cetGraduates);
}

View File

@ -2,6 +2,7 @@ package org.jeecg.modules.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.entity.CetInvigilateData;
/**
@ -12,5 +13,6 @@ import org.jeecg.modules.entity.CetInvigilateData;
*/
public interface ICetInvigilateDataService extends IService<CetInvigilateData> {
void add(CetInvigilateData cetInvigilateData);
Result<String> add(CetInvigilateData cetInvigilateData);
}

View File

@ -2,6 +2,7 @@ package org.jeecg.modules.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.entity.CetNoTeachers;
/**
@ -12,5 +13,5 @@ import org.jeecg.modules.entity.CetNoTeachers;
*/
public interface ICetNoTeachersService extends IService<CetNoTeachers> {
void add(CetNoTeachers cetNoTeachers);
Result<String> add(CetNoTeachers cetNoTeachers);
}

View File

@ -2,6 +2,7 @@ package org.jeecg.modules.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.entity.CetTeachers;
/**
@ -12,5 +13,6 @@ import org.jeecg.modules.entity.CetTeachers;
*/
public interface ICetTeachersService extends IService<CetTeachers> {
void add(CetTeachers cetTeachers);
Result<String> add(CetTeachers cetTeachers);
}

View File

@ -2,15 +2,23 @@ package org.jeecg.modules.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.base.service.CoreICetGraduatesService;
import org.jeecg.modules.entity.CetGraduates;
import org.jeecg.modules.entity.CetInvigilateData;
import org.jeecg.modules.mapper.CetGraduatesMapper;
import org.jeecg.modules.mapper.CetInvigilateDataMapper;
import org.jeecg.modules.service.ICetGraduatesService;
import org.jeecg.modules.service.ICetInvigilateDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.yaml.snakeyaml.constructor.DuplicateKeyException;
/**
* @Description: 研究生数据表
@ -20,16 +28,55 @@ import org.springframework.transaction.annotation.Transactional;
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class CetGraduatesServiceImpl extends ServiceImpl<CetGraduatesMapper, CetGraduates> implements ICetGraduatesService {
private final ICetInvigilateDataService cetInvigilateDataService;
private final ICetInvigilateDataService cetInvigilateDataService; // 只注入 Service不注入 Mapper
@Override
@Transactional(rollbackFor = Exception.class)
public void add(CetGraduates cetGraduates) {
save(cetGraduates);
CetInvigilateData cetInvigilateData = BeanUtil.copyProperties(cetGraduates, CetInvigilateData.class);
cetInvigilateData.setName(cetGraduates.getGraduatesName());
cetInvigilateDataService.save(cetInvigilateData);
public Result<String> add(CetGraduates cetGraduates) {
try {
// 1. 参数校验也可放到 @Validated + @Controller 处理
if (StringUtils.isBlank(cetGraduates.getGraduatesName())) {
return Result.error("研究生姓名不能为空");
}
if (StringUtils.isBlank(cetGraduates.getStudentNumber())) {
return Result.error("学号不能为空");
}
// 2. 检查学号是否已存在使用 lambdaQuery MyBatis-Plus 的推荐做法
boolean exists = lambdaQuery()
.eq(CetGraduates::getStudentNumber, cetGraduates.getStudentNumber())
.exists();
if (exists) {
return Result.error("该学号已存在");
}
// 3. 保存总表数据调用 service 防止绕过事务控制
CetInvigilateData masterData = new CetInvigilateData();
masterData.setName(cetGraduates.getGraduatesName());
masterData.setType("研究生");
if (!cetInvigilateDataService.save(masterData)) {
throw new RuntimeException("总表数据保存失败");
}
// 4. 设置主表 ID 并保存研究生信息
cetGraduates.setId(masterData.getId());
if (!this.save(cetGraduates)) {
throw new RuntimeException("研究生数据保存失败");
}
return Result.ok("添加成功");
} catch (DuplicateKeyException e) {
return Result.error("数据已存在,请勿重复添加");
} catch (DataIntegrityViolationException e) {
return Result.error("数据不完整: " + e.getMostSpecificCause().getMessage());
} catch (Exception e) {
log.error("添加研究生 [{}] 异常:{}", cetGraduates.getGraduatesName(), e.getMessage(), e);
return Result.error("系统异常,请联系管理员");
}
}
}

View File

@ -3,12 +3,21 @@ package org.jeecg.modules.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.toolkit.Db;
import lombok.RequiredArgsConstructor;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.entity.CetGraduates;
import org.jeecg.modules.entity.CetInvigilateData;
import org.jeecg.modules.entity.CetNoTeachers;
import org.jeecg.modules.entity.CetTeachers;
import org.jeecg.modules.mapper.CetGraduatesMapper;
import org.jeecg.modules.mapper.CetInvigilateDataMapper;
import org.jeecg.modules.mapper.CetNoTeachersMapper;
import org.jeecg.modules.mapper.CetTeachersMapper;
import org.jeecg.modules.service.ICetGraduatesService;
import org.jeecg.modules.service.ICetInvigilateDataService;
import org.jeecg.modules.service.ICetNoTeachersService;
import org.jeecg.modules.service.ICetTeachersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -21,27 +30,67 @@ import org.springframework.transaction.annotation.Transactional;
* @Version: V1.0
*/
@Service
@RequiredArgsConstructor
@Transactional
public class CetInvigilateDataServiceImpl extends ServiceImpl<CetInvigilateDataMapper, CetInvigilateData> implements ICetInvigilateDataService {
@Autowired
private CetTeachersMapper cetTeachersMapper;
@Autowired
private CetGraduatesMapper cetGraduatesMapper;
@Autowired
private CetNoTeachersMapper cetNoTeachersMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public void add(CetInvigilateData cetInvigilateData) {
save(cetInvigilateData);
public Result<String> add(CetInvigilateData cetInvigilateData) {
try {
boolean masterSaved = this.save(cetInvigilateData); // MyBatis-Plus save()
if (!masterSaved) {
throw new RuntimeException("总表数据保存失败");
}
// 获取自动生成的 ID
String masterId = cetInvigilateData.getId();
switch (cetInvigilateData.getType()) {
case 1:
case "教师":
CetTeachers cetTeachers = BeanUtil.copyProperties(cetInvigilateData, CetTeachers.class);
cetTeachers.setId(masterId);
cetTeachers.setTeacherName(cetInvigilateData.getName());
Db.save(cetTeachers);
case 2:
cetTeachers.setJobNumber(cetInvigilateData.getCode());
if (cetTeachersMapper.insert(cetTeachers) <= 0) {
throw new RuntimeException("教师信息保存失败");
}
break;
case "研究生":
CetGraduates cetGraduates = BeanUtil.copyProperties(cetInvigilateData, CetGraduates.class);
cetGraduates.setId(masterId);
cetGraduates.setGraduatesName(cetInvigilateData.getName());
Db.save(cetGraduates);
case 3:
Db.save(BeanUtil.copyProperties(cetInvigilateData, CetNoTeachers.class));
cetGraduates.setStudentNumber(cetInvigilateData.getCode());
if (cetGraduatesMapper.insert(cetGraduates) <= 0) {
throw new RuntimeException("研究生信息保存失败");
}
break;
case "非教师":
CetNoTeachers cetNoTeachers = BeanUtil.copyProperties(cetInvigilateData, CetNoTeachers.class);
cetNoTeachers.setId(masterId);
if (cetNoTeachersMapper.insert(cetNoTeachers) <= 0) {
throw new RuntimeException("非教师信息保存失败");
}
break;
default:
// TODO 测试使用
Db.save(BeanUtil.copyProperties(cetInvigilateData, CetNoTeachers.class));
// new Exception("请不要传递非法参数");
throw new RuntimeException("数据类型不存在!!");
}
return Result.ok("添加成功!!");
} catch (Exception e) {
return Result.error("添加失败: " + e.getMessage());
}
}
}

View File

@ -3,15 +3,21 @@ package org.jeecg.modules.service.impl;
import cn.hutool.core.bean.BeanUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.entity.CetInvigilateData;
import org.jeecg.modules.entity.CetNoTeachers;
import org.jeecg.modules.mapper.CetNoTeachersMapper;
import org.jeecg.modules.service.ICetInvigilateDataService;
import org.jeecg.modules.service.ICetNoTeachersService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import org.yaml.snakeyaml.constructor.DuplicateKeyException;
/**
* @Description: 非教师数据表
@ -21,15 +27,42 @@ import org.springframework.transaction.annotation.Transactional;
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class CetNoTeachersServiceImpl extends ServiceImpl<CetNoTeachersMapper, CetNoTeachers> implements ICetNoTeachersService {
private final ICetInvigilateDataService cetInvigateDataService;
private final ICetInvigilateDataService cetInvigilateDataService;
@Override
@Transactional(rollbackFor = Exception.class)
public void add(CetNoTeachers cetNoTeachers) {
save(cetNoTeachers);
CetInvigilateData cetInvigilateData = BeanUtil.copyProperties(cetNoTeachers, CetInvigilateData.class);
cetInvigateDataService.save(cetInvigilateData);
public Result<String> add(CetNoTeachers cetNoTeachers) {
try {
// 1. 构造总表对象
CetInvigilateData masterData = new CetInvigilateData();
BeanUtils.copyProperties(cetNoTeachers, masterData);
masterData.setType("非教师"); // 设置类型标识
masterData.setName(cetNoTeachers.getName());
// 2. 保存总表数据
if (!cetInvigilateDataService.save(masterData)) {
throw new RuntimeException("总表数据保存失败");
}
// 3. 设置主表生成的 ID 到分表中
cetNoTeachers.setId(masterData.getId());
// 4. 保存非教师分表数据
if (!this.save(cetNoTeachers)) {
throw new RuntimeException("非教师数据保存失败");
}
return Result.ok("添加成功!");
} catch (DuplicateKeyException e) {
return Result.error("该非教师信息已存在");
} catch (DataIntegrityViolationException e) {
return Result.error("数据完整性错误: " + e.getMostSpecificCause().getMessage());
} catch (Exception e) {
log.error("添加非教师数据异常: {}", e.getMessage(), e);
return Result.error("系统错误: " + e.getMessage());
}
}
}

View File

@ -2,15 +2,23 @@ package org.jeecg.modules.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.ibatis.type.TypeAliasRegistry;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.entity.CetInvigilateData;
import org.jeecg.modules.entity.CetTeachers;
import org.jeecg.modules.mapper.CetTeachersMapper;
import org.jeecg.modules.service.ICetInvigilateDataService;
import org.jeecg.modules.service.ICetTeachersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.yaml.snakeyaml.constructor.DuplicateKeyException;
/**
* @Description: 教师数据表
@ -20,15 +28,51 @@ import org.springframework.transaction.annotation.Transactional;
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class CetTeachersServiceImpl extends ServiceImpl<CetTeachersMapper, CetTeachers> implements ICetTeachersService {
private final ICetInvigilateDataService cetInvigilateDataService;
private final ICetInvigilateDataService cetInvigilateDataServiceImpl;
@Override
@Transactional(rollbackFor = Exception.class)
public void add(CetTeachers cetTeachers) {
save(cetTeachers);
CetInvigilateData cetInvigilateData= BeanUtil.copyProperties(cetTeachers, CetInvigilateData.class);
cetInvigilateData.setName(cetTeachers.getTeacherName());
cetInvigilateDataServiceImpl.save(cetInvigilateData);
public Result<String> add(CetTeachers teacher) {
try {
// 1. 参数校验
if (StringUtils.isBlank(teacher.getTeacherName())) {
return Result.error("教师姓名不能为空");
}
// 2. 检查教师工号是否已存在
boolean exists = lambdaQuery()
.eq(CetTeachers::getJobNumber, teacher.getJobNumber())
.exists();
if (exists) {
return Result.error("该教师工号已存在");
}
// 3. 保存总表数据
CetInvigilateData master = new CetInvigilateData();
master.setName(teacher.getTeacherName());
master.setType("教师"); // 中文类型标识用于区分不同身份
if (!cetInvigilateDataService.save(master)) {
throw new RuntimeException("总表数据保存失败");
}
// 4. 设置总表ID为教师ID保存教师信息
teacher.setId(master.getId());
if (!this.save(teacher)) {
throw new RuntimeException("教师数据保存失败");
}
return Result.ok("添加成功");
} catch (DuplicateKeyException e) {
return Result.error("数据已存在,请勿重复添加");
} catch (DataIntegrityViolationException e) {
return Result.error("数据不完整: " + e.getMostSpecificCause().getMessage());
} catch (Exception e) {
log.error("添加教师 [{}] 异常: {}", teacher.getTeacherName(), e.getMessage(), e);
return Result.error("系统错误: " + e.getMessage());
}
}
}

View File

@ -156,6 +156,9 @@ spring:
slow-sql-millis: 5000
datasource:
master:
# url: jdbc:mysql://62.234.217.137:3306/jeecg-boot2?characterEncoding=UTF-8&rewriteBatchedStatements=true&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
# username: root
# password: nWZpHMb8mNxWE5Xk
url: jdbc:mysql://43.138.83.20:3306/jeecg-boot2?characterEncoding=UTF-8&rewriteBatchedStatements=true&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: dbb4acbf6b676522

View File

@ -156,9 +156,9 @@ spring:
slow-sql-millis: 5000
datasource:
master:
url: jdbc:mysql://62.234.217.137:3306/jeecg-boot2?characterEncoding=UTF-8&rewriteBatchedStatements=true&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
url: jdbc:mysql://43.138.83.20:3306/jeecg-boot2?characterEncoding=UTF-8&rewriteBatchedStatements=true&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: nWZpHMb8mNxWE5Xk
password: dbb4acbf6b676522
driver-class-name: com.mysql.cj.jdbc.Driver
# 多数据源配置
#multi-datasource1:
@ -169,7 +169,7 @@ spring:
#redis 配置
redis:
database: 2
host: 62.234.217.137
host: 43.138.83.20
port: 6379
password: LSHCwjr6ZN4hzCxS
#mybatis plus 设置