fix: 优化过鱼逻辑

This commit is contained in:
tangwei 2026-05-07 14:09:09 +08:00
parent 5f04dae69c
commit b8d401f662
6 changed files with 185 additions and 16 deletions

View File

@ -30,6 +30,7 @@ import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -112,16 +113,57 @@ public class FishDraftDataController {
return result ? ResponseResult.success("保存成功") : ResponseResult.error("保存失败"); return result ? ResponseResult.success("保存成功") : ResponseResult.error("保存失败");
} }
// @PostMapping("/batchSaveDraft")
// @Operation(summary = "批量保存草稿")
// public ResponseResult saveDraft(@RequestBody List<FishDraftData> 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") @PostMapping("/batchSaveDraft")
@Operation(summary = "批量保存草稿") @Operation(summary = "批量保存草稿")
public ResponseResult saveDraft(@RequestBody List<FishDraftData> 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 -> { if (importResult == null || importResult.getRows() == null) {
fishDraftData.setStatus("DRAFT"); return ResponseResult.error("导入数据不存在");
fishDraftData.setDeletedFlag(0); }
fishDraftData.setLockFlag(0); Date date = new Date();
}); List<FishDraftData> 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); boolean result = fishDraftDataService.saveBatch(fishDraftDataList);
importTaskService.markSuccess(taskId);
return result ? ResponseResult.success("保存成功") : ResponseResult.error("保存失败"); return result ? ResponseResult.success("保存成功") : ResponseResult.error("保存失败");
} }
@ -482,6 +524,7 @@ public class FishDraftDataController {
writeErrorResponse(response, "预览失败: " + e.getMessage()); writeErrorResponse(response, "预览失败: " + e.getMessage());
} }
} }
@GetMapping("/deleteFile") @GetMapping("/deleteFile")
@Operation(summary = "删除导入文件") @Operation(summary = "删除导入文件")
public ResponseResult deleteFile(@RequestParam String taskId, public ResponseResult deleteFile(@RequestParam String taskId,
@ -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, private void validateAndNormalizeData(FishDraftData data, FishImportResult.FishImportRow importRow,
List<String> warnings) { List<String> warnings) {
if (data.getStcd() == null || data.getStcd().isEmpty()) { if (data.getStcd() == null || data.getStcd().isEmpty()) {

View File

@ -156,6 +156,14 @@ public class FishDraftData implements Serializable {
*/ */
private Integer deletedFlag; private Integer deletedFlag;
/**
* 行号
*/
private Integer rowIndex;
/** /**
* 删除人 * 删除人
*/ */

View File

@ -216,7 +216,7 @@ public class FishDraftDataVO implements Serializable {
/** /**
* 排序字段 * 排序字段
*/ */
private Integer orderIndex; private Integer rowIndex;
/** /**
* 创建人名称 * 创建人名称

View File

@ -18,9 +18,12 @@ import com.yfd.platform.data.service.IApprovalLogService;
import com.yfd.platform.data.service.IApprovalMainService; import com.yfd.platform.data.service.IApprovalMainService;
import com.yfd.platform.data.service.IFishDraftDataService; import com.yfd.platform.data.service.IFishDraftDataService;
import com.yfd.platform.env.domain.SdEngInfoBH; 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.domain.SdHbrvDic;
import com.yfd.platform.env.mapper.SdEngInfoBHMapper; 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.mapper.SdHbrvDicMapper;
import com.yfd.platform.env.service.ISdFpssRService;
import com.yfd.platform.system.domain.SysUser; import com.yfd.platform.system.domain.SysUser;
import com.yfd.platform.system.mapper.SysUserMapper; import com.yfd.platform.system.mapper.SysUserMapper;
import com.yfd.platform.utils.KendoUtil; import com.yfd.platform.utils.KendoUtil;
@ -28,6 +31,8 @@ import com.yfd.platform.utils.QgcQueryWrapperUtil;
import com.yfd.platform.utils.SecurityUtils; import com.yfd.platform.utils.SecurityUtils;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.executor.BatchResult;
import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.GrantedAuthority;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -41,6 +46,7 @@ import java.util.*;
* </p> * </p>
*/ */
@Service @Service
@Slf4j
public class FishDraftDataServiceImpl extends ServiceImpl<FishDraftDataMapper, FishDraftData> implements IFishDraftDataService { public class FishDraftDataServiceImpl extends ServiceImpl<FishDraftDataMapper, FishDraftData> implements IFishDraftDataService {
@Resource @Resource
@ -70,9 +76,17 @@ public class FishDraftDataServiceImpl extends ServiceImpl<FishDraftDataMapper, F
@Resource @Resource
private SdHbrvDicMapper hbrvDicMapper; private SdHbrvDicMapper hbrvDicMapper;
@Resource
private SdFpssRMapper sdFpssRMapper;
@Resource
private ISdFpssRService sdFpssRService;
@Override @Override
public Page<FishDraftDataVO> queryPageList(DataSourceRequest dataSourceRequest) { public Page<FishDraftDataVO> queryPageList(DataSourceRequest dataSourceRequest) {
Page<FishDraftDataVO> page = KendoUtil.getPage(dataSourceRequest); Page<FishDraftDataVO> page = KendoUtil.getPage(dataSourceRequest);
page.setSize(dataSourceRequest.getTake());
page.setCurrent(dataSourceRequest.getSkip());
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
String stcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stcd"); String stcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stcd");
String approvalId = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "approvalId"); String approvalId = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "approvalId");
@ -397,6 +411,7 @@ public class FishDraftDataServiceImpl extends ServiceImpl<FishDraftDataMapper, F
List<FishDraftData> dataList = this.listByIds(ids); List<FishDraftData> dataList = this.listByIds(ids);
Set<String> processedApprovalIds = new HashSet<>(); Set<String> processedApprovalIds = new HashSet<>();
List<String> validIds = new ArrayList<>(); List<String> validIds = new ArrayList<>();
List<SdFpssR> fpssRList = new ArrayList<>();
for (FishDraftData fishDraftData : dataList) { for (FishDraftData fishDraftData : dataList) {
if ("PENDING".equals(fishDraftData.getStatus())) { if ("PENDING".equals(fishDraftData.getStatus())) {
@ -404,6 +419,8 @@ public class FishDraftDataServiceImpl extends ServiceImpl<FishDraftDataMapper, F
if (fishDraftData.getApprovalId() != null) { if (fishDraftData.getApprovalId() != null) {
processedApprovalIds.add(fishDraftData.getApprovalId()); processedApprovalIds.add(fishDraftData.getApprovalId());
} }
SdFpssR fpssR = convertToSdFpssR(fishDraftData, operatorId);
fpssRList.add(fpssR);
} }
} }
@ -414,6 +431,8 @@ public class FishDraftDataServiceImpl extends ServiceImpl<FishDraftDataMapper, F
updateWrapper.set(FishDraftData::getApproveTime, now); updateWrapper.set(FishDraftData::getApproveTime, now);
updateWrapper.set(FishDraftData::getUpdatedBy, operatorId); updateWrapper.set(FishDraftData::getUpdatedBy, operatorId);
this.update(updateWrapper); this.update(updateWrapper);
boolean b = sdFpssRService.saveOrUpdateBatch(fpssRList);
log.info("=======================插入数据条数======================="+fpssRList.size());
for (String approvalId : processedApprovalIds) { for (String approvalId : processedApprovalIds) {
ApprovalMain approvalMain = approvalMainService.getById(approvalId); ApprovalMain approvalMain = approvalMainService.getById(approvalId);
approvalLogService.logApprove(approvalId, SecurityUtils.getUserId(), approveComment); approvalLogService.logApprove(approvalId, SecurityUtils.getUserId(), approveComment);
@ -430,6 +449,47 @@ public class FishDraftDataServiceImpl extends ServiceImpl<FishDraftDataMapper, F
return true; return true;
} }
private SdFpssR convertToSdFpssR(FishDraftData draft, String operatorId) {
SdFpssR fpssR = new SdFpssR();
fpssR.setId(draft.getId());
fpssR.setStcd(draft.getStcd());
fpssR.setTm(draft.getTm());
fpssR.setFtp(draft.getFtp());
fpssR.setFsz(draft.getFsz());
fpssR.setIsfs(draft.getIsfs());
fpssR.setFcnt(draft.getFcnt());
fpssR.setFwet(draft.getFwet());
fpssR.setStrdt(draft.getStrdt());
fpssR.setEnddt(draft.getEnddt());
fpssR.setDirection(convertDirection(draft.getDirection()));
fpssR.setYr(draft.getYr());
fpssR.setMouth(draft.getMouth() != null ? String.valueOf(draft.getMouth()) : null);
fpssR.setVdpth(draft.getVdpth());
fpssR.setPicpth(draft.getPicpth());
fpssR.setRecordUser(operatorId);
fpssR.setRecordTime(new Date());
fpssR.setIsDeleted(0);
return fpssR;
}
private Integer convertDirection(String direction) {
if (direction == null) {
return null;
}
switch (direction.trim()) {
case "上行", "0":
return 0;
case "下行", "1":
return 1;
case "上行折返", "2":
return 2;
case "下行折返", "3":
return 3;
default:
return null;
}
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean batchReject(String id, String rejectReason) { public boolean batchReject(String id, String rejectReason) {

View File

@ -84,12 +84,12 @@ public class SdFpssR implements Serializable {
/** /**
* 过鱼图片文件路径 * 过鱼图片文件路径
*/ */
private String imgpath; private String picpth;
/** /**
* 过鱼视频文件路径 * 过鱼视频文件路径
*/ */
private String vdpath; private String vdpth;
/** /**
* 年份数据时间精确到年 * 年份数据时间精确到年
@ -135,4 +135,10 @@ public class SdFpssR implements Serializable {
* 删除时间 * 删除时间
*/ */
private Date deleteTime; private Date deleteTime;
/**
* 是否鱼苗0否 1是
*/
private Integer isfs;
} }

View File

@ -78,7 +78,7 @@
<result column="RVCD" property="rvcd"/> <result column="RVCD" property="rvcd"/>
<result column="LGTD" property="lgtd"/> <result column="LGTD" property="lgtd"/>
<result column="LTTD" property="lttd"/> <result column="LTTD" property="lttd"/>
<result column="ORDER_INDEX" property="orderIndex"/> <result column="ROW_INDEX" property="rowIndex"/>
</resultMap> </resultMap>
<sql id="joinColumns"> <sql id="joinColumns">
@ -123,7 +123,8 @@
E.RVCD, E.RVCD,
E.LGTD, E.LGTD,
E.LTTD, E.LTTD,
E.ORDER_INDEX E.ORDER_INDEX,
D.ROW_INDEX
</sql> </sql>
<select id="selectJoinPage" resultMap="JoinResultMap"> <select id="selectJoinPage" resultMap="JoinResultMap">
@ -169,7 +170,7 @@
<if test="endTime != null and endTime != ''"> <if test="endTime != null and endTime != ''">
AND D.STRDT &lt;= TO_DATE(#{endTime}, 'yyyy-mm-dd hh24:mi:ss') AND D.STRDT &lt;= TO_DATE(#{endTime}, 'yyyy-mm-dd hh24:mi:ss')
</if> </if>
ORDER BY D.CREATED_AT DESC ORDER BY D.TM DESC, D.ROW_INDEX ASC
</select> </select>
<select id="selectJoinList" resultMap="JoinResultMap"> <select id="selectJoinList" resultMap="JoinResultMap">