数据导入1.1

This commit is contained in:
Cool 2024-03-26 19:01:45 +08:00
parent 2878b05b4b
commit 1c7cca09c9
5 changed files with 185 additions and 2 deletions

View File

@ -10,7 +10,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>jeecg-system-start</artifactId>
<dependencies>
<!-- SYSTEM 系统管理模块 -->
<dependency>
@ -49,6 +49,11 @@
<artifactId>flyway-core</artifactId>
<version>7.15.0</version>
</dependency>
<dependency>
<groupId>com.github.albfernandez</groupId>
<artifactId>javadbf</artifactId>
<version>1.9.2</version>
</dependency>
</dependencies>
<build>
@ -60,4 +65,4 @@
</plugins>
</build>
</project>
</project>

View File

@ -0,0 +1,10 @@
package org.jeecg.modules.anno;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface AttributeName {
int value();
}

View File

@ -0,0 +1,47 @@
package org.jeecg.modules.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecg.modules.anno.AttributeName;
import java.io.Serializable;
import java.util.Date;
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value = "cet_english对象", description = "四六级英语")
public class CET implements Serializable {
private static final long serialVersionUID = 1L;
@AttributeName(4)
@ApiModelProperty(value = "学生姓名")
private String name;
@AttributeName(11)
@ApiModelProperty(value = "学生所在学院")
private String college;
@AttributeName(15)
@ApiModelProperty(value = "学生成绩")
private Integer result;
@AttributeName(19)
@ApiModelProperty(value = "学生学号")
private String id;
@ApiModelProperty(value = "考试批次")
private Date batch;
@ApiModelProperty(value = "学生入学时间")
private String entrydate;
@AttributeName(12)
@ApiModelProperty(value = "学生听力成绩")
private Integer listen;
@AttributeName(13)
@ApiModelProperty(value = "阅读成绩")
private Integer reading;
@AttributeName(14)
@ApiModelProperty(value = "写作成绩")
private Integer writing;
}

View File

@ -0,0 +1,13 @@
package org.jeecg.modules.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Insert;
import org.jeecg.modules.entity.CET;
public interface CetMapper extends BaseMapper<CET> {
@Insert("insert into cet_4 (name, college, result, id, batch, entrydate, listen, reading, writing) values (#{name}, #{college}, #{result}, #{id},#{batch}, #{entrydate}, #{listen}, #{reading}, #{writing})")
void insertCET_4(CET cet);
@Insert("insert into cet_6 (name, college, result, id, batch, entrydate, listen, reading, writing)values (#{name}, #{college}, #{result}, #{id},#{batch}, #{entrydate}, #{listen}, #{reading}, #{writing})")
void insertCET_6(CET cet);
}

View File

@ -0,0 +1,108 @@
package org.jeecg.modules.service;
import com.linuxense.javadbf.DBFReader;
import org.jeecg.modules.anno.AttributeName;
import org.jeecg.modules.entity.CET;
import org.jeecg.modules.mapper.CetMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.nio.charset.Charset;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@Service
public class DBFImporter {
@Resource
CetMapper cetMapper;
// @Autowired
// CetMapper_6 cetMapper6;
public void readDBF(InputStream inputStream, Date batch, String level, String charsetName) {
try {
// List<CET> cetList = new ArrayList<>();
DBFReader dbfReader = new DBFReader(inputStream, Charset.forName(charsetName));
Object[] rowValues;
while ((rowValues = dbfReader.nextRecord()) != null) {
CET cet = new CET();
Class<?> cetClass = cet.getClass();
Field[] fields = cetClass.getDeclaredFields();
//对单个学生对象进行属性注入
for (Field field : fields) {
if (field.getDeclaredAnnotation(AttributeName.class) == null) continue;
int fieldIndex = field.getDeclaredAnnotation(AttributeName.class).value();
field.setAccessible(true);
// 获取字段的类型
Class<?> fieldType = field.getType();
//进行类型区分
if (fieldType == String.class) {
Object value = rowValues[fieldIndex - 1];
field.set(cet, String.valueOf(value));
if (field.getName().equals("id")) {
// System.out.println(field.getName());
String s = String.valueOf(value);
cet.setEntrydate(s.substring(0, 4));
}
} else if (fieldType == int.class || fieldType == Integer.class) {
Object value = rowValues[fieldIndex - 1];
field.set(cet, (int) Double.parseDouble(String.valueOf(value)));
} else if (fieldType == Date.class) {
Object value = rowValues[fieldIndex - 1];
field.set(cet, new Date(((Timestamp) value).getTime()));
}
}
cet.setBatch(batch);
// System.out.println(cet);
// cetList.add(cet);
System.out.println(cet);
if (level.equals("英语四级")) {
cetMapper.insertCET_4(cet);
}
if (level.equals("英语六级")) {
cetMapper.insertCET_6(cet);
}
}
// System.out.println(cetList.size());
} catch (Exception e) {
e.printStackTrace();
}
}
// private static Date extractDateFromPath(String filePath) {
// // 在文件路径中找到日期部分的起始位置
// String[] pathArray = filePath.split("\\\\");
// String date = pathArray[pathArray.length - 2];
//
//
// // 截取日期部分
// String dateStr = date.substring(0, 7) + "-01";
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
// try {
//
// return simpleDateFormat.parse(dateStr);
// } catch (ParseException e) {
// throw new RuntimeException(e);
// }
//
// }
//
// private String getLevel(String filePath) {
// String[] pathArray = filePath.split("\\\\");
// String level = pathArray[pathArray.length - 1];
// return level.substring(0, 4);
// }
}