From c4c5d2658c917824e9784d6c7d4206827cbb4de4 Mon Sep 17 00:00:00 2001 From: lml <1297555865@qq.com> Date: Mon, 19 Oct 2026 16:57:22 +0800 Subject: [PATCH] =?UTF-8?q?fix(botp):=20=E4=BF=AE=E5=A4=8D=E5=8F=8D?= =?UTF-8?q?=E5=86=99=E8=A7=84=E5=88=99=E4=BF=9D=E5=AD=98=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E7=9A=84=E6=A0=A1=E9=AA=8C=E8=BF=94=E5=9B=9E=E3=80=81=E5=AD=90?= =?UTF-8?q?=E8=A1=A8=E7=A9=BA=E6=8C=87=E9=92=88=E4=B8=8E=E5=AE=A1=E8=AE=A1?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - addAll/removeAllById 的参数校验分支补上 return,避免校验失败后继续执行并抛空指针 - 公式分录、业务规则分录改为 ObjectUtil.isNotEmpty 判空,前端不传子表时不再 NPE - 更新分支由 removeById + save 改为 getById + updateById 就地更新,保留原 create_user_id/create_time,仅刷新 update_time,避免审计字段丢失 - 新增分支内单独设置 create_time,避免更新时覆盖创建时间 - addAll/removeAllById 增加 @Transactional(rollbackFor = Exception.class) --- .../controller/ReverseWritingRulesController.java | 41 ++++++++++++++-------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/common/common-botp/src/main/java/apelet/common/botp/controller/ReverseWritingRulesController.java b/common/common-botp/src/main/java/apelet/common/botp/controller/ReverseWritingRulesController.java index 8203af4..103c8aa 100644 --- a/common/common-botp/src/main/java/apelet/common/botp/controller/ReverseWritingRulesController.java +++ b/common/common-botp/src/main/java/apelet/common/botp/controller/ReverseWritingRulesController.java @@ -24,6 +24,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import java.util.*; @@ -87,35 +88,44 @@ public class ReverseWritingRulesController { @PostMapping(value = "/saveOrUpdate") @Schema(description = "添加主数据和分录数据") + @Transactional(rollbackFor = Exception.class) public ResponseResult addAll(@RequestBody ReverseWritingRulesDto dto) { if (dto == null) { - ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED); + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED); } ReverseWritingRules reverseWritingRules = new ReverseWritingRules(); - reverseWritingRules.setCreateTime(new Date()); - BeanUtils.copyProperties(dto, reverseWritingRules); if (reverseWritingRules.getId() != null) { - rulesService.removeById(reverseWritingRules.getId()); + // 更新走按主键就地更新,避免删除重建导致创建人等审计字段丢失 + ReverseWritingRules original = rulesService.getById(reverseWritingRules.getId()); + if (original != null) { + reverseWritingRules.setCreateUserId(original.getCreateUserId()); + reverseWritingRules.setCreateTime(original.getCreateTime()); + } + reverseWritingRules.setUpdateTime(new Date()); + if (!rulesService.updateById(reverseWritingRules)) { + throw new MyRuntimeException("反写规则配置数据保存失败!"); + } + // 分录按规则id全量覆盖 formulaService.remove(new LambdaQueryWrapper().eq(ReverseWritingFormula::getRulesId, reverseWritingRules.getId())); businessService.remove(new LambdaQueryWrapper().eq(ReverseWritingBusiness::getRulesId, reverseWritingRules.getId())); - }else{ - reverseWritingRules.setId(dto.getId()); - } - boolean save = rulesService.save(reverseWritingRules); - if (!save) { - throw new MyRuntimeException("反写规则配置数据保存失败!"); + } else { + reverseWritingRules.setCreateTime(new Date()); + boolean save = rulesService.save(reverseWritingRules); + if (!save) { + throw new MyRuntimeException("反写规则配置数据保存失败!"); + } } //反写公式 List formulaList = dto.getFormulaList(); - formulaList.forEach(f -> f.setRulesId(reverseWritingRules.getId())); - if (!formulaList.isEmpty()) { + if (ObjectUtil.isNotEmpty(formulaList)) { + formulaList.forEach(f -> f.setRulesId(reverseWritingRules.getId())); formulaService.saveBatch(formulaList); } // 业务规则 List businessList = dto.getBusinessList(); - businessList.forEach(f -> f.setRulesId(reverseWritingRules.getId())); - if (!businessList.isEmpty()) { + if (ObjectUtil.isNotEmpty(businessList)) { + businessList.forEach(f -> f.setRulesId(reverseWritingRules.getId())); businessService.saveBatch(businessList); } return ResponseResult.success("保存成功"); @@ -123,9 +133,10 @@ public class ReverseWritingRulesController { @PostMapping(value = "/removeAllById") @Schema(description = "删除") + @Transactional(rollbackFor = Exception.class) public ResponseResult removeAllById(@MyRequestBody Long id) { if (ObjectUtil.isEmpty(id)) { - ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED); + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED); } rulesService.removeById(id); formulaService.remove(new LambdaQueryWrapper().eq(ReverseWritingFormula::getRulesId, id));