|
|
@@ -43,6 +43,7 @@ import org.springblade.manager.service.impl.ExcelTabServiceImpl;
|
|
|
import org.springblade.manager.service.impl.NodeBaseInfoServiceImpl;
|
|
|
import org.springblade.manager.service.impl.WbsTreeContractServiceImpl;
|
|
|
import org.springblade.manager.util.DataStructureFormatUtils;
|
|
|
+import org.springblade.manager.utils.DuplicateSheetRecognizer;
|
|
|
import org.springblade.manager.utils.FileUtils;
|
|
|
import org.springblade.manager.utils.RandomNumberHolder;
|
|
|
import org.springblade.manager.vo.*;
|
|
|
@@ -703,14 +704,6 @@ public class WbsTreeContractController extends BladeController {
|
|
|
if (wbsTreeContracts.isEmpty()) {
|
|
|
return R.fail("该节点下没有找到对应的表单数据");
|
|
|
}
|
|
|
-
|
|
|
- // 处理表单名称(与下载时的sheet名处理逻辑一致,确保匹配)
|
|
|
- Map<String, WbsTreeContract> nodeNameToContractMap = new HashMap<>();
|
|
|
- for (WbsTreeContract contract : wbsTreeContracts) {
|
|
|
- String processedNodeName = contract.getNodeName().replaceAll("[\\\\/:*?\"<>|]", "_");
|
|
|
- nodeNameToContractMap.put(processedNodeName, contract);
|
|
|
- }
|
|
|
-
|
|
|
// 2. 加载上传的多sheet Excel文件
|
|
|
com.spire.xls.Workbook mainWorkbook = new com.spire.xls.Workbook();
|
|
|
try {
|
|
|
@@ -722,11 +715,39 @@ public class WbsTreeContractController extends BladeController {
|
|
|
|
|
|
// 3. 遍历所有sheet,逐个处理
|
|
|
int sheetCount = mainWorkbook.getWorksheets().getCount();
|
|
|
+ // 处理表单名称(与下载时的sheet名处理逻辑一致,确保匹配)
|
|
|
+ Map<String, WbsTreeContract> nodeNameToContractMap = new HashMap<>();
|
|
|
+ for (WbsTreeContract contract : wbsTreeContracts) {
|
|
|
+ String processedNodeName = contract.getNodeName().replaceAll("[\\\\/:*?\"<>|]", "_").trim();
|
|
|
+ nodeNameToContractMap.put(processedNodeName, contract);
|
|
|
+ }
|
|
|
+ if(wbsTreeContracts.size()<sheetCount){
|
|
|
+ for (int i = 0; i < sheetCount; i++) {
|
|
|
+ com.spire.xls.Worksheet sheet = mainWorkbook.getWorksheets().get(i);
|
|
|
+ String sheetName = sheet.getName();
|
|
|
+ String processedSheetName = sheetName.replaceAll("[\\\\/:*?\"<>|]", "_").trim(); // 处理sheet名特殊字符
|
|
|
+ // 1. 识别当前sheet是否为复制表
|
|
|
+ DuplicateSheetRecognizer.DuplicateSheetResult result =
|
|
|
+ DuplicateSheetRecognizer.recognize(processedSheetName);
|
|
|
+ if (result.isDuplicate()) {
|
|
|
+ String originalName = result.getOriginalName();
|
|
|
+ if(nodeNameToContractMap.containsKey(originalName)){
|
|
|
+ WbsTreeContract contract = nodeNameToContractMap.get(originalName);
|
|
|
+ R r = excelTabController.copeBussTab(contract.getPKeyId());
|
|
|
+ if(r.isSuccess()){
|
|
|
+ WbsTreeContract data = (WbsTreeContract) r.getData();
|
|
|
+ nodeNameToContractMap.put(data.getNodeName(), data);
|
|
|
+ sheet.setName(data.getNodeName());
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
for (int i = 0; i < sheetCount; i++) {
|
|
|
com.spire.xls.Worksheet sheet = mainWorkbook.getWorksheets().get(i);
|
|
|
String sheetName = sheet.getName();
|
|
|
- String processedSheetName = sheetName.replaceAll("[\\\\/:*?\"<>|]", "_"); // 处理sheet名特殊字符
|
|
|
+ String processedSheetName = sheetName.replaceAll("[\\\\/:*?\"<>|]", "_").trim(); // 处理sheet名特殊字符
|
|
|
|
|
|
// 匹配对应的表单
|
|
|
WbsTreeContract matchedContract = nodeNameToContractMap.get(processedSheetName);
|