package pro.epms.services.poi.poiService;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.exception.ExcelAnalysisException;
import com.alibaba.excel.metadata.CellExtra;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.read.metadata.property.ExcelReadHeadProperty;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.mysql.cj.util.StringUtils;
import org.apache.poi.ooxml.POIXMLProperties;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.DataValidation;
import org.apache.poi.ss.usermodel.DataValidationHelper;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xssf.usermodel.*;
import org.openxmlformats.schemas.officeDocument.x2006.customProperties.CTProperty;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.format.datetime.DateFormatter;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import pro.epms.entity.entity.*;
import pro.epms.entity.entity.extend.experiment.FailedRecordVO;
import pro.epms.entity.entity.extend.experiment.PlanTestListVO;
import pro.epms.entity.entity.extend.experiment.TestRecordVO;
import pro.epms.entity.entity.pageFilter.experiment.PlanTestListPageFilter;
import pro.epms.entity.entity.pageFilter.experiment.TestRecordPageFilter;
import pro.epms.entity.service.*;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.URL;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.chrono.ChronoLocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
@Service
public class ExcelDataUploadService {
@Value("${template-resolve.max-row}")
Integer TEMPLATE_RESOLVE_MAX_ROW;
@Value("${template-resolve.max-col}")
Integer TEMPLATE_RESOLVE_MAX_COL;
@Autowired
HttpServletRequest httpServletRequest;
@Autowired
HttpServletResponse httpServletResponse;
@Autowired
IPoiTemplateService poiTemplateService;
@Autowired
IPlanService planService;
@Autowired
ITestListService testListService;
@Autowired
IGeneratorSetService generatorSetService;
@Autowired
IDepartmentService departmentService;
@Autowired
IFailedTypeService failedTypeService;
@Autowired
IPlanTestListService planTestListService;
@Autowired
ITestRecordService testRecordService;
@Autowired
IFailedRecordService failedRecordService;
@Async
public void uploadPlanTestList(MultipartFile file, Long templateId, Boolean createTestWhileNotFound) throws IOException {
XSSFWorkbook[] templateWorkbookContainer = {null};
// resolve template
Integer[] rowOffset = new Integer[]{0};
Integer[] maxCol = new Integer[]{0};
Integer[] planNameCoordinate = new Integer[2];
Map<Integer, String> headerMap = new LinkedHashMap<>();
Map<Integer, XSSFCellStyle> styleMap = new LinkedHashMap<>();
Map<Integer, CellType> cellTypeMap = new LinkedHashMap<>();
// 数据验证
Map<Integer, XSSFDataValidation> dataValidationMap = new HashMap<>();
resolveTemplate(
templateId,
templateWorkbookContainer,
file,
rowOffset,
maxCol,
planNameCoordinate,
headerMap,
styleMap,
cellTypeMap,
dataValidationMap
);
XSSFWorkbook templateWorkbook = templateWorkbookContainer[0];
// uploadFile
int finalRowOffset = rowOffset[0];
int finalMaxCol = maxCol[0];
EasyExcel.read(file.getInputStream(), new ReadListener<Map<Integer, Object>>() {
private String planName = null;
// 错误统计
List<Map<Integer, String>> excelWithErrorHead = new ArrayList<>();
List<Map<Integer, Object>> excelWithErrorRows = new ArrayList<>();
@Override
public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) {
if (planNameCoordinate[0] == 0) {
planName = headMap.get(planNameCoordinate[1]).getStringValue();
}
Map<Integer, String> head = new HashMap<>();
for (Integer key : headerMap.keySet()) {
ReadCellData<?> cellData = headMap.get(key);
if (cellData == null) {
continue;
}
head.put(key, cellData.getStringValue());
}
excelWithErrorHead.add(head);
}
@Override
public void invoke(Map<Integer, Object> data, AnalysisContext analysisContext) {
Integer rowIndex = analysisContext.readRowHolder().getRowIndex();
if (rowIndex == planNameCoordinate[0]) {
planName = (String) data.get(planNameCoordinate[1]);
}
// 跳过所在行及之前的行
if (rowIndex <= finalRowOffset) {
Map<Integer, String> rowMap = new HashMap<>();
for (Integer key : data.keySet()) {
if (data.get(key) == null) {
continue;
}
rowMap.put(key, data.get(key).toString());
}
excelWithErrorHead.add(rowMap);
return;
}
Map<String, Object> convertedData = new LinkedHashMap<>();
boolean invalid = true;
for (Integer key : data.keySet()) {
if (!headerMap.containsKey(key)) {
continue;
}
Object value = data.get(key);
if (value == null) {
continue;
}
invalid = false;
String propertyName = headerMap.get(key);
convertedData.put(propertyName, value);
}
if (invalid) {
return;
}
PlanTestListVO planTestListVO = PlanTestListVO.fromMap(convertedData);
PlanTestList planTestList = PlanTestListVO.toPlanTestList(planTestListVO);
if (StringUtils.isNullOrEmpty(planName)) {
throw new ExcelAnalysisException("没有指定试验计划");
}
// 查询试验计划
QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
planQueryWrapper.eq("name", planName);
Plan plan = planService.getOne(planQueryWrapper);
if (plan == null) {
throw new ExcelAnalysisException("试验计划信息无效");
}
planTestList.setPlanId(plan.getId());
// 查询发电机组
QueryWrapper<GeneratorSet> generatorSetWrapper = new QueryWrapper<>();
generatorSetWrapper.eq("code", planTestListVO.getGeneratorCode());
GeneratorSet generatorSet = generatorSetService.getOne(generatorSetWrapper);
if (generatorSet == null) {
data.
没有合适的资源?快使用搜索试试~ 我知道了~
基于springboot+vue的电厂定期试验管理信息系统.zip
共534个文件
java:228个
xml:200个
ts:30个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 2 下载量 112 浏览量
2023-01-10
14:54:12
上传
评论
收藏 1.06MB ZIP 举报
温馨提示
基于springboot+vue的电厂定期试验管理信息系统.zip 已获导师指导并通过得高分项目。 介绍 基于SpringBoot,SpringCloud与Vue3搭建的电厂定期试验管理信息系统 软件架构 后端: SpringCloud SpringBoot MyBatis-Plus Apache POI EasyExcel 前端: Vue3 Echarts Element-plus 数据库: MySql Redis 基于springboot+vue的电厂定期试验管理信息系统.zip 已获导师指导并通过得高分项目。 基于springboot+vue的电厂定期试验管理信息系统.zip 已获导师指导并通过得高分项目。 基于springboot+vue的电厂定期试验管理信息系统.zip 已获导师指导并通过得高分项目。 基于springboot+vue的电厂定期试验管理信息系统.zip 已获导师指导并通过得高分项目。 基于springboot+vue的电厂定期试验管理信息系统.zip 已获导师指导并通过得高分项目。 基于springboot+vue的电厂定期试验管理信息系统.zip 已获
资源推荐
资源详情
资源评论
收起资源包目录
基于springboot+vue的电厂定期试验管理信息系统.zip (534个子文件)
.browserslistrc 30B
.gitignore 231B
.gitignore 47B
index.html 611B
favicon.ico 4KB
service-poi.iml 15KB
service-auth.iml 14KB
service-experiment.iml 14KB
service-organization.iml 14KB
service-security.iml 14KB
service-upload.iml 14KB
service-gateway.iml 12KB
service-registry.iml 11KB
test.iml 10KB
common.iml 9KB
mp-generator.iml 4KB
server.iml 829B
services.iml 573B
periodictests.iml 336B
ExcelDataUploadService.java 38KB
ExcelExportService.java 23KB
StaticsService.java 15KB
PlanTestListServiceImpl.java 14KB
PageFilterQueryWrapperConstructor.java 13KB
MenuItemServiceImpl.java 11KB
ExcelStaticsController.java 9KB
PlanTestListController.java 8KB
AppServiceUrlMapServiceImpl.java 8KB
UserServiceImpl.java 8KB
StaticsMapper.java 8KB
FailedRecordPageFilter.java 8KB
TokenService.java 8KB
PlanTestListPageFilter.java 6KB
TestRecordPageFilter.java 6KB
PlanTestListMapper.java 6KB
FailedRecordServiceImpl.java 6KB
TestRecordServiceImpl.java 5KB
AuthService.java 5KB
AuthorizedServerHandler.java 5KB
FailedRecordVO.java 5KB
AuthorizedRemoteServerHandler.java 5KB
StaticsController.java 5KB
TestList.java 4KB
PlanTestListDesc.java 4KB
UserPageFilter.java 4KB
PlanTestListVO.java 4KB
UserMapper.java 4KB
AppServiceUrlMgrController.java 4KB
MenuItemPageFilter.java 4KB
TestListPageFilter.java 4KB
TestRecordController.java 4KB
FailedRecordController.java 4KB
TestRecordVO.java 4KB
AuthController.java 4KB
TestRecordMapper.java 4KB
AppServiceUrlMapMapper.java 3KB
UserMgrController.java 3KB
FailedRecordMapper.java 3KB
PickPlanTestListPageFilter.java 3KB
AppServiceUrlPageFilter.java 3KB
TestListServiceImpl.java 3KB
PlanPageFilter.java 3KB
RoleDefaultRedirectServiceImpl.java 3KB
FailedRecord.java 3KB
PoiTemplateServiceImpl.java 3KB
GlobalControllerAdvice.java 3KB
PlanTestList.java 3KB
TestRecordDesc.java 3KB
TimeLineVO.java 3KB
TestListController.java 3KB
Plan.java 3KB
AuthResult.java 3KB
PlanController.java 3KB
MenuItemMapper.java 3KB
PlanMapper.java 2KB
User.java 2KB
MenuItemMgrController.java 2KB
RoleDefaultRedirectPageFilter.java 2KB
PlanServiceImpl.java 2KB
ExperimentByMonthFilter.java 2KB
CreatePlanTestListClusterPageFilter.java 2KB
ServicePoiTemplateController.java 2KB
GeneratorSetController.java 2KB
StaticsTable.java 2KB
RoleDefaultRedirectController.java 2KB
UserTokenInRedis.java 2KB
GeneratorSetServiceImpl.java 2KB
AuthorizationMgrController.java 2KB
AppServiceMgrController.java 2KB
PoiTemplatePageFilter.java 2KB
AuthSender.java 2KB
TimeUtils.java 2KB
DepartmentController.java 2KB
AppserviceServiceImpl.java 2KB
AuthorizationServiceImpl.java 2KB
TestRecord.java 2KB
IPlanTestListService.java 2KB
MenuItemPageVO.java 2KB
MenuItem.java 2KB
AppServiceUrlMap.java 2KB
共 534 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
- m0_744167322024-01-16超级好的资源,很值得参考学习,对我启发很大,支持!
- 2301_790765432024-03-13资源太好了,解决了我当下遇到的难题,抱紧大佬的大腿~
不安分的小女孩
- 粉丝: 8970
- 资源: 1950
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功