wuzhen 1 rok temu
rodzic
commit
3fd877d57e

+ 3 - 3
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:
       # 主键类型

+ 6 - 0
backend/ruoyi-modules/ruoyi-zsjy/pom.xml

@@ -104,6 +104,12 @@
             <artifactId>ruoyi-workflow</artifactId>
         </dependency>
 
+        <!--  学工管理模块 - 用于获取学生基础信息  -->
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-xg</artifactId>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 117 - 14
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<ZsjyInternshipInfo> 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);
-
-        // 映射字段名称差异
-        internshipInfo.setPositionName(addBO.getInternshipPosition());
-        internshipInfo.setStartDate(addBO.getInternshipStartDate());
-        internshipInfo.setEndDate(addBO.getInternshipEndDate());
-        internshipInfo.setCompanyContact(addBO.getContactPersonName());
-        internshipInfo.setCompanyPhone(addBO.getContactPersonPhone());
-        internshipInfo.setStatus(addBO.getAgreementStatus());
+        log.info("5. 开始字段映射...");
+
+        // 学生基础信息映射(数据库必填字段)
+        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;
+    }
 }

+ 84 - 39
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,29 +917,39 @@ export interface InternshipInfoAddBO {
   companyScale?: string;
 
   /**
-   * 单位联系人
+   * 实习岗位
    */
-  companyContact: string;
+  internshipPosition: string;
 
   /**
-   * 联系人电话
+   * 实习薪资
    */
-  companyPhone: string;
+  internshipAllowance?: number;
 
   /**
-   * 岗位名称
+   * 实习开始时间
    */
-  positionName: string;
+  internshipStartDate: string;
 
   /**
-   * 岗位职责
+   * 实习结束时间
    */
-  positionDuties?: string;
+  internshipEndDate: string;
 
   /**
-   * 实习津贴
+   * 联系人姓名
    */
-  internshipAllowance?: number;
+  contactPersonName: string;
+
+  /**
+   * 联系人电话
+   */
+  contactPersonPhone: string;
+
+  /**
+   * 岗位职责
+   */
+  positionDuties?: string;
 
   /**
    * 工作时长
@@ -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,29 +1042,39 @@ export interface InternshipInfoEditBO {
   companyScale?: string;
 
   /**
-   * 单位联系人
+   * 实习岗位
    */
-  companyContact: string;
+  internshipPosition: string;
 
   /**
-   * 联系人电话
+   * 实习薪资
    */
-  companyPhone: string;
+  internshipAllowance?: number;
 
   /**
-   * 岗位名称
+   * 实习开始时间
    */
-  positionName: string;
+  internshipStartDate: string;
 
   /**
-   * 岗位职责
+   * 实习结束时间
    */
-  positionDuties?: string;
+  internshipEndDate: string;
 
   /**
-   * 实习津贴
+   * 联系人姓名
    */
-  internshipAllowance?: number;
+  contactPersonName: string;
+
+  /**
+   * 联系人电话
+   */
+  contactPersonPhone: string;
+
+  /**
+   * 岗位职责
+   */
+  positionDuties?: string;
 
   /**
    * 工作时长
@@ -1047,14 +1097,9 @@ export interface InternshipInfoEditBO {
   accommodationCost?: number;
 
   /**
-   * 实习开始日期
+   * 实习协议状态(1已签署 2未签署)
    */
-  startDate: string;
-
-  /**
-   * 实习结束日期
-   */
-  endDate: string;
+  agreementStatus: string;
 
   /**
    * 实际结束日期