Browse Source

fix(botp): 修复反写规则保存接口的校验返回、子表空指针与审计字段丢失

- 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)
dev-lml
lml 2 weeks ago
parent
commit
c4c5d2658c
  1. 29
      common/common-botp/src/main/java/apelet/common/botp/controller/ReverseWritingRulesController.java

29
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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.*; import java.util.*;
@ -87,35 +88,44 @@ public class ReverseWritingRulesController {
@PostMapping(value = "/saveOrUpdate") @PostMapping(value = "/saveOrUpdate")
@Schema(description = "添加主数据和分录数据") @Schema(description = "添加主数据和分录数据")
@Transactional(rollbackFor = Exception.class)
public ResponseResult<?> addAll(@RequestBody ReverseWritingRulesDto dto) { public ResponseResult<?> addAll(@RequestBody ReverseWritingRulesDto dto) {
if (dto == null) { if (dto == null) {
ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED); return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED);
} }
ReverseWritingRules reverseWritingRules = new ReverseWritingRules(); ReverseWritingRules reverseWritingRules = new ReverseWritingRules();
reverseWritingRules.setCreateTime(new Date());
BeanUtils.copyProperties(dto, reverseWritingRules); BeanUtils.copyProperties(dto, reverseWritingRules);
if (reverseWritingRules.getId() != null) { 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<ReverseWritingFormula>().eq(ReverseWritingFormula::getRulesId, reverseWritingRules.getId())); formulaService.remove(new LambdaQueryWrapper<ReverseWritingFormula>().eq(ReverseWritingFormula::getRulesId, reverseWritingRules.getId()));
businessService.remove(new LambdaQueryWrapper<ReverseWritingBusiness>().eq(ReverseWritingBusiness::getRulesId, reverseWritingRules.getId())); businessService.remove(new LambdaQueryWrapper<ReverseWritingBusiness>().eq(ReverseWritingBusiness::getRulesId, reverseWritingRules.getId()));
} else { } else {
reverseWritingRules.setId(dto.getId()); reverseWritingRules.setCreateTime(new Date());
}
boolean save = rulesService.save(reverseWritingRules); boolean save = rulesService.save(reverseWritingRules);
if (!save) { if (!save) {
throw new MyRuntimeException("反写规则配置数据保存失败!"); throw new MyRuntimeException("反写规则配置数据保存失败!");
} }
}
//反写公式 //反写公式
List<ReverseWritingFormula> formulaList = dto.getFormulaList(); List<ReverseWritingFormula> formulaList = dto.getFormulaList();
if (ObjectUtil.isNotEmpty(formulaList)) {
formulaList.forEach(f -> f.setRulesId(reverseWritingRules.getId())); formulaList.forEach(f -> f.setRulesId(reverseWritingRules.getId()));
if (!formulaList.isEmpty()) {
formulaService.saveBatch(formulaList); formulaService.saveBatch(formulaList);
} }
// 业务规则 // 业务规则
List<ReverseWritingBusiness> businessList = dto.getBusinessList(); List<ReverseWritingBusiness> businessList = dto.getBusinessList();
if (ObjectUtil.isNotEmpty(businessList)) {
businessList.forEach(f -> f.setRulesId(reverseWritingRules.getId())); businessList.forEach(f -> f.setRulesId(reverseWritingRules.getId()));
if (!businessList.isEmpty()) {
businessService.saveBatch(businessList); businessService.saveBatch(businessList);
} }
return ResponseResult.success("保存成功"); return ResponseResult.success("保存成功");
@ -123,9 +133,10 @@ public class ReverseWritingRulesController {
@PostMapping(value = "/removeAllById") @PostMapping(value = "/removeAllById")
@Schema(description = "删除") @Schema(description = "删除")
@Transactional(rollbackFor = Exception.class)
public ResponseResult<?> removeAllById(@MyRequestBody Long id) { public ResponseResult<?> removeAllById(@MyRequestBody Long id) {
if (ObjectUtil.isEmpty(id)) { if (ObjectUtil.isEmpty(id)) {
ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED); return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED);
} }
rulesService.removeById(id); rulesService.removeById(id);
formulaService.remove(new LambdaQueryWrapper<ReverseWritingFormula>().eq(ReverseWritingFormula::getRulesId, id)); formulaService.remove(new LambdaQueryWrapper<ReverseWritingFormula>().eq(ReverseWritingFormula::getRulesId, id));

Loading…
Cancel
Save