diff --git a/backend/ruoyi-admin/src/main/resources/application.yml b/backend/ruoyi-admin/src/main/resources/application.yml
index 24fb3c8a..f66f8f50 100644
--- a/backend/ruoyi-admin/src/main/resources/application.yml
+++ b/backend/ruoyi-admin/src/main/resources/application.yml
@@ -163,9 +163,9 @@ mybatis-plus:
mapperLocations: classpath*:mapper/**/*Mapper.xml
# 实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: org.dromara.**.domain
- # 临时禁用SQL日志(减少系统负担)
- # configuration:
- # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+ # 启用SQL日志输出,用于调试数据库插入问题
+ configuration:
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
dbConfig:
# 主键类型
diff --git a/backend/ruoyi-modules/ruoyi-zsjy/pom.xml b/backend/ruoyi-modules/ruoyi-zsjy/pom.xml
index 3a3abd1b..aed2e7cc 100644
--- a/backend/ruoyi-modules/ruoyi-zsjy/pom.xml
+++ b/backend/ruoyi-modules/ruoyi-zsjy/pom.xml
@@ -104,6 +104,12 @@
ruoyi-workflow
+
+
+ org.dromara
+ ruoyi-xg
+
+
diff --git a/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/service/impl/InternshipInfoServiceImpl.java b/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/service/impl/InternshipInfoServiceImpl.java
index a24fba68..8f33c0c8 100644
--- a/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/service/impl/InternshipInfoServiceImpl.java
+++ b/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/service/impl/InternshipInfoServiceImpl.java
@@ -14,6 +14,9 @@ import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.xg.domain.vo.XgStudentMsgVo;
+import org.dromara.xg.service.IXgStudentMsgService;
+import org.dromara.common.core.exception.ServiceException;
import org.dromara.zsjy.domain.bo.InternshipInfoQueryBO;
import org.dromara.zsjy.domain.bo.InternshipInfoAddBO;
import org.dromara.zsjy.domain.bo.InternshipInfoEditBO;
@@ -41,6 +44,7 @@ public class InternshipInfoServiceImpl implements IInternshipInfoService {
private final InternshipInfoMapper internshipInfoMapper;
private final ZsjyInternshipInfoMapper zsjyInternshipInfoMapper;
+ private final IXgStudentMsgService xgStudentMsgService;
/**
* 查询学生实习信息分页列表(班主任专用)
@@ -266,35 +270,104 @@ public class InternshipInfoServiceImpl implements IInternshipInfoService {
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertInternshipInfo(InternshipInfoAddBO addBO) {
- log.info("新增实习信息,参数:{}", addBO);
+ log.info("=== 新增实习信息开始 ===");
+ log.info("1. 接收到的参数:{}", addBO);
// 检查该学生是否已经有实习信息
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ZsjyInternshipInfo::getStudentId, addBO.getStudentId());
ZsjyInternshipInfo existingInfo = zsjyInternshipInfoMapper.selectOne(queryWrapper);
+ log.info("2. 检查学生是否已有实习信息,结果:{}", existingInfo != null ? "已存在" : "不存在");
if (ObjectUtil.isNotNull(existingInfo)) {
log.warn("学生ID:{} 已存在实习信息,不能重复添加", addBO.getStudentId());
throw new RuntimeException("该学生已存在实习信息,不能重复添加");
}
+ // 根据学生ID查询学生基础信息
+ log.info("3. 查询学生基础信息...");
+ XgStudentMsgVo studentInfo = getStudentInfo(addBO.getStudentId());
+ log.info("4. 学生信息查询结果:学号={}, 姓名={}, 学院ID={}, 专业ID={}, 班级ID={}, 手机号={}",
+ studentInfo.getStudentNo(), studentInfo.getName(),
+ studentInfo.getCollegeId(), studentInfo.getMajorId(),
+ studentInfo.getClassId(), studentInfo.getPhone());
+
// 构建实习信息实体
ZsjyInternshipInfo internshipInfo = new ZsjyInternshipInfo();
- BeanUtil.copyProperties(addBO, internshipInfo);
+ log.info("5. 开始字段映射...");
- // 映射字段名称差异
- internshipInfo.setPositionName(addBO.getInternshipPosition());
- internshipInfo.setStartDate(addBO.getInternshipStartDate());
- internshipInfo.setEndDate(addBO.getInternshipEndDate());
- internshipInfo.setCompanyContact(addBO.getContactPersonName());
- internshipInfo.setCompanyPhone(addBO.getContactPersonPhone());
- internshipInfo.setStatus(addBO.getAgreementStatus());
+ // 学生基础信息映射(数据库必填字段)
+ internshipInfo.setStudentId(addBO.getStudentId());
+ internshipInfo.setStudentNo(studentInfo.getStudentNo()); // 从学生信息获取
+ internshipInfo.setStudentName(studentInfo.getName()); // 从学生信息获取
+ internshipInfo.setGender(studentInfo.getGender()); // 从学生信息获取
+
+ // 类型转换:String -> Long(处理可能的空值)
+ internshipInfo.setCollegeId(StringUtils.isNotBlank(studentInfo.getCollegeId()) ?
+ Long.parseLong(studentInfo.getCollegeId()) : null); // 从学生信息获取
+ internshipInfo.setMajorId(StringUtils.isNotBlank(studentInfo.getMajorId()) ?
+ Long.parseLong(studentInfo.getMajorId()) : null); // 从学生信息获取
+ internshipInfo.setClassId(StringUtils.isNotBlank(studentInfo.getClassId()) ?
+ Long.parseLong(studentInfo.getClassId()) : null); // 从学生信息获取
+
+ internshipInfo.setPhone(studentInfo.getPhone()); // 从学生信息获取
+
+ // 实习相关信息映射(来自BO)
+ internshipInfo.setInternshipStatus(addBO.getInternshipStatus());
+ internshipInfo.setCompanyName(addBO.getCompanyName());
+ internshipInfo.setCompanyAddress(addBO.getCompanyAddress());
+ internshipInfo.setInternshipAllowance(addBO.getInternshipAllowance());
+ internshipInfo.setPositionName(addBO.getInternshipPosition()); // internshipPosition -> positionName
+ internshipInfo.setStartDate(addBO.getInternshipStartDate()); // internshipStartDate -> startDate
+ internshipInfo.setEndDate(addBO.getInternshipEndDate()); // internshipEndDate -> endDate
+
+ // 公司联系信息映射(优先使用BO中的新字段,兼容旧字段)
+ internshipInfo.setCompanyContact(StringUtils.isNotBlank(addBO.getCompanyContact()) ?
+ addBO.getCompanyContact() : addBO.getContactPersonName()); // 优先使用companyContact
+ internshipInfo.setCompanyPhone(StringUtils.isNotBlank(addBO.getCompanyPhone()) ?
+ addBO.getCompanyPhone() : addBO.getContactPersonPhone()); // 优先使用companyPhone
+
+ // 新增字段映射(从BO中获取真实值)
+ internshipInfo.setCompanyIndustry(addBO.getCompanyIndustry()); // 行业类型
+ internshipInfo.setCompanyScale(addBO.getCompanyScale()); // 单位规模
+ internshipInfo.setPositionDuties(addBO.getPositionDuties()); // 岗位职责
+ internshipInfo.setWorkHours(addBO.getWorkHours()); // 工作时长
+ internshipInfo.setAccommodationAddress(addBO.getAccommodationAddress()); // 住宿地址
+ internshipInfo.setAccommodationType(addBO.getAccommodationType()); // 住宿类型
+ internshipInfo.setAccommodationCost(addBO.getAccommodationCost()); // 住宿费用
+
+ internshipInfo.setStatus(addBO.getAgreementStatus()); // agreementStatus -> status
+ // actualEndDate保持null,因为实习还未结束
+
+ log.info("6. 映射后的实体对象:");
+ log.info(" - studentId: {}", internshipInfo.getStudentId());
+ log.info(" - studentNo: {}", internshipInfo.getStudentNo());
+ log.info(" - studentName: {}", internshipInfo.getStudentName());
+ log.info(" - collegeId: {}", internshipInfo.getCollegeId());
+ log.info(" - majorId: {}", internshipInfo.getMajorId());
+ log.info(" - classId: {}", internshipInfo.getClassId());
+ log.info(" - phone: {}", internshipInfo.getPhone());
+ log.info(" - internshipStatus: {}", internshipInfo.getInternshipStatus());
+ log.info(" - companyName: {}", internshipInfo.getCompanyName());
+ log.info(" - companyAddress: {}", internshipInfo.getCompanyAddress());
+ log.info(" - positionName: {}", internshipInfo.getPositionName());
+ log.info(" - internshipAllowance: {}", internshipInfo.getInternshipAllowance());
+ log.info(" - startDate: {}", internshipInfo.getStartDate());
+ log.info(" - endDate: {}", internshipInfo.getEndDate());
+ log.info(" - companyContact: {}", internshipInfo.getCompanyContact());
+ log.info(" - companyPhone: {}", internshipInfo.getCompanyPhone());
+ log.info(" - status: {}", internshipInfo.getStatus());
// 插入数据
+ log.info("7. 开始执行数据库插入操作...");
int result = zsjyInternshipInfoMapper.insert(internshipInfo);
- log.info("新增实习信息结果:{}", result > 0 ? "成功" : "失败");
+ log.info("8. 数据库插入结果:{} (1表示成功,0表示失败)", result);
+ log.info("9. 插入后的主键ID:{}", internshipInfo.getInternshipId());
- return result > 0;
+ boolean success = result > 0;
+ log.info("=== 新增实习信息结束,结果:{} ===", success ? "成功" : "失败");
+
+ return success;
}
/**
@@ -323,8 +396,22 @@ public class InternshipInfoServiceImpl implements IInternshipInfoService {
internshipInfo.setPositionName(editBO.getInternshipPosition());
internshipInfo.setStartDate(editBO.getInternshipStartDate());
internshipInfo.setEndDate(editBO.getInternshipEndDate());
- internshipInfo.setCompanyContact(editBO.getContactPersonName());
- internshipInfo.setCompanyPhone(editBO.getContactPersonPhone());
+
+ // 公司联系信息映射(优先使用BO中的新字段,兼容旧字段)
+ internshipInfo.setCompanyContact(StringUtils.isNotBlank(editBO.getCompanyContact()) ?
+ editBO.getCompanyContact() : editBO.getContactPersonName()); // 优先使用companyContact
+ internshipInfo.setCompanyPhone(StringUtils.isNotBlank(editBO.getCompanyPhone()) ?
+ editBO.getCompanyPhone() : editBO.getContactPersonPhone()); // 优先使用companyPhone
+
+ // 新增字段映射(从BO中获取真实值)
+ internshipInfo.setCompanyIndustry(editBO.getCompanyIndustry()); // 行业类型
+ internshipInfo.setCompanyScale(editBO.getCompanyScale()); // 单位规模
+ internshipInfo.setPositionDuties(editBO.getPositionDuties()); // 岗位职责
+ internshipInfo.setWorkHours(editBO.getWorkHours()); // 工作时长
+ internshipInfo.setAccommodationAddress(editBO.getAccommodationAddress()); // 住宿地址
+ internshipInfo.setAccommodationType(editBO.getAccommodationType()); // 住宿类型
+ internshipInfo.setAccommodationCost(editBO.getAccommodationCost()); // 住宿费用
+
internshipInfo.setStatus(editBO.getAgreementStatus());
// 更新数据
@@ -356,4 +443,20 @@ public class InternshipInfoServiceImpl implements IInternshipInfoService {
return result > 0;
}
+
+ /**
+ * 根据学生ID查询学生基础信息
+ *
+ * @param studentId 学生ID
+ * @return 学生信息
+ */
+ private XgStudentMsgVo getStudentInfo(Long studentId) {
+ log.info("根据学生ID查询学生信息:{}", studentId);
+ XgStudentMsgVo studentInfo = xgStudentMsgService.queryByUserId(studentId);
+ if (studentInfo == null) {
+ log.error("未找到学生信息,学生ID:{}", studentId);
+ throw new ServiceException("未找到学生信息,学生ID:" + studentId);
+ }
+ return studentInfo;
+ }
}
diff --git a/web/src/api/zsjy/types.ts b/web/src/api/zsjy/types.ts
index 8668c151..02673477 100644
--- a/web/src/api/zsjy/types.ts
+++ b/web/src/api/zsjy/types.ts
@@ -871,6 +871,16 @@ export interface InternshipInfoAddBO {
*/
studentId: string | number;
+ /**
+ * 学生姓名(前端显示用)
+ */
+ studentName?: string;
+
+ /**
+ * 学生学号(前端显示用)
+ */
+ studentNo?: string;
+
/**
* 实习状态(1进行中 2已完成 3中断)
*/
@@ -886,6 +896,16 @@ export interface InternshipInfoAddBO {
*/
companyAddress: string;
+ /**
+ * 单位联系人
+ */
+ companyContact?: string;
+
+ /**
+ * 联系人电话
+ */
+ companyPhone?: string;
+
/**
* 行业类型
*/
@@ -897,30 +917,40 @@ export interface InternshipInfoAddBO {
companyScale?: string;
/**
- * 单位联系人
+ * 实习岗位
*/
- companyContact: string;
+ internshipPosition: string;
+
+ /**
+ * 实习薪资
+ */
+ internshipAllowance?: number;
+
+ /**
+ * 实习开始时间
+ */
+ internshipStartDate: string;
+
+ /**
+ * 实习结束时间
+ */
+ internshipEndDate: string;
+
+ /**
+ * 联系人姓名
+ */
+ contactPersonName: string;
/**
* 联系人电话
*/
- companyPhone: string;
-
- /**
- * 岗位名称
- */
- positionName: string;
+ contactPersonPhone: string;
/**
* 岗位职责
*/
positionDuties?: string;
- /**
- * 实习津贴
- */
- internshipAllowance?: number;
-
/**
* 工作时长
*/
@@ -942,19 +972,9 @@ export interface InternshipInfoAddBO {
accommodationCost?: number;
/**
- * 实习开始日期
+ * 实习协议状态(1已签署 2未签署)
*/
- startDate: string;
-
- /**
- * 实习结束日期
- */
- endDate: string;
-
- /**
- * 实际结束日期
- */
- actualEndDate?: string;
+ agreementStatus: string;
/**
* 备注
@@ -976,6 +996,16 @@ export interface InternshipInfoEditBO {
*/
studentId: string | number;
+ /**
+ * 学生姓名(前端显示用)
+ */
+ studentName?: string;
+
+ /**
+ * 学生学号(前端显示用)
+ */
+ studentNo?: string;
+
/**
* 实习状态(1进行中 2已完成 3中断)
*/
@@ -991,6 +1021,16 @@ export interface InternshipInfoEditBO {
*/
companyAddress: string;
+ /**
+ * 单位联系人
+ */
+ companyContact?: string;
+
+ /**
+ * 联系人电话
+ */
+ companyPhone?: string;
+
/**
* 行业类型
*/
@@ -1002,30 +1042,40 @@ export interface InternshipInfoEditBO {
companyScale?: string;
/**
- * 单位联系人
+ * 实习岗位
*/
- companyContact: string;
+ internshipPosition: string;
+
+ /**
+ * 实习薪资
+ */
+ internshipAllowance?: number;
+
+ /**
+ * 实习开始时间
+ */
+ internshipStartDate: string;
+
+ /**
+ * 实习结束时间
+ */
+ internshipEndDate: string;
+
+ /**
+ * 联系人姓名
+ */
+ contactPersonName: string;
/**
* 联系人电话
*/
- companyPhone: string;
-
- /**
- * 岗位名称
- */
- positionName: string;
+ contactPersonPhone: string;
/**
* 岗位职责
*/
positionDuties?: string;
- /**
- * 实习津贴
- */
- internshipAllowance?: number;
-
/**
* 工作时长
*/
@@ -1047,14 +1097,9 @@ export interface InternshipInfoEditBO {
accommodationCost?: number;
/**
- * 实习开始日期
+ * 实习协议状态(1已签署 2未签署)
*/
- startDate: string;
-
- /**
- * 实习结束日期
- */
- endDate: string;
+ agreementStatus: string;
/**
* 实际结束日期