增加rufts
This commit is contained in:
+34
-15
@@ -49,6 +49,9 @@ public class PatrolDeleteTaskService {
|
||||
|
||||
private static final String MODULE_TYPE = "PATROL_DELETE";
|
||||
private static final String CONTENT_TYPE_XLSX = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
||||
private static final int RESULT_PENDING = -1;
|
||||
private static final int RESULT_FAILED = 0;
|
||||
private static final int RESULT_SUCCESS = 1;
|
||||
private static final String INTERRUPTED_MESSAGE = "Python 在该店铺结果提交完成前中断";
|
||||
|
||||
private final FileTaskMapper fileTaskMapper;
|
||||
@@ -264,12 +267,13 @@ public class PatrolDeleteTaskService {
|
||||
result.setSourceFilename(normalizedShopName);
|
||||
result.setSourceFileUrl(item.getShopId());
|
||||
result.setUserId(request.getUserId());
|
||||
result.setSuccess(null);
|
||||
result.setSuccess(RESULT_PENDING);
|
||||
result.setCreatedAt(now);
|
||||
fileResultMapper.insert(result);
|
||||
snapshots.add(toSnapshotVo(result, item, task.getStatus(), null));
|
||||
}
|
||||
persistTaskJson(task, uniqueItems, snapshots);
|
||||
taskCacheService.saveTaskCache(task);
|
||||
|
||||
PatrolDeleteCreateTaskVo vo = new PatrolDeleteCreateTaskVo();
|
||||
vo.setTaskId(task.getId());
|
||||
@@ -326,6 +330,7 @@ public class PatrolDeleteTaskService {
|
||||
|
||||
persistSnapshotJson(task, snapshots);
|
||||
fileTaskMapper.updateById(task);
|
||||
taskCacheService.saveTaskCache(task);
|
||||
tryFinalizeTask(taskId, false);
|
||||
}
|
||||
|
||||
@@ -402,6 +407,7 @@ public class PatrolDeleteTaskService {
|
||||
|
||||
persistSnapshotJson(task, snapshots);
|
||||
fileTaskMapper.updateById(task);
|
||||
taskCacheService.saveTaskCache(task);
|
||||
return changed;
|
||||
}
|
||||
|
||||
@@ -448,6 +454,7 @@ public class PatrolDeleteTaskService {
|
||||
updateTaskStatusFromRows(task, rows);
|
||||
persistSnapshotJson(task, buildSnapshotFromDb(task, rows));
|
||||
fileTaskMapper.updateById(task);
|
||||
taskCacheService.saveTaskCache(task);
|
||||
}
|
||||
|
||||
private long countTasks(Long userId, List<String> statuses) {
|
||||
@@ -502,9 +509,9 @@ public class PatrolDeleteTaskService {
|
||||
private Map<Long, Map<Long, PatrolDeleteResultItemVo>> buildSnapshotMap(Map<Long, FileTaskEntity> taskMap) {
|
||||
Map<Long, Map<Long, PatrolDeleteResultItemVo>> out = new LinkedHashMap<>();
|
||||
for (Map.Entry<Long, FileTaskEntity> entry : taskMap.entrySet()) {
|
||||
List<PatrolDeleteResultItemVo> snapshots = taskResultItemService.listResultSnapshots(entry.getKey(), MODULE_TYPE, PatrolDeleteResultItemVo.class);
|
||||
List<PatrolDeleteResultItemVo> snapshots = parseTaskSnapshots(entry.getValue().getResultJson());
|
||||
if (snapshots.isEmpty()) {
|
||||
snapshots = parseTaskSnapshots(entry.getValue().getResultJson());
|
||||
snapshots = taskResultItemService.listResultSnapshots(entry.getKey(), MODULE_TYPE, PatrolDeleteResultItemVo.class);
|
||||
}
|
||||
out.put(entry.getKey(), indexSnapshotByResultId(snapshots));
|
||||
}
|
||||
@@ -518,7 +525,7 @@ public class PatrolDeleteTaskService {
|
||||
item.setShopName(firstNonBlank(item.getShopName(), entity.getSourceFilename()));
|
||||
item.setShopId(firstNonBlank(item.getShopId(), entity.getSourceFileUrl()));
|
||||
item.setTaskStatus(task != null ? task.getStatus() : item.getTaskStatus());
|
||||
item.setSuccess(entity.getSuccess() == null ? item.getSuccess() : entity.getSuccess() == 1);
|
||||
item.setSuccess(toSuccessFlag(entity.getSuccess(), item.getSuccess()));
|
||||
item.setError(!blank(entity.getErrorMessage()) ? entity.getErrorMessage() : item.getError());
|
||||
item.setCreatedAt(entity.getCreatedAt());
|
||||
item.setFinishedAt(task != null ? task.getFinishedAt() : item.getFinishedAt());
|
||||
@@ -575,7 +582,7 @@ public class PatrolDeleteTaskService {
|
||||
vo.setMatchStatus(item.getMatchStatus());
|
||||
vo.setMatchMessage(item.getMatchMessage());
|
||||
vo.setTaskStatus(taskStatus);
|
||||
vo.setSuccess(result.getSuccess() == null ? null : result.getSuccess() == 1);
|
||||
vo.setSuccess(toSuccessFlag(result.getSuccess(), null));
|
||||
vo.setError(result.getErrorMessage());
|
||||
vo.setCreatedAt(result.getCreatedAt());
|
||||
vo.setFinishedAt(finishedAt);
|
||||
@@ -616,7 +623,7 @@ public class PatrolDeleteTaskService {
|
||||
item.setShopName(row.getSourceFilename());
|
||||
item.setShopId(row.getSourceFileUrl());
|
||||
item.setTaskStatus(task == null ? null : task.getStatus());
|
||||
item.setSuccess(row.getSuccess() == null ? null : row.getSuccess() == 1);
|
||||
item.setSuccess(toSuccessFlag(row.getSuccess(), null));
|
||||
item.setError(row.getErrorMessage());
|
||||
item.setCreatedAt(row.getCreatedAt());
|
||||
item.setFinishedAt(task == null ? null : task.getFinishedAt());
|
||||
@@ -642,8 +649,8 @@ public class PatrolDeleteTaskService {
|
||||
}
|
||||
|
||||
private void updateTaskStatusFromRows(FileTaskEntity task, List<FileResultEntity> rows) {
|
||||
long successCount = rows.stream().filter(row -> Integer.valueOf(1).equals(row.getSuccess())).count();
|
||||
long failedCount = rows.stream().filter(row -> Integer.valueOf(0).equals(row.getSuccess())).count();
|
||||
long successCount = rows.stream().filter(row -> Integer.valueOf(RESULT_SUCCESS).equals(row.getSuccess())).count();
|
||||
long failedCount = rows.stream().filter(row -> Integer.valueOf(RESULT_FAILED).equals(row.getSuccess())).count();
|
||||
long pendingCount = rows.stream().filter(row -> !isResultFinished(row)).count();
|
||||
task.setSuccessFileCount((int) successCount);
|
||||
task.setFailedFileCount((int) failedCount);
|
||||
@@ -796,11 +803,11 @@ public class PatrolDeleteTaskService {
|
||||
.filter(item -> Boolean.TRUE.equals(item.getSuccess()))
|
||||
.toList();
|
||||
if (!successItems.isEmpty()) {
|
||||
String filename = safeFileStem("patrol-delete-" + task.getId()) + ".xlsx";
|
||||
String filename = buildTaskWorkbookFilename(task);
|
||||
int rowCount = excelAssemblyService.countRows(successItems);
|
||||
FileResultEntity firstSuccessRow = null;
|
||||
for (FileResultEntity row : rows) {
|
||||
if (Integer.valueOf(1).equals(row.getSuccess())) {
|
||||
if (Integer.valueOf(RESULT_SUCCESS).equals(row.getSuccess())) {
|
||||
row.setResultFilename(filename);
|
||||
row.setResultFileUrl(null);
|
||||
row.setResultFileSize(0L);
|
||||
@@ -843,7 +850,7 @@ public class PatrolDeleteTaskService {
|
||||
throw new BusinessException("没有可生成的巡店删除结果");
|
||||
}
|
||||
File workRoot = FileUtil.mkdir(FileUtil.file(System.getProperty("java.io.tmpdir"), "patrol-delete-result", String.valueOf(task.getId())));
|
||||
String filename = safeFileStem("patrol-delete-" + task.getId()) + ".xlsx";
|
||||
String filename = buildTaskWorkbookFilename(task);
|
||||
File xlsx = FileUtil.file(workRoot, filename);
|
||||
try {
|
||||
excelAssemblyService.writeWorkbook(xlsx, successItems);
|
||||
@@ -851,7 +858,7 @@ public class PatrolDeleteTaskService {
|
||||
long fileSize = xlsx.length();
|
||||
int rowCount = excelAssemblyService.countRows(successItems);
|
||||
for (FileResultEntity row : rows) {
|
||||
if (Integer.valueOf(1).equals(row.getSuccess())) {
|
||||
if (Integer.valueOf(RESULT_SUCCESS).equals(row.getSuccess())) {
|
||||
row.setResultFilename(filename);
|
||||
row.setResultFileUrl(objectKey);
|
||||
row.setResultFileSize(fileSize);
|
||||
@@ -866,13 +873,13 @@ public class PatrolDeleteTaskService {
|
||||
}
|
||||
|
||||
private void markResultSuccess(FileResultEntity row) {
|
||||
row.setSuccess(1);
|
||||
row.setSuccess(RESULT_SUCCESS);
|
||||
row.setErrorMessage(null);
|
||||
fileResultMapper.updateById(row);
|
||||
}
|
||||
|
||||
private void markResultFailed(FileResultEntity row, String message) {
|
||||
row.setSuccess(0);
|
||||
row.setSuccess(RESULT_FAILED);
|
||||
row.setErrorMessage(blankToNull(message));
|
||||
row.setResultFilename(null);
|
||||
row.setResultFileUrl(null);
|
||||
@@ -883,7 +890,14 @@ public class PatrolDeleteTaskService {
|
||||
}
|
||||
|
||||
private boolean isResultFinished(FileResultEntity row) {
|
||||
return Integer.valueOf(1).equals(row.getSuccess()) || Integer.valueOf(0).equals(row.getSuccess());
|
||||
return Integer.valueOf(RESULT_SUCCESS).equals(row.getSuccess()) || Integer.valueOf(RESULT_FAILED).equals(row.getSuccess());
|
||||
}
|
||||
|
||||
private Boolean toSuccessFlag(Integer dbValue, Boolean fallback) {
|
||||
if (dbValue == null || Integer.valueOf(RESULT_PENDING).equals(dbValue)) {
|
||||
return fallback;
|
||||
}
|
||||
return Integer.valueOf(RESULT_SUCCESS).equals(dbValue);
|
||||
}
|
||||
|
||||
private List<PatrolDeleteResultItemVo> parseTaskSnapshots(String json) {
|
||||
@@ -972,6 +986,11 @@ public class PatrolDeleteTaskService {
|
||||
return !blank(first) ? first : second;
|
||||
}
|
||||
|
||||
private String buildTaskWorkbookFilename(FileTaskEntity task) {
|
||||
Long taskId = task == null ? null : task.getId();
|
||||
return safeFileStem("巡店删除-" + (taskId == null ? "result" : taskId)) + ".xlsx";
|
||||
}
|
||||
|
||||
private String safeFileStem(String value) {
|
||||
String raw = value == null ? "result" : value.trim();
|
||||
String safe = raw.replaceAll("[\\\\/:*?\"<>|]+", "_");
|
||||
|
||||
Reference in New Issue
Block a user