|
|
@ -4802,7 +4802,34 @@ public class EamServiceImpl implements EamService { |
|
|
modelData.setUpdateBy(createBy); |
|
|
modelData.setUpdateBy(createBy); |
|
|
modelData.setCheckType(checkType); |
|
|
modelData.setCheckType(checkType); |
|
|
|
|
|
|
|
|
// 检查模板是否已存在 |
|
|
|
|
|
|
|
|
// 处理点检项目(第4-8列:点检项目编码1-5) |
|
|
|
|
|
List<String> itemNos = new ArrayList<>(); |
|
|
|
|
|
for (int j = 4; j <= 8; j++) { |
|
|
|
|
|
String itemNo = getCellValue(row.getCell(j)); |
|
|
|
|
|
if (!StringUtils.isEmpty(itemNo)) { |
|
|
|
|
|
itemNo = itemNo.toUpperCase(); |
|
|
|
|
|
itemNos.add(itemNo); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 先验证所有点检项目是否存在(在保存模板之前) |
|
|
|
|
|
if (!itemNos.isEmpty()) { |
|
|
|
|
|
for (String itemNo : itemNos) { |
|
|
|
|
|
EamPropertiesItemData itemQuery = new EamPropertiesItemData(); |
|
|
|
|
|
itemQuery.setSite(site); |
|
|
|
|
|
itemQuery.setBuNo(buNo); |
|
|
|
|
|
itemQuery.setItemNo(itemNo); |
|
|
|
|
|
itemQuery.setItemType("A"); |
|
|
|
|
|
itemQuery.setCheckType(checkType); |
|
|
|
|
|
|
|
|
|
|
|
List<EamPropertiesItemData> existItems = eamDao.checkEamPropertiesItem(itemQuery); |
|
|
|
|
|
if (existItems == null || existItems.isEmpty()) { |
|
|
|
|
|
throw new RuntimeException("点检项目编码[" + itemNo + "]不存在,请先导入该点检项目"); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 验证通过后,再保存或更新模板 |
|
|
List<EamPropertiesModelHeaderData> existModels = eamDao.eamPropertiesModelSearch(modelData); |
|
|
List<EamPropertiesModelHeaderData> existModels = eamDao.eamPropertiesModelSearch(modelData); |
|
|
boolean isNewTemplate = true; |
|
|
boolean isNewTemplate = true; |
|
|
if (existModels != null && !existModels.isEmpty()) { |
|
|
if (existModels != null && !existModels.isEmpty()) { |
|
|
@ -4821,7 +4848,147 @@ public class EamServiceImpl implements EamService { |
|
|
eamDao.editEamPropertiesModel(modelData); |
|
|
eamDao.editEamPropertiesModel(modelData); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 处理点检项目(第4-8列:点检项目编码1-5) |
|
|
|
|
|
|
|
|
// 关联项目(只有在有项目时才处理) |
|
|
|
|
|
if (!itemNos.isEmpty()) { |
|
|
|
|
|
|
|
|
|
|
|
// 先删除该模板下的所有项目关联 |
|
|
|
|
|
EamPropertiesModelDetailData deleteData = new EamPropertiesModelDetailData(); |
|
|
|
|
|
deleteData.setSite(site); |
|
|
|
|
|
deleteData.setBuNo(buNo); |
|
|
|
|
|
deleteData.setCodeNo(codeNo); |
|
|
|
|
|
deleteData.setFunctionType("A"); |
|
|
|
|
|
eamDao.deleteModalDetails(deleteData); |
|
|
|
|
|
|
|
|
|
|
|
// 重新关联项目 |
|
|
|
|
|
List<EamPropertiesItemData> itemList = new ArrayList<>(); |
|
|
|
|
|
for (String itemNo : itemNos) { |
|
|
|
|
|
EamPropertiesItemData itemData = new EamPropertiesItemData(); |
|
|
|
|
|
itemData.setSite(site); |
|
|
|
|
|
itemData.setBuNo(buNo); |
|
|
|
|
|
itemData.setCodeNo(codeNo); |
|
|
|
|
|
itemData.setCodeDesc(codeDesc); |
|
|
|
|
|
itemData.setItemNo(itemNo); |
|
|
|
|
|
itemData.setItemType("A"); |
|
|
|
|
|
itemData.setFunctionType("A"); |
|
|
|
|
|
itemData.setUserId(createBy); |
|
|
|
|
|
itemData.setCheckType(checkType); |
|
|
|
|
|
itemList.add(itemData); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 批量保存项目关联 |
|
|
|
|
|
EamPropertiesModelHeaderData saveData = new EamPropertiesModelHeaderData(); |
|
|
|
|
|
saveData.setSite(site); |
|
|
|
|
|
saveData.setBuNo(buNo); |
|
|
|
|
|
saveData.setCodeNo(codeNo); |
|
|
|
|
|
saveData.setCodeDesc(codeDesc); |
|
|
|
|
|
saveData.setFunctionType("A"); |
|
|
|
|
|
saveData.setItemList(itemList); |
|
|
|
|
|
saveData.setItemType("A"); |
|
|
|
|
|
saveData.setUserId(createBy); |
|
|
|
|
|
saveData.setCheckType(checkType); |
|
|
|
|
|
|
|
|
|
|
|
eamDao.saveModalDetails(saveData); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
successCount++; |
|
|
|
|
|
log.info("成功导入点检模板: {}, 关联{}个项目", codeNo, itemNos.size()); |
|
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
errorCount++; |
|
|
|
|
|
errorMsg.append("第").append(i + 1).append("行: ").append(e.getMessage()).append("; "); |
|
|
|
|
|
log.error("导入点检模板第{}行失败: {}", i + 1, e.getMessage()); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
workbook.close(); |
|
|
|
|
|
|
|
|
|
|
|
if (errorCount > 0) { |
|
|
|
|
|
throw new RuntimeException("导入完成,成功" + successCount + "条,失败" + errorCount + "条。错误信息:" + errorMsg.toString()); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
log.info("点检模板导入完成,成功{}条", successCount); |
|
|
|
|
|
} catch (IOException e) { |
|
|
|
|
|
log.error("读取Excel文件失败", e); |
|
|
|
|
|
throw new RuntimeException("读取Excel文件失败: " + e.getMessage()); |
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
log.error("导入点检模板失败", e); |
|
|
|
|
|
throw new RuntimeException(e.getMessage()); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public void uploadEamMaintenanceModelExcel(MultipartFile file, String createBy, String site, String buNo) { |
|
|
|
|
|
try { |
|
|
|
|
|
// 验证必填参数 |
|
|
|
|
|
if (StringUtils.isEmpty(site)) { |
|
|
|
|
|
throw new RuntimeException("site不能为空"); |
|
|
|
|
|
} |
|
|
|
|
|
if (StringUtils.isEmpty(buNo)) { |
|
|
|
|
|
throw new RuntimeException("buNo不能为空"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
InputStream is = file.getInputStream(); |
|
|
|
|
|
XSSFWorkbook workbook = new XSSFWorkbook(is); |
|
|
|
|
|
XSSFSheet sheet = workbook.getSheetAt(0); |
|
|
|
|
|
int rows = sheet.getPhysicalNumberOfRows(); |
|
|
|
|
|
|
|
|
|
|
|
if (rows < 2) { |
|
|
|
|
|
throw new RuntimeException("Excel文件中没有数据"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int successCount = 0; |
|
|
|
|
|
int errorCount = 0; |
|
|
|
|
|
StringBuilder errorMsg = new StringBuilder(); |
|
|
|
|
|
|
|
|
|
|
|
for (int i = 1; i < rows; i++) { |
|
|
|
|
|
XSSFRow row = sheet.getRow(i); |
|
|
|
|
|
if (row == null) { |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
try { |
|
|
|
|
|
// 第0列:维保模板编码 |
|
|
|
|
|
String codeNo = getCellValue(row.getCell(0)); |
|
|
|
|
|
if (StringUtils.isEmpty(codeNo)) { |
|
|
|
|
|
throw new RuntimeException("维保模板编码不能为空"); |
|
|
|
|
|
} |
|
|
|
|
|
codeNo = codeNo.toUpperCase(); |
|
|
|
|
|
|
|
|
|
|
|
// 第1列:维保模板名称 |
|
|
|
|
|
String codeDesc = getCellValue(row.getCell(1)); |
|
|
|
|
|
if (StringUtils.isEmpty(codeDesc)) { |
|
|
|
|
|
throw new RuntimeException("维保模板名称不能为空"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 第2列:部门 |
|
|
|
|
|
String checkType = getCellValue(row.getCell(2)); |
|
|
|
|
|
if (StringUtils.isEmpty(checkType)) { |
|
|
|
|
|
throw new RuntimeException("部门不能为空"); |
|
|
|
|
|
} |
|
|
|
|
|
checkType = convertCheckType(checkType); |
|
|
|
|
|
|
|
|
|
|
|
// 第3列:在用 |
|
|
|
|
|
String active = getCellValue(row.getCell(3)); |
|
|
|
|
|
if (StringUtils.isEmpty(active)) { |
|
|
|
|
|
active = "Y"; |
|
|
|
|
|
} |
|
|
|
|
|
if (!"Y".equals(active) && !"N".equals(active)) { |
|
|
|
|
|
throw new RuntimeException("在用只能是Y或N"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 创建或更新维保模板 |
|
|
|
|
|
EamPropertiesModelHeaderData modelData = new EamPropertiesModelHeaderData(); |
|
|
|
|
|
modelData.setSite(site); |
|
|
|
|
|
modelData.setBuNo(buNo); |
|
|
|
|
|
modelData.setCodeNo(codeNo); |
|
|
|
|
|
modelData.setCodeDesc(codeDesc); |
|
|
|
|
|
modelData.setActive(active); |
|
|
|
|
|
modelData.setFunctionType("B"); |
|
|
|
|
|
modelData.setUserId(createBy); |
|
|
|
|
|
modelData.setCreatedBy(createBy); |
|
|
|
|
|
modelData.setUpdateBy(createBy); |
|
|
|
|
|
modelData.setCheckType(checkType); |
|
|
|
|
|
|
|
|
|
|
|
// 处理维保项目(第4-8列:维保项目编码1-5) |
|
|
List<String> itemNos = new ArrayList<>(); |
|
|
List<String> itemNos = new ArrayList<>(); |
|
|
for (int j = 4; j <= 8; j++) { |
|
|
for (int j = 4; j <= 8; j++) { |
|
|
String itemNo = getCellValue(row.getCell(j)); |
|
|
String itemNo = getCellValue(row.getCell(j)); |
|
|
@ -4830,29 +4997,54 @@ public class EamServiceImpl implements EamService { |
|
|
itemNos.add(itemNo); |
|
|
itemNos.add(itemNo); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 去重:移除重复的项目编码 |
|
|
|
|
|
Set<String> uniqueItemNos = new LinkedHashSet<>(itemNos); |
|
|
|
|
|
itemNos = new ArrayList<>(uniqueItemNos); |
|
|
|
|
|
|
|
|
|
|
|
// 先验证所有维保项目是否存在(在保存模板之前) |
|
|
if (!itemNos.isEmpty()) { |
|
|
if (!itemNos.isEmpty()) { |
|
|
// 验证每个点检项目是否存在 |
|
|
|
|
|
for (String itemNo : itemNos) { |
|
|
for (String itemNo : itemNos) { |
|
|
EamPropertiesItemData itemQuery = new EamPropertiesItemData(); |
|
|
EamPropertiesItemData itemQuery = new EamPropertiesItemData(); |
|
|
itemQuery.setSite(site); |
|
|
itemQuery.setSite(site); |
|
|
itemQuery.setBuNo(buNo); |
|
|
itemQuery.setBuNo(buNo); |
|
|
itemQuery.setItemNo(itemNo); |
|
|
itemQuery.setItemNo(itemNo); |
|
|
itemQuery.setItemType("A"); |
|
|
|
|
|
|
|
|
itemQuery.setItemType("B"); |
|
|
itemQuery.setCheckType(checkType); |
|
|
itemQuery.setCheckType(checkType); |
|
|
|
|
|
|
|
|
List<EamPropertiesItemData> existItems = eamDao.checkEamPropertiesItem(itemQuery); |
|
|
List<EamPropertiesItemData> existItems = eamDao.checkEamPropertiesItem(itemQuery); |
|
|
if (existItems == null || existItems.isEmpty()) { |
|
|
if (existItems == null || existItems.isEmpty()) { |
|
|
throw new RuntimeException("点检项目编码[" + itemNo + "]不存在,请先导入该点检项目"); |
|
|
|
|
|
|
|
|
throw new RuntimeException("维保项目编码[" + itemNo + "]不存在,请先导入该维保项目"); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// 先删除该模板下的所有项目关联 |
|
|
|
|
|
|
|
|
// 验证通过后,再保存或更新模板 |
|
|
|
|
|
List<EamPropertiesModelHeaderData> existModels = eamDao.eamPropertiesModelSearch(modelData); |
|
|
|
|
|
boolean isNewTemplate = true; |
|
|
|
|
|
if (existModels != null && !existModels.isEmpty()) { |
|
|
|
|
|
// 模板已存在,使用现有模板的ID进行更新 |
|
|
|
|
|
modelData.setFlag("2"); // 更新标志 |
|
|
|
|
|
isNewTemplate = false; |
|
|
|
|
|
log.info("维保模板已存在,将更新: {}", codeNo); |
|
|
|
|
|
} else { |
|
|
|
|
|
modelData.setFlag("1"); // 新增标志 |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 保存或更新模板 |
|
|
|
|
|
if ("1".equals(modelData.getFlag())) { |
|
|
|
|
|
eamDao.saveEamPropertiesModel(modelData); |
|
|
|
|
|
} else { |
|
|
|
|
|
eamDao.editEamPropertiesModel(modelData); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 关联项目(只有在有项目时才处理) |
|
|
|
|
|
if (!itemNos.isEmpty()) { |
|
|
EamPropertiesModelDetailData deleteData = new EamPropertiesModelDetailData(); |
|
|
EamPropertiesModelDetailData deleteData = new EamPropertiesModelDetailData(); |
|
|
deleteData.setSite(site); |
|
|
deleteData.setSite(site); |
|
|
deleteData.setBuNo(buNo); |
|
|
deleteData.setBuNo(buNo); |
|
|
deleteData.setCodeNo(codeNo); |
|
|
deleteData.setCodeNo(codeNo); |
|
|
deleteData.setFunctionType("A"); |
|
|
|
|
|
|
|
|
deleteData.setFunctionType("B"); |
|
|
eamDao.deleteModalDetails(deleteData); |
|
|
eamDao.deleteModalDetails(deleteData); |
|
|
|
|
|
|
|
|
// 重新关联项目 |
|
|
// 重新关联项目 |
|
|
@ -4864,8 +5056,8 @@ public class EamServiceImpl implements EamService { |
|
|
itemData.setCodeNo(codeNo); |
|
|
itemData.setCodeNo(codeNo); |
|
|
itemData.setCodeDesc(codeDesc); |
|
|
itemData.setCodeDesc(codeDesc); |
|
|
itemData.setItemNo(itemNo); |
|
|
itemData.setItemNo(itemNo); |
|
|
itemData.setItemType("A"); |
|
|
|
|
|
itemData.setFunctionType("A"); |
|
|
|
|
|
|
|
|
itemData.setItemType("B"); |
|
|
|
|
|
itemData.setFunctionType("B"); |
|
|
itemData.setUserId(createBy); |
|
|
itemData.setUserId(createBy); |
|
|
itemData.setCheckType(checkType); |
|
|
itemData.setCheckType(checkType); |
|
|
itemList.add(itemData); |
|
|
itemList.add(itemData); |
|
|
@ -4877,9 +5069,9 @@ public class EamServiceImpl implements EamService { |
|
|
saveData.setBuNo(buNo); |
|
|
saveData.setBuNo(buNo); |
|
|
saveData.setCodeNo(codeNo); |
|
|
saveData.setCodeNo(codeNo); |
|
|
saveData.setCodeDesc(codeDesc); |
|
|
saveData.setCodeDesc(codeDesc); |
|
|
saveData.setFunctionType("A"); |
|
|
|
|
|
|
|
|
saveData.setFunctionType("B"); |
|
|
saveData.setItemList(itemList); |
|
|
saveData.setItemList(itemList); |
|
|
saveData.setItemType("A"); |
|
|
|
|
|
|
|
|
saveData.setItemType("B"); |
|
|
saveData.setUserId(createBy); |
|
|
saveData.setUserId(createBy); |
|
|
saveData.setCheckType(checkType); |
|
|
saveData.setCheckType(checkType); |
|
|
|
|
|
|
|
|
@ -4887,12 +5079,12 @@ public class EamServiceImpl implements EamService { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
successCount++; |
|
|
successCount++; |
|
|
log.info("成功导入点检模板: {}, 关联{}个项目", codeNo, itemNos.size()); |
|
|
|
|
|
|
|
|
log.info("成功导入维保模板: {}, 关联{}个项目", codeNo, itemNos.size()); |
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
} catch (Exception e) { |
|
|
errorCount++; |
|
|
errorCount++; |
|
|
errorMsg.append("第").append(i + 1).append("行: ").append(e.getMessage()).append("; "); |
|
|
errorMsg.append("第").append(i + 1).append("行: ").append(e.getMessage()).append("; "); |
|
|
log.error("导入点检模板第{}行失败: {}", i + 1, e.getMessage()); |
|
|
|
|
|
|
|
|
log.error("导入维保模板第{}行失败: {}", i + 1, e.getMessage()); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -4902,12 +5094,12 @@ public class EamServiceImpl implements EamService { |
|
|
throw new RuntimeException("导入完成,成功" + successCount + "条,失败" + errorCount + "条。错误信息:" + errorMsg.toString()); |
|
|
throw new RuntimeException("导入完成,成功" + successCount + "条,失败" + errorCount + "条。错误信息:" + errorMsg.toString()); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
log.info("点检模板导入完成,成功{}条", successCount); |
|
|
|
|
|
|
|
|
log.info("维保模板导入完成,成功{}条", successCount); |
|
|
} catch (IOException e) { |
|
|
} catch (IOException e) { |
|
|
log.error("读取Excel文件失败", e); |
|
|
log.error("读取Excel文件失败", e); |
|
|
throw new RuntimeException("读取Excel文件失败: " + e.getMessage()); |
|
|
throw new RuntimeException("读取Excel文件失败: " + e.getMessage()); |
|
|
} catch (Exception e) { |
|
|
} catch (Exception e) { |
|
|
log.error("导入点检模板失败", e); |
|
|
|
|
|
|
|
|
log.error("导入维保模板失败", e); |
|
|
throw new RuntimeException(e.getMessage()); |
|
|
throw new RuntimeException(e.getMessage()); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|