导入接口,导入表格接口

This commit is contained in:
Cool 2024-10-23 18:10:05 +08:00
parent d09c8e13d8
commit afa290ba7c
12 changed files with 291 additions and 136 deletions

View File

@ -77,6 +77,8 @@ public class ShiroConfig {
} }
// 2024.3.26 黄晖添加 // 2024.3.26 黄晖添加
// 2024.10.23 林利弘添加
// filterChainDefinitionMap.put("/cetDataImport/cas/client/validateLogin", "anon"); //cas验证登录
// 配置不会被拦截的链接 顺序判断 // 配置不会被拦截的链接 顺序判断

View File

@ -1,16 +1,21 @@
package org.jeecg.modules.controller; package org.jeecg.modules.controller;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.service.CetDataImport; import org.jeecg.modules.service.CetDataImport;
import org.jeecg.modules.utils.Base64DecodedMultipartFile;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.Base64;
/** /**
* Created with IntelliJ IDEA. * Created with IntelliJ IDEA.
@ -39,7 +44,21 @@ public class CetDataImportController {
**/ **/
@RequestMapping("dbfImport") @RequestMapping("dbfImport")
@ApiOperation("DBF数据导入") @ApiOperation("DBF数据导入")
public Result<?> DBFImport(@RequestParam("file") MultipartFile file, @RequestParam("batch") String batch, @RequestParam("level") String level) { public Result<?> DBFImport(@RequestBody JSONObject jsonObject) {
byte[] fileBytes;
String batch = jsonObject.getString("batch");
String fileName = (String) jsonObject.get("fileName");
String level = jsonObject.getString("level");
String fileContent = jsonObject.getString("fileContent");
try {
// 移除 data URL 前缀
String base64Data = fileContent.split(",")[1];
fileBytes = Base64.getDecoder().decode(base64Data);
} catch (Exception e) {
return Result.error("文件解码失败");
}
MultipartFile file = new Base64DecodedMultipartFile(fileBytes, fileName);
return cetDataImport.readDBF(file, batch, level); return cetDataImport.readDBF(file, batch, level);
} }

View File

@ -40,8 +40,6 @@ public class Cet_4Controller extends JeecgController<Cet_4, ICet_4Service> {
private ICet_4Service cet_4Service; private ICet_4Service cet_4Service;
/** /**
* 分页列表查询 * 分页列表查询
* *
@ -174,4 +172,10 @@ public class Cet_4Controller extends JeecgController<Cet_4, ICet_4Service> {
return cet_4Service.getDataByStudent(jsonObject); return cet_4Service.getDataByStudent(jsonObject);
} }
@RequestMapping("loadImportDataList")
public Result<JSONObject> loadImportDataList() {
return cet_4Service.loadImportDataList();
}
} }

View File

@ -4,6 +4,7 @@ import java.util.Arrays;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSONObject;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.entity.Cet_6; import org.jeecg.modules.entity.Cet_6;
@ -167,4 +168,9 @@ public class Cet_6Controller extends JeecgController<Cet_6, ICet_6Service> {
return cet_6Service.getGrateRate(); return cet_6Service.getGrateRate();
} }
@RequestMapping("loadImportDataList")
public Result<JSONObject> loadImportDataList() {
return cet_6Service.loadImportDataList();
}
} }

View File

@ -7,6 +7,8 @@ import org.jeecg.modules.entity.Cet_4;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.function.Function;
/** /**
* @Description: cet_6 * @Description: cet_6
@ -28,4 +30,6 @@ public interface CenterService extends IService<Cet_4> {
Result<JSONObject> getCollegeMajor(); Result<JSONObject> getCollegeMajor();
List<String> getEntryDateByBatch(Date batch); List<String> getEntryDateByBatch(Date batch);
<T,R> Map<Object, Long> dealList(List<T> list, Function<T,R> mapper);
} }

View File

@ -131,7 +131,6 @@ public class CetDataImport {
cet4List.add(cet4); cet4List.add(cet4);
} }
if (cet4List.size() >= 500) { if (cet4List.size() >= 500) {
cet4Service.save(cet4);
cet4Service.saveBatch(cet4List); cet4Service.saveBatch(cet4List);
log.info("Cet学生{}", cet4); log.info("Cet学生{}", cet4);
cet4List.clear(); cet4List.clear();
@ -141,7 +140,6 @@ public class CetDataImport {
cet6List.add(cet6); cet6List.add(cet6);
} }
if (cet6List.size() >= 500) { if (cet6List.size() >= 500) {
cet6Service.save(cet6);
cet6Service.saveBatch(cet6List); cet6Service.saveBatch(cet6List);
cet6List.clear(); cet6List.clear();
} }

View File

@ -9,6 +9,8 @@ import org.jeecg.modules.entity.Cet_4;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Map;
/** /**
* @Description: cet_4 * @Description: cet_4
@ -35,4 +37,7 @@ public interface ICet_4Service extends IService<Cet_4> {
Result<JSONObject> getRateByMajorAndLastestBatch(getRateByMajorAndLastestBatchDto getRateByMajorAndLastestBatchParam); Result<JSONObject> getRateByMajorAndLastestBatch(getRateByMajorAndLastestBatchDto getRateByMajorAndLastestBatchParam);
Result<JSONObject> getRateByEntryDate(getRateByEntryDateDto getRateByEntryDateDtoParams); Result<JSONObject> getRateByEntryDate(getRateByEntryDateDto getRateByEntryDateDtoParams);
Result<JSONObject> loadImportDataList();
List<JSONObject> getJsonObjects(Map<Object, Long> map);
} }

View File

@ -16,4 +16,6 @@ public interface ICet_6Service extends IService<Cet_6> {
Result<JSONObject> getRate(Cet_6 data); Result<JSONObject> getRate(Cet_6 data);
Result<?> getGrateRate(); Result<?> getGrateRate();
Result<JSONObject> loadImportDataList();
} }

View File

@ -130,6 +130,12 @@ public class CenterServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implement
return res; return res;
} }
@Override
public <T, R> Map<Object, Long> dealList(List<T> list, Function<T, R> mapper) {
return list.stream().collect(Collectors.groupingBy(mapper,Collectors.counting()));
}
/** /**
* 统计四级表和六级表中存在的批次 * 统计四级表和六级表中存在的批次
*/ */

View File

@ -17,6 +17,8 @@ import org.jeecg.modules.mapper.Cet_4Mapper;
import org.jeecg.modules.service.CenterService; import org.jeecg.modules.service.CenterService;
import org.jeecg.modules.service.CetCleanService; import org.jeecg.modules.service.CetCleanService;
import org.jeecg.modules.service.ICet_4Service; import org.jeecg.modules.service.ICet_4Service;
import org.jeecg.modules.utils.DateUtil;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -671,6 +673,32 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
return Result.ok(result); return Result.ok(result);
} }
@Override
public Result<JSONObject> loadImportDataList() {
List<Cet_4> list = list();
Map<Object, Long> map = centerService.dealList(list, Cet_4::getBatch);
List<JSONObject> res = getJsonObjects(map);
return Result.ok(new JSONObject().fluentPut("data", res));
}
@NotNull
public List<JSONObject> getJsonObjects(Map<Object, Long> map) {
List<JSONObject> res = new ArrayList<>();
if (map != null && !map.isEmpty()) {
for (Map.Entry<Object, Long> entry : map.entrySet()) {
JSONObject jsonObject = new JSONObject();
//格式化key为"yyyy-MM-dd"
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
jsonObject.fluentPut("batch", sdf.format(entry.getKey()))
.fluentPut("attendNumber", entry.getValue());
res.add(jsonObject);
}
}
// res按照batch倒序排序
res.sort((o1, o2) -> o2.getString("batch").compareTo(o1.getString("batch")));
return res;
}
/** /**
* 依据学生id和姓名获取四级数据 * 依据学生id和姓名获取四级数据
*/ */

View File

@ -1,5 +1,6 @@
package org.jeecg.modules.service.impl; package org.jeecg.modules.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -9,17 +10,17 @@ import org.jeecg.modules.entity.Cet4_major;
import org.jeecg.modules.entity.Cet_4; import org.jeecg.modules.entity.Cet_4;
import org.jeecg.modules.entity.Cet_6; import org.jeecg.modules.entity.Cet_6;
import org.jeecg.modules.mapper.Cet_6Mapper; import org.jeecg.modules.mapper.Cet_6Mapper;
import org.jeecg.modules.service.CenterService;
import org.jeecg.modules.service.ICet_6Service; import org.jeecg.modules.service.ICet_6Service;
import org.jeecg.modules.utils.DateUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Date; import java.text.SimpleDateFormat;
import java.util.List; import java.util.*;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -38,6 +39,8 @@ public class Cet_6ServiceImpl extends ServiceImpl<Cet_6Mapper, Cet_6> implements
@Autowired @Autowired
Cet_4ServiceImpl cet4Service; Cet_4ServiceImpl cet4Service;
@Autowired @Autowired
CenterService centerService;
@Autowired
CetMajorServiceImpl cetMajorService; CetMajorServiceImpl cetMajorService;
@Override @Override
@ -105,6 +108,14 @@ public class Cet_6ServiceImpl extends ServiceImpl<Cet_6Mapper, Cet_6> implements
return null; return null;
} }
@Override
public Result<JSONObject> loadImportDataList() {
List<Cet_6> list = list();
Map<Object, Long> map = centerService.dealList(list, Cet_6::getBatch);
List<JSONObject> res =cet4Service.getJsonObjects(map);
return Result.ok(new JSONObject().fluentPut("data", res));
}
private long getNum(Cet_6 cet) { private long getNum(Cet_6 cet) {
LambdaQueryWrapper<Cet_6> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Cet_6> queryWrapper = new LambdaQueryWrapper<>();

View File

@ -0,0 +1,70 @@
package org.jeecg.modules.utils;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
/**
* Created with IntelliJ IDEA.
*
* @Author: Cool
* @Date: 2024/10/23/17:16
* @Description:
*/
public class Base64DecodedMultipartFile implements MultipartFile {
private final byte[] fileContent;
private final String header;
public Base64DecodedMultipartFile(byte[] fileContent, String header) {
this.fileContent = fileContent;
this.header = header;
}
@Override
public String getName() {
// 返回文件名
return header;
}
@Override
public String getOriginalFilename() {
// 返回文件名
return header;
}
@Override
public String getContentType() {
// 返回文件类型
return "application/octet-stream";
}
@Override
public boolean isEmpty() {
return fileContent == null || fileContent.length == 0;
}
@Override
public long getSize() {
return fileContent.length;
}
@Override
public byte[] getBytes() throws IOException {
return fileContent;
}
@Override
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(fileContent);
}
@Override
public void transferTo(File dest) throws IOException, IllegalStateException {
Files.write(dest.toPath(), fileContent);
}
}