diff --git a/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java b/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java index 15861bb..9eef43d 100644 --- a/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java +++ b/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java @@ -30,6 +30,7 @@ import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -112,16 +113,57 @@ public class FishDraftDataController { return result ? ResponseResult.success("保存成功") : ResponseResult.error("保存失败"); } +// @PostMapping("/batchSaveDraft") +// @Operation(summary = "批量保存草稿") +// public ResponseResult saveDraft(@RequestBody List fishDraftDataList) { +// +// fishDraftDataList.forEach(fishDraftData -> { +// fishDraftData.setStatus("DRAFT"); +// fishDraftData.setDeletedFlag(0); +// fishDraftData.setLockFlag(0); +// }); +// boolean result = fishDraftDataService.saveBatch(fishDraftDataList); +// return result ? ResponseResult.success("保存成功") : ResponseResult.error("保存失败"); +// } + @PostMapping("/batchSaveDraft") @Operation(summary = "批量保存草稿") - public ResponseResult saveDraft(@RequestBody List fishDraftDataList) { + @Transactional(rollbackFor = Exception.class) + public ResponseResult saveDraft(@RequestBody FishImportRowRequest request) { + String taskId = request.getTaskId(); + ImportTask importTask = importTaskService.getById(taskId); + String resultJson = importTask.getResultJson(); + FishImportResult importResult = null; + if (resultJson != null && !resultJson.isEmpty()) { + try { + importResult = objectMapper.readValue(resultJson, FishImportResult.class); + ZipFileUtil.ZipContent content = new ZipFileUtil.ZipContent(); + content.images = importResult.getImageFiles(); + content.videos = importResult.getVideoFiles(); + fishImportService.processAttachments(importResult, content); + } catch (Exception e) { + e.printStackTrace(); + // ignore parse error + } + } - fishDraftDataList.forEach(fishDraftData -> { - fishDraftData.setStatus("DRAFT"); - fishDraftData.setDeletedFlag(0); - fishDraftData.setLockFlag(0); - }); + if (importResult == null || importResult.getRows() == null) { + return ResponseResult.error("导入数据不存在"); + } + Date date = new Date(); + List fishDraftDataList = new ArrayList<>(); + for (FishImportResult.FishImportRow row : importResult.getRows()) { + FishDraftData data = row.getData(); + data.setRowIndex(row.getRowIndex()); + data.setStatus("DRAFT"); + data.setEnddt(data.getStrdt()); + data.setDeletedFlag(0); + data.setLockFlag(0); + data.setTm(date); + fishDraftDataList.add(data); + } boolean result = fishDraftDataService.saveBatch(fishDraftDataList); + importTaskService.markSuccess(taskId); return result ? ResponseResult.success("保存成功") : ResponseResult.error("保存失败"); } @@ -204,7 +246,7 @@ public class FishDraftDataController { @PostMapping("/submitDraftsAll") @Operation(summary = "批量提交当前用户全部草稿") public ResponseResult submitDraftsAll() { - List draft = fishDraftDataService.list(new LambdaQueryWrapper().eq(FishDraftData::getDeletedFlag, 0).eq(FishDraftData::getCreatedBy, SecurityUtils.getUserId()).in(FishDraftData::getStatus,"REJECTED", "DRAFT").select(FishDraftData::getId)); + List draft = fishDraftDataService.list(new LambdaQueryWrapper().eq(FishDraftData::getDeletedFlag, 0).eq(FishDraftData::getCreatedBy, SecurityUtils.getUserId()).in(FishDraftData::getStatus, "REJECTED", "DRAFT").select(FishDraftData::getId)); List ids = draft.stream().map(FishDraftData::getId).toList(); boolean result = fishDraftDataService.submitDrafts(ids); return result ? ResponseResult.success("提交成功") : ResponseResult.error("提交失败"); @@ -482,12 +524,13 @@ public class FishDraftDataController { writeErrorResponse(response, "预览失败: " + e.getMessage()); } } + @GetMapping("/deleteFile") @Operation(summary = "删除导入文件") public ResponseResult deleteFile(@RequestParam String taskId, - @RequestParam String id, - @RequestParam String type, - @RequestParam String filename) { + @RequestParam String id, + @RequestParam String type, + @RequestParam String filename) { if (taskId == null || taskId.isEmpty()) { return ResponseResult.error("任务ID不能为空"); } @@ -892,6 +935,57 @@ public class FishDraftDataController { } } + @PostMapping("/deleteRowById") + @Operation(summary = "删除数据") + public ResponseResult deleteRowById(@RequestBody FishImportRowRequest request) { + String taskId = request.getTaskId(); + FishDraftData data = request.getData(); + + if (taskId == null || taskId.isEmpty()) { + return ResponseResult.error("任务ID不能为空"); + } + if (data == null || data.getId() == null || data.getId().isEmpty()) { + return ResponseResult.error("数据对象或其ID不能为空"); + } + + try { + ImportTask task = importTaskService.getById(taskId); + if (task == null) { + return ResponseResult.error("任务不存在"); + } + + String resultJson = task.getResultJson(); + if (resultJson == null || resultJson.isEmpty()) { + return ResponseResult.error("任务结果为空"); + } + + FishImportResult importResult = objectMapper.readValue(resultJson, FishImportResult.class); + + FishImportResult.FishImportRow targetRow = null; + int targetIndex = -1; + for (int i = 0; i < importResult.getRows().size(); i++) { + FishImportResult.FishImportRow row = importResult.getRows().get(i); + if (row.getData() != null && data.getId().equals(row.getData().getId())) { + targetRow = row; + targetIndex = i; + break; + } + } + + if (targetIndex == -1) { + return ResponseResult.error("未找到对应的数据行"); + } + importResult.getRows().remove(targetIndex); + String updatedJson = objectMapper.writeValueAsString(importResult); + importTaskService.saveResultJson(taskId, updatedJson); + return ResponseResult.success(); + + } catch (Exception e) { + log.error("删除数据失败: " + e.getMessage(), e); + return ResponseResult.error("删除数据失败: " + e.getMessage()); + } + } + private void validateAndNormalizeData(FishDraftData data, FishImportResult.FishImportRow importRow, List warnings) { if (data.getStcd() == null || data.getStcd().isEmpty()) { diff --git a/backend/src/main/java/com/yfd/platform/data/domain/FishDraftData.java b/backend/src/main/java/com/yfd/platform/data/domain/FishDraftData.java index fe8ac15..4273248 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/FishDraftData.java +++ b/backend/src/main/java/com/yfd/platform/data/domain/FishDraftData.java @@ -156,6 +156,14 @@ public class FishDraftData implements Serializable { */ private Integer deletedFlag; + + /** + * 行号 + */ + private Integer rowIndex; + + + /** * 删除人 */ diff --git a/backend/src/main/java/com/yfd/platform/data/domain/vo/FishDraftDataVO.java b/backend/src/main/java/com/yfd/platform/data/domain/vo/FishDraftDataVO.java index 2037ca7..35fa621 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/vo/FishDraftDataVO.java +++ b/backend/src/main/java/com/yfd/platform/data/domain/vo/FishDraftDataVO.java @@ -216,7 +216,7 @@ public class FishDraftDataVO implements Serializable { /** * 排序字段 */ - private Integer orderIndex; + private Integer rowIndex; /** * 创建人名称 diff --git a/backend/src/main/java/com/yfd/platform/data/service/impl/FishDraftDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/data/service/impl/FishDraftDataServiceImpl.java index aeab231..c1d83a4 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/impl/FishDraftDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/data/service/impl/FishDraftDataServiceImpl.java @@ -18,9 +18,12 @@ import com.yfd.platform.data.service.IApprovalLogService; import com.yfd.platform.data.service.IApprovalMainService; import com.yfd.platform.data.service.IFishDraftDataService; import com.yfd.platform.env.domain.SdEngInfoBH; +import com.yfd.platform.env.domain.SdFpssR; import com.yfd.platform.env.domain.SdHbrvDic; import com.yfd.platform.env.mapper.SdEngInfoBHMapper; +import com.yfd.platform.env.mapper.SdFpssRMapper; import com.yfd.platform.env.mapper.SdHbrvDicMapper; +import com.yfd.platform.env.service.ISdFpssRService; import com.yfd.platform.system.domain.SysUser; import com.yfd.platform.system.mapper.SysUserMapper; import com.yfd.platform.utils.KendoUtil; @@ -28,6 +31,8 @@ import com.yfd.platform.utils.QgcQueryWrapperUtil; import com.yfd.platform.utils.SecurityUtils; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.executor.BatchResult; import org.springframework.security.core.GrantedAuthority; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -41,6 +46,7 @@ import java.util.*; *

*/ @Service +@Slf4j public class FishDraftDataServiceImpl extends ServiceImpl implements IFishDraftDataService { @Resource @@ -70,9 +76,17 @@ public class FishDraftDataServiceImpl extends ServiceImpl queryPageList(DataSourceRequest dataSourceRequest) { Page page = KendoUtil.getPage(dataSourceRequest); + page.setSize(dataSourceRequest.getTake()); + page.setCurrent(dataSourceRequest.getSkip()); DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); String stcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stcd"); String approvalId = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "approvalId"); @@ -397,6 +411,7 @@ public class FishDraftDataServiceImpl extends ServiceImpl dataList = this.listByIds(ids); Set processedApprovalIds = new HashSet<>(); List validIds = new ArrayList<>(); + List fpssRList = new ArrayList<>(); for (FishDraftData fishDraftData : dataList) { if ("PENDING".equals(fishDraftData.getStatus())) { @@ -404,6 +419,8 @@ public class FishDraftDataServiceImpl extends ServiceImpl - + @@ -123,7 +123,8 @@ E.RVCD, E.LGTD, E.LTTD, - E.ORDER_INDEX + E.ORDER_INDEX, + D.ROW_INDEX