fix(sg-accident): 修复安全事故时间格式及优化推送附件逻辑
parent
8f3715cb2c
commit
9efed45e3b
|
|
@ -43,6 +43,10 @@ public class SgAccidentAddExe {
|
|||
@Transactional(rollbackFor = Exception.class)
|
||||
public boolean execute(SgAccidentAddCmd cmd) {
|
||||
SgAccidentE sgAccidentE = new SgAccidentE();
|
||||
//如果cmd.getaccidentTime 是年月日的话,需要加上时分秒
|
||||
if (cmd.getAccidentTime().length() == 10) {
|
||||
cmd.setAccidentTime(cmd.getAccidentTime() + " 00:00:00");
|
||||
}
|
||||
BeanUtils.copyProperties(cmd, sgAccidentE);
|
||||
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -68,7 +68,8 @@ public class SgReferenceAddExe {
|
|||
throw new BizException("新增互学互鉴后未查询到数据");
|
||||
}
|
||||
|
||||
sgReferencePushSupport.pushReference(latestReference, PushOperationTypeEnum.ADD);
|
||||
// 新增时直接使用本次请求附件推送,避免依赖先落库再按外键反查附件。
|
||||
sgReferencePushSupport.pushReference(latestReference, PushOperationTypeEnum.ADD, cmd.getFiles());
|
||||
log.info("互学互鉴新增完成,本地主键:{},附件数量:{}", sgReferenceE.getId(), cmd.getFiles() == null ? 0 : cmd.getFiles().length);
|
||||
return true;
|
||||
} catch (BizException e) {
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ public class SgReferencePushSupport {
|
|||
private final ImgFilesRepository imgFilesRepository;
|
||||
|
||||
/**
|
||||
* 互学互鉴推送统一从附件表读取文件信息,避免业务表继续维护冗余附件字段。
|
||||
* 默认从附件表回读附件后推送,适用于需要基于已落库附件推送的场景。
|
||||
*/
|
||||
public void pushReference(SgReferenceDO sgReferenceDO, PushOperationTypeEnum operationType) {
|
||||
if (sgReferenceDO == null || sgReferenceDO.getId() == null) {
|
||||
|
|
@ -58,10 +58,48 @@ public class SgReferencePushSupport {
|
|||
}
|
||||
|
||||
try {
|
||||
String token = resolveToken();
|
||||
List<ImgFilesDO> imgFilesDOList = imgFilesRepository.listByForeignKey(String.valueOf(sgReferenceDO.getId()));
|
||||
Map<String, Object> requestData = buildRequestData(sgReferenceDO, operationType, imgFilesDOList);
|
||||
List<ImgFilesDO> imgFilesDOList = imgFilesRepository.listByForeignKey(sgReferenceDO.getReferenceId());
|
||||
MultipartFile[] pushFiles = buildPushFiles(imgFilesDOList);
|
||||
Map<String, Object> requestData = buildRequestData(sgReferenceDO, operationType, resolveFileNames(imgFilesDOList));
|
||||
doPush(sgReferenceDO, operationType, requestData, pushFiles);
|
||||
} catch (BizException e) {
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
log.error("推送互学互鉴到数港失败,操作类型:{}-{},本地主键:{}",
|
||||
operationType.getCode(), operationType.getValue(), sgReferenceDO.getId(), e);
|
||||
throw new BizException("推送数港失败");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 直接使用本次请求收到的附件进行推送。
|
||||
* 适用于新增,或修改时前端明确上传了新附件的场景。
|
||||
* 当 files 为空时,只推送主数据,不给三方传附件。
|
||||
*/
|
||||
public void pushReference(SgReferenceDO sgReferenceDO, PushOperationTypeEnum operationType, MultipartFile[] files) {
|
||||
if (sgReferenceDO == null || sgReferenceDO.getId() == null) {
|
||||
throw new BizException("互学互鉴数据不存在,无法推送数港");
|
||||
}
|
||||
if (operationType == null) {
|
||||
throw new BizException("互学互鉴推送操作类型不能为空");
|
||||
}
|
||||
|
||||
try {
|
||||
MultipartFile[] pushFiles = sanitizeFiles(files);
|
||||
Map<String, Object> requestData = buildRequestData(sgReferenceDO, operationType, resolveFileNames(pushFiles));
|
||||
doPush(sgReferenceDO, operationType, requestData, pushFiles);
|
||||
} catch (BizException e) {
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
log.error("推送互学互鉴到数港失败,操作类型:{}-{},本地主键:{}",
|
||||
operationType.getCode(), operationType.getValue(), sgReferenceDO.getId(), e);
|
||||
throw new BizException("推送数港失败");
|
||||
}
|
||||
}
|
||||
|
||||
private void doPush(SgReferenceDO sgReferenceDO, PushOperationTypeEnum operationType,
|
||||
Map<String, Object> requestData, MultipartFile[] pushFiles) throws Exception {
|
||||
String token = resolveToken();
|
||||
log.info("开始推送互学互鉴到数港,操作类型:{}-{},来源:{}-{},本地主键:{},附件数量:{},请求数据:{}",
|
||||
operationType.getCode(), operationType.getValue(), DEFAULT_SOURCE.getCode(), DEFAULT_SOURCE.getValue(),
|
||||
sgReferenceDO.getId(), pushFiles.length, requestData);
|
||||
|
|
@ -71,16 +109,8 @@ public class SgReferencePushSupport {
|
|||
} else {
|
||||
TokenUtils.sendDataToThirdParty(sgProperties.getReferenceUrl(), requestData, token, pushFiles);
|
||||
}
|
||||
// TokenUtils.sendDataToThirdPartyTwo(sgProperties.getReferenceUrl(), requestData, token, pushFiles);
|
||||
log.info("推送互学互鉴到数港成功,操作类型:{}-{},本地主键:{}",
|
||||
operationType.getCode(), operationType.getValue(), sgReferenceDO.getId());
|
||||
} catch (BizException e) {
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
log.error("推送互学互鉴到数港失败,操作类型:{}-{},本地主键:{}",
|
||||
operationType.getCode(), operationType.getValue(), sgReferenceDO.getId(), e);
|
||||
throw new BizException("推送数港失败");
|
||||
}
|
||||
}
|
||||
|
||||
private String resolveToken() throws Exception {
|
||||
|
|
@ -96,13 +126,13 @@ public class SgReferencePushSupport {
|
|||
return token;
|
||||
}
|
||||
|
||||
private Map<String, Object> buildRequestData(SgReferenceDO sgReferenceDO, PushOperationTypeEnum operationType, List<ImgFilesDO> imgFilesDOList) {
|
||||
private Map<String, Object> buildRequestData(SgReferenceDO sgReferenceDO, PushOperationTypeEnum operationType, String fileNames) {
|
||||
Map<String, Object> requestData = new HashMap<>();
|
||||
requestData.put("operationType", operationType.getCode());
|
||||
requestData.put("accidentId", sgReferenceDO.getId());
|
||||
requestData.put("title", defaultString(sgReferenceDO.getTitle()));
|
||||
requestData.put("source", DEFAULT_SOURCE.getCode());
|
||||
requestData.put("fileName", resolveFileNames(imgFilesDOList));
|
||||
requestData.put("fileName", fileNames);
|
||||
requestData.put("createBy", resolveCreateBy(sgReferenceDO));
|
||||
requestData.put("createTime", formatDateTime(sgReferenceDO.getCreateTime()));
|
||||
return requestData;
|
||||
|
|
@ -124,6 +154,19 @@ public class SgReferencePushSupport {
|
|||
return multipartFileList.toArray(new MultipartFile[0]);
|
||||
}
|
||||
|
||||
private MultipartFile[] sanitizeFiles(MultipartFile[] files) {
|
||||
if (files == null || files.length == 0) {
|
||||
return new MultipartFile[0];
|
||||
}
|
||||
List<MultipartFile> result = new ArrayList<>();
|
||||
for (MultipartFile file : files) {
|
||||
if (file != null && !file.isEmpty()) {
|
||||
result.add(file);
|
||||
}
|
||||
}
|
||||
return result.toArray(new MultipartFile[0]);
|
||||
}
|
||||
|
||||
private byte[] readFileBytes(String filePath) throws IOException {
|
||||
try {
|
||||
Path localPath = Paths.get(filePath);
|
||||
|
|
@ -152,6 +195,19 @@ public class SgReferencePushSupport {
|
|||
.collect(Collectors.joining(","));
|
||||
}
|
||||
|
||||
private String resolveFileNames(MultipartFile[] files) {
|
||||
if (files == null || files.length == 0) {
|
||||
return "";
|
||||
}
|
||||
List<String> fileNames = new ArrayList<>();
|
||||
for (MultipartFile file : files) {
|
||||
if (file != null && !file.isEmpty() && StringUtils.hasText(file.getOriginalFilename())) {
|
||||
fileNames.add(file.getOriginalFilename());
|
||||
}
|
||||
}
|
||||
return String.join(",", fileNames);
|
||||
}
|
||||
|
||||
private String resolveCreateBy(SgReferenceDO sgReferenceDO) {
|
||||
if (StringUtils.hasText(sgReferenceDO.getCreateName())) {
|
||||
return sgReferenceDO.getCreateName();
|
||||
|
|
|
|||
|
|
@ -36,8 +36,8 @@ public class SgReferenceRemoveExe {
|
|||
throw new BizException("删除失败");
|
||||
}
|
||||
|
||||
// 删除推送也要带上当前附件,因此先推送,再删除附件表数据。
|
||||
sgReferencePushSupport.pushReference(sgReferenceDO, PushOperationTypeEnum.DELETE);
|
||||
// 删除只推送业务数据,不再给三方传附件。
|
||||
sgReferencePushSupport.pushReference(sgReferenceDO, PushOperationTypeEnum.DELETE, null);
|
||||
imgFilesRepository.deletedImgFilesByForeignId(String.valueOf(id));
|
||||
log.info("互学互鉴删除完成,本地主键:{}", id);
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -62,7 +62,12 @@ public class SgReferenceUpdateExe {
|
|||
throw new BizException("修改后未查询到互学互鉴数据");
|
||||
}
|
||||
|
||||
sgReferencePushSupport.pushReference(latestReference, PushOperationTypeEnum.UPDATE);
|
||||
// 修改时如果前端没传新附件,则不改附件,也不给三方传附件;有新附件时直接用本次附件推送。
|
||||
if (cmd.getFiles() != null && cmd.getFiles().length > 0) {
|
||||
sgReferencePushSupport.pushReference(latestReference, PushOperationTypeEnum.UPDATE, cmd.getFiles());
|
||||
} else {
|
||||
sgReferencePushSupport.pushReference(latestReference, PushOperationTypeEnum.UPDATE, null);
|
||||
}
|
||||
log.info("互学互鉴修改完成,本地主键:{},附件数量:{}", cmd.getId(), cmd.getFiles() == null ? 0 : cmd.getFiles().length);
|
||||
} catch (BizException e) {
|
||||
log.error("修改互学互鉴失败,主键:{},原因:{}", cmd.getId(), e.getMessage(), e);
|
||||
|
|
|
|||
|
|
@ -138,6 +138,7 @@ public class TokenUtils {
|
|||
// 使用RestTemplate发送请求
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(body, headers);
|
||||
log.info("发送到第三方接口的url: " + url + path);
|
||||
|
||||
ResponseEntity<String> response = restTemplate.postForEntity(url + path, request, String.class);
|
||||
log.info("发送到第三方接口的响应结果: {}", response.getBody());
|
||||
|
|
|
|||
Loading…
Reference in New Issue