Browse Source

2026-02-12

特殊巡检配置导入功能
master
fengyuan_yang 2 weeks ago
parent
commit
5ab59e93d1
  1. 9
      src/main/java/com/gaotao/modules/pms/controller/QcController.java
  2. 10
      src/main/java/com/gaotao/modules/pms/data/GetParamInData.java
  3. 156
      src/main/java/com/gaotao/modules/pms/service/Impl/QcBaseInfoServiceImpl.java
  4. 3
      src/main/java/com/gaotao/modules/pms/service/QcBaseInfoService.java

9
src/main/java/com/gaotao/modules/pms/controller/QcController.java

@ -1996,6 +1996,15 @@ public class QcController {
return R.ok().put("rows", list); return R.ok().put("rows", list);
} }
/**
* 巡检配置批量导入
**/
@PostMapping("/patrolConfigUpload")
public R patrolConfigUpload(@RequestParam(value = "file") MultipartFile file, @ModelAttribute GetParamInData data){
qcBaseInfoService.patrolConfigUpload(file, data);
return R.ok().put("msg", "导入成功");
}
} }

10
src/main/java/com/gaotao/modules/pms/data/GetParamInData.java

@ -54,6 +54,16 @@ public class GetParamInData {
private String status; private String status;
private String partNo;
public String getPartNo() {
return partNo;
}
public void setPartNo(String partNo) {
this.partNo = partNo;
}
public String getBuNo() { public String getBuNo() {
return buNo; return buNo;
} }

156
src/main/java/com/gaotao/modules/pms/service/Impl/QcBaseInfoServiceImpl.java

@ -1458,4 +1458,160 @@ public class QcBaseInfoServiceImpl implements QcBaseInfoService {
return qcBaseInfoMapper.getAllOperationDescList(params); return qcBaseInfoMapper.getAllOperationDescList(params);
} }
/**
* 巡检配置批量导入
**/
@Override
@Transactional
public void patrolConfigUpload(MultipartFile file, GetParamInData data) {
try {
// 转流
InputStream is = file.getInputStream();
// 读取工作簿
XSSFWorkbook workbook = new XSSFWorkbook(is);
// 读取工作表
XSSFSheet sheet = workbook.getSheetAt(0);
// 获取行数
int rows = sheet.getPhysicalNumberOfRows();
// 创建集合存放错误信息
StringBuilder errInfo = new StringBuilder();
int successCount = 0;
int errorCount = 0;
// 记录是否有默认配置
boolean hasDefault = false;
String defaultOperationDesc = null;
// 遍历每一行, 从第二行开始(第一行是列名)
for (int j = 1; j < rows; j++) {
try {
if (sheet.getRow(j) == null || sheet.getRow(j).getCell(0) == null) {
continue;
}
// 获得该行
XSSFRow row = sheet.getRow(j);
// 读取工序
if (row.getCell(0) == null || StringUtils.isBlank(row.getCell(0).getStringCellValue())) {
errInfo.append("第").append(j + 1).append("行工序不能为空;");
errorCount++;
continue;
}
String operationDesc = row.getCell(0).getStringCellValue().trim();
// 读取首次巡检时长
Double firstInspectionDuration = null;
if (row.getCell(1) != null) {
try {
firstInspectionDuration = row.getCell(1).getNumericCellValue();
} catch (Exception e) {
errInfo.append("第").append(j + 1).append("行首次巡检时长格式错误;");
errorCount++;
continue;
}
}
// 读取下次巡检时长
Double nextInspectionDuration = null;
if (row.getCell(2) != null) {
try {
nextInspectionDuration = row.getCell(2).getNumericCellValue();
} catch (Exception e) {
errInfo.append("第").append(j + 1).append("行下次巡检时长格式错误;");
errorCount++;
continue;
}
}
// 读取累计巡检时长
Double totalInspectionDuration = null;
if (row.getCell(3) != null) {
try {
totalInspectionDuration = row.getCell(3).getNumericCellValue();
} catch (Exception e) {
errInfo.append("第").append(j + 1).append("行累计巡检时长格式错误;");
errorCount++;
continue;
}
}
// 读取是否默认
String defaultFlag = "N";
if (row.getCell(4) != null) {
String defaultStr = row.getCell(4).getStringCellValue().trim();
if ("是".equals(defaultStr) || "Y".equalsIgnoreCase(defaultStr)) {
defaultFlag = "Y";
if (hasDefault) {
errInfo.append("第").append(j + 1).append("行设置为默认,但已存在默认配置(").append(defaultOperationDesc).append(");");
errorCount++;
continue;
}
hasDefault = true;
defaultOperationDesc = operationDesc;
}
}
// 构建参数
Map<String, Object> params = new HashMap<>();
params.put("site", data.getSite());
params.put("buNo", data.getBuNo());
params.put("partNo", data.getPartNo());
params.put("operationDesc", operationDesc);
params.put("firstInspectionDuration", firstInspectionDuration);
params.put("nextInspectionDuration", nextInspectionDuration);
params.put("totalInspectionDuration", totalInspectionDuration);
params.put("defaultFlag", defaultFlag);
// 检查是否已存在该工序的配置
Map<String, String> checkParams = new HashMap<>();
checkParams.put("site", data.getSite());
checkParams.put("buNo", data.getBuNo());
checkParams.put("partNo", data.getPartNo());
List<Map<String, Object>> existList = qcBaseInfoMapper.getPatrolConfigList(checkParams);
boolean exists = false;
for (Map<String, Object> exist : existList) {
if (operationDesc.equals(exist.get("operationDesc"))) {
exists = true;
break;
}
}
// 如果设置为默认先清除其他默认标识
if ("Y".equals(defaultFlag)) {
qcBaseInfoMapper.clearPatrolConfigDefaultFlag(params);
}
if (exists) {
// 更新
qcBaseInfoMapper.updatePatrolConfig(params);
} else {
// 新增
qcBaseInfoMapper.savePatrolConfig(params);
}
successCount++;
} catch (Exception e) {
errInfo.append("第").append(j + 1).append("行导入失败:").append(e.getMessage()).append(";");
errorCount++;
log.error("导入第{}行失败", j + 1, e);
}
}
workbook.close();
is.close();
if (errorCount > 0) {
throw new RuntimeException("导入完成,成功" + successCount + "条,失败" + errorCount + "条;" + errInfo.toString());
}
} catch (Exception e) {
log.error("巡检配置导入失败", e);
throw new RuntimeException(e.getMessage());
}
}
} }

3
src/main/java/com/gaotao/modules/pms/service/QcBaseInfoService.java

@ -164,4 +164,7 @@ public interface QcBaseInfoService {
// 查询所有工序列表 // 查询所有工序列表
List<String> getAllOperationDescList(Map<String, String> params); List<String> getAllOperationDescList(Map<String, String> params);
// 巡检配置批量导入
void patrolConfigUpload(MultipartFile file, GetParamInData data);
} }
Loading…
Cancel
Save