修改物资设备清单导入修改

This commit is contained in:
2025-09-23 16:49:06 +08:00
parent 20dc9b3e85
commit a8744cc4cc
4 changed files with 52 additions and 30 deletions

View File

@ -140,29 +140,44 @@ public class ExcelReader {
isFirstRow = false; isFirstRow = false;
continue; continue;
} }
if(hasValidData(row)){
List<String> rowData = new ArrayList<>();
// 读取A到E列索引0到4
for (int cellIndex = 0; cellIndex < 6; cellIndex++) {
Cell cell = row.getCell(cellIndex, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
rowData.add(getCellValue(cell));
}
List<String> rowData = new ArrayList<>(); // 检查是否找到中文数字开头的行
// 读取A到E列索引0到4 String aColumnValue = rowData.get(0).trim();
for (int cellIndex = 0; cellIndex < 6; cellIndex++) { if (aColumnValue.matches(CHINESE_NUMBERS_REGEX)) {
Cell cell = row.getCell(cellIndex, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK); foundChineseStart = true;
rowData.add(getCellValue(cell)); }
// 只有找到中文数字开头的行之后,才开始收集数据
if (foundChineseStart) {
data.add(rowData);
}
} }
// 检查是否找到中文数字开头的行
String aColumnValue = rowData.get(0).trim();
if (aColumnValue.matches(CHINESE_NUMBERS_REGEX)) {
foundChineseStart = true;
}
// 只有找到中文数字开头的行之后,才开始收集数据
if (foundChineseStart) {
data.add(rowData);
}
} }
sheetData.setData(data); sheetData.setData(data);
} }
private static boolean hasValidData(Row row) {
// 遍历行中的所有单元格
for (int cellIndex = 0; cellIndex < row.getLastCellNum(); cellIndex++) {
Cell cell = row.getCell(cellIndex, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
String cellValue = getCellValue(cell).trim();
// 只要有一个单元格有非空值,就认为是有效行
if (!cellValue.isEmpty()) {
return true;
}
}
return false;
}
/** /**
* 根据数据构建树形结构 * 根据数据构建树形结构
*/ */

View File

@ -87,16 +87,8 @@ public class TenderSupplierInputController extends BaseController {
@PostMapping("/import") @PostMapping("/import")
public R<Void> importData(Long projectId,@RequestParam("file")MultipartFile file) throws IOException { public R<Void> importData(Long projectId,@RequestParam("file")MultipartFile file) throws IOException {
List<TenderSupplierInputVo> tenderSupplierInputVos = ExcelUtil.importExcel(file.getInputStream(), TenderSupplierInputVo.class); List<TenderSupplierInputVo> tenderSupplierInputVos = ExcelUtil.importExcel(file.getInputStream(), TenderSupplierInputVo.class);
List<TenderSupplierInput> tenderSupplierInputs = new ArrayList<>();
for (TenderSupplierInputVo tenderSupplierInputVo : tenderSupplierInputVos) { return toAjax(tenderSupplierInputService.importData(tenderSupplierInputVos,projectId));
TenderSupplierInput newTenderSupplierInput = new TenderSupplierInput();
BeanUtils.copyProperties(tenderSupplierInputVo, newTenderSupplierInput);
newTenderSupplierInput.setProjectId(projectId);
newTenderSupplierInput.setState("draft");
tenderSupplierInputs.add(newTenderSupplierInput);
}
return toAjax(tenderSupplierInputService.saveOrUpdateBatch(tenderSupplierInputs));
} }
/** /**

View File

@ -72,4 +72,6 @@ ITenderSupplierInputService extends IService<TenderSupplierInput>{
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
List<TenderSupplierInputVo> getList(TenderSupplierInputBo bo); List<TenderSupplierInputVo> getList(TenderSupplierInputBo bo);
boolean importData(List<TenderSupplierInputVo> tenderSupplierInputVos, Long projectId);
} }

View File

@ -3,11 +3,9 @@ package org.dromara.tender.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.cailiaoshebei.controller.constant; import org.dromara.cailiaoshebei.controller.constant;
import org.dromara.cailiaoshebei.domain.BusCailiaoshebeiPici;
import org.dromara.common.core.domain.event.ProcessEvent; import org.dromara.common.core.domain.event.ProcessEvent;
import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.service.OssService;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -16,11 +14,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.formalities.enums.FormalitiesStatusEnum;
import org.dromara.system.domain.vo.SysOssUploadVo;
import org.dromara.system.domain.vo.SysOssVo; import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.service.ISysOssService; import org.dromara.system.service.ISysOssService;
import org.dromara.tender.domain.BusBiddingPlan; import org.springframework.beans.BeanUtils;
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 org.dromara.tender.domain.bo.TenderSupplierInputBo; import org.dromara.tender.domain.bo.TenderSupplierInputBo;
@ -35,7 +31,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Collection; import java.util.Collection;
import static org.dromara.common.constant.MinioPathConstant.ContactNoticeTemplate;
import static org.dromara.common.constant.MinioPathConstant.SupplierInput; import static org.dromara.common.constant.MinioPathConstant.SupplierInput;
/** /**
@ -222,6 +217,24 @@ public class TenderSupplierInputServiceImpl extends ServiceImpl<TenderSupplierIn
return list; return list;
} }
@Override
public boolean importData(List<TenderSupplierInputVo> tenderSupplierInputVos, Long projectId) {
List<TenderSupplierInput> tenderSupplierInputs = new ArrayList<>();
for (TenderSupplierInputVo tenderSupplierInputVo : tenderSupplierInputVos) {
Long count = baseMapper.selectCount(new LambdaQueryWrapper<TenderSupplierInput>().eq(TenderSupplierInput::getSupplierCode, tenderSupplierInputVo.getSupplierCode()));
if (count > 0) {
continue;
}
TenderSupplierInput newTenderSupplierInput = new TenderSupplierInput();
BeanUtils.copyProperties(tenderSupplierInputVo, newTenderSupplierInput);
newTenderSupplierInput.setProjectId(projectId);
newTenderSupplierInput.setState("draft");
tenderSupplierInputs.add(newTenderSupplierInput);
}
return baseMapper.insertBatch(tenderSupplierInputs);
}
/** /**
* 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等)