diff --git a/src/main/java/com/biutag/supervision/controller/data/DataAuditController.java b/src/main/java/com/biutag/supervision/controller/data/DataAuditController.java new file mode 100644 index 0000000..8301323 --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/data/DataAuditController.java @@ -0,0 +1,101 @@ +package com.biutag.supervision.controller.data; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.read.listener.ReadListener; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.dto.dataAudit.DataAuditImportDto; +import com.biutag.supervision.pojo.dto.dataAudit.DataAuditPageDTO; +import com.biutag.supervision.pojo.request.dataAudit.DataAuditAddRequest; +import com.biutag.supervision.pojo.request.dataAudit.DataAuditDelRequest; +import com.biutag.supervision.pojo.request.dataAudit.DataAuditPageRequest; +import com.biutag.supervision.pojo.request.dataAudit.DataAuditUpdateRequest; +import com.biutag.supervision.service.dataAudit.DataAuditService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.ConstraintViolation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +@Tag(name = "审计记录控制层", description = "审计记录管理") +@Slf4j +@RequestMapping("data/dataAudit") +@RequiredArgsConstructor +@RestController +public class DataAuditController { + + private final DataAuditService dataAuditService; + + @Operation(description = "分页查询") + @PostMapping("/getPage") + public Result> getPage(@RequestBody DataAuditPageRequest request) { + return dataAuditService.getDataAuditPage(request); + } + + @Operation(description = "添加") + @PostMapping("/add") + public Result add(@RequestBody DataAuditAddRequest request) { + return dataAuditService.addDataAudit(request); + } + + @Operation(description = "修改") + @PostMapping("/update") + public Result update(@RequestBody DataAuditUpdateRequest request) { + return dataAuditService.updateDataAudit(request); + } + + @Operation(description = "删除") + @PostMapping("/delete") + public Result delete(@RequestBody DataAuditDelRequest request) { + return dataAuditService.delDataAudit(request); + } + + + @Operation(description = "下载导入模板") + @GetMapping("/downloadTemplate") + public void downloadTemplate(HttpServletResponse response) throws IOException { + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + String fileName = URLEncoder.encode("审计数据导入模板", StandardCharsets.UTF_8).replaceAll("\\+", "%20"); + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + + List dataList = new ArrayList<>(); + DataAuditImportDto example = new DataAuditImportDto(); + example.setAuditType("执法活动财物审计"); + example.setProjectName("示例项目名称"); + example.setSecondLevelDeptName("示例二级单位"); + example.setThirdLevelDeptName("示例三级单位"); + example.setAuditAmount(null); + example.setIssueAmount(null); + dataList.add(example); + + EasyExcel.write(response.getOutputStream(), DataAuditImportDto.class) + .sheet("审计数据") + .doWrite(dataList); + } + + @Operation(description = "导入数据") + @PostMapping("/import") + public Result importExcel(@RequestPart("file") MultipartFile file) throws IOException { + log.info("审计数据导入中------------------------------"); + String fileNameType = FileUtil.extName(file.getOriginalFilename()); + if (!"xls".equals(fileNameType) && !"xlsx".equals(fileNameType)) { + throw new RuntimeException("仅支持 xls/xlsx 格式文件的导入"); + } + int count = dataAuditService.importData(file.getInputStream()); + return Result.success(count); + } +} diff --git a/src/main/java/com/biutag/supervision/mapper/DataAuditMapper.java b/src/main/java/com/biutag/supervision/mapper/DataAuditMapper.java new file mode 100644 index 0000000..832f508 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/DataAuditMapper.java @@ -0,0 +1,11 @@ +package com.biutag.supervision.mapper; + +import com.biutag.supervision.pojo.entity.DataAudit; +import com.biutag.supervision.repository.base.HBaseMapper; + +import java.util.List; + +public interface DataAuditMapper extends HBaseMapper { + + int insertBatch(List list); +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/dataAudit/DataAuditImportDto.java b/src/main/java/com/biutag/supervision/pojo/dto/dataAudit/DataAuditImportDto.java new file mode 100644 index 0000000..8e4e4b5 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/dataAudit/DataAuditImportDto.java @@ -0,0 +1,53 @@ +package com.biutag.supervision.pojo.dto.dataAudit; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Schema(description = "审计数据导入DTO") +@Setter +@Getter +public class DataAuditImportDto { + + @ExcelProperty("审计类型") + @NotBlank(message = "审计类型不能为空") + private String auditType; + + @ExcelProperty("项目名称") + @NotBlank(message = "项目名称不能为空") + private String projectName; + + @ExcelProperty("涉及二级单位") + @NotBlank(message = "涉及二级单位不能为空") + private String secondLevelDeptName; + + @ExcelIgnore + private Long secondLevelDeptId; + + @ExcelProperty("涉及三级单位") + private String thirdLevelDeptName; + + @ExcelIgnore + private Long thirdLevelDeptId; + + @ExcelProperty("审计时间") + @NotNull(message = "审计时间不能为空") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime auditTime; + + @ExcelProperty("审计涉及金额(万元)") + @NotNull(message = "审计涉及金额不能为空") + private BigDecimal auditAmount; + + @ExcelProperty("问题金额(万元)") + private BigDecimal issueAmount; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/dataAudit/DataAuditPageDTO.java b/src/main/java/com/biutag/supervision/pojo/dto/dataAudit/DataAuditPageDTO.java new file mode 100644 index 0000000..efc0f5b --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/dataAudit/DataAuditPageDTO.java @@ -0,0 +1,56 @@ +package com.biutag.supervision.pojo.dto.dataAudit; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Getter +@Setter +@Schema(description = "审计记录分页DTO") +public class DataAuditPageDTO { + + @Schema(description = "主键ID") + private Long id; + + @Schema(description = "审计类型") + private String auditType; + + @Schema(description = "项目名称") + private String projectName; + + @Schema(description = "涉及二级单位ID") + private Long secondLevelDeptId; + + @Schema(description = "涉及二级单位名称") + private String secondLevelDeptName; + + @Schema(description = "涉及三级单位ID") + private Long thirdLevelDeptId; + + @Schema(description = "涉及三级单位名称") + private String thirdLevelDeptName; + + @Schema(description = "审计时间") + private LocalDateTime auditTime; + + @Schema(description = "审计涉及的总金额") + private BigDecimal auditAmount; + + @Schema(description = "发现的问题金额") + private BigDecimal issueAmount; + + @Schema(description = "创建人") + private String createBy; + + @Schema(description = "创建时间") + private LocalDateTime createTime; + + @Schema(description = "更新人") + private String updateBy; + + @Schema(description = "更新时间") + private LocalDateTime updateTime; +} diff --git a/src/main/java/com/biutag/supervision/pojo/entity/DataAudit.java b/src/main/java/com/biutag/supervision/pojo/entity/DataAudit.java new file mode 100644 index 0000000..e29c697 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/DataAudit.java @@ -0,0 +1,92 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Getter +@Setter +@Schema(description = "审计记录表") +@TableName("data_audit") +public class DataAudit { + + @Schema(description = "主键ID,自增长") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @Schema(description = "审计类型(如财务审计、合规审计等)") + @TableField("audit_type") + private String auditType; + + @Schema(description = "被审计的项目名称") + @TableField("project_name") + private String projectName; + + @Schema(description = "涉及二级单位ID(可为空)") + @TableField("second_level_dept_id") + private Long secondLevelDeptId; + + @Schema(description = "涉及二级单位名称") + @TableField("second_level_dept_name") + private String secondLevelDeptName; + + @Schema(description = "涉及三级单位ID(可为空)") + @TableField("third_level_dept_id") + private Long thirdLevelDeptId; + + @Schema(description = "涉及三级单位名称") + @TableField("third_level_dept_name") + private String thirdLevelDeptName; + + @Schema(description = "审计时间,精确到秒") + @TableField("audit_time") + private LocalDateTime auditTime; + + @Schema(description = "审计涉及的总金额") + @TableField("audit_amount") + private BigDecimal auditAmount; + + @Schema(description = "发现的问题金额,默认为0") + @TableField("issue_amount") + private BigDecimal issueAmount; + + @Schema(description = "最后更新记录的用户") + @TableField("update_by") + private String updateBy; + + @Schema(description = "最后更新时间") + @TableField("update_time") + private LocalDateTime updateTime; + + @Schema(description = "创建记录的用户") + @TableField("create_by") + private String createBy; + + @Schema(description = "创建时间,默认当前时间") + @TableField("create_time") + private LocalDateTime createTime; + + @Schema(description = "保留字段1") + @TableField("gwf1") + private String gwf1; + + @Schema(description = "保留字段2") + @TableField("gwf2") + private String gwf2; + + @Schema(description = "保留字段3") + @TableField("gwf3") + private String gwf3; + + @Schema(description = "保留字段4") + @TableField("gwf4") + private String gwf4; + + @Schema(description = "保留字段5") + @TableField("gwf5") + private String gwf5; +} diff --git a/src/main/java/com/biutag/supervision/pojo/param/dataAudit/DataAuditQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/dataAudit/DataAuditQueryParam.java new file mode 100644 index 0000000..cb88b81 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/param/dataAudit/DataAuditQueryParam.java @@ -0,0 +1,24 @@ +package com.biutag.supervision.pojo.param.dataAudit; + +import com.biutag.supervision.pojo.param.BasePage; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class DataAuditQueryParam extends BasePage { + + private Long id; + + private String auditType; + + private String projectName; + + private Long secondLevelDeptId; + + private Long thirdLevelDeptId; + + private LocalDateTime auditTimeStart; + + private LocalDateTime auditTimeEnd; +} diff --git a/src/main/java/com/biutag/supervision/pojo/request/dataAudit/DataAuditAddRequest.java b/src/main/java/com/biutag/supervision/pojo/request/dataAudit/DataAuditAddRequest.java new file mode 100644 index 0000000..d3ad5bb --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/request/dataAudit/DataAuditAddRequest.java @@ -0,0 +1,68 @@ +package com.biutag.supervision.pojo.request.dataAudit; + +import cn.hutool.core.util.StrUtil; +import com.biutag.supervision.aop.ParamChecked; +import com.biutag.supervision.constants.enums.ProblemSourcesEnum; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Setter +@Getter +@Schema(description = "审计记录添加请求") +public class DataAuditAddRequest implements ParamChecked { + + /** + * @see ProblemSourcesEnum 27-30 + */ + @Schema(description = "审计类型") + private String auditType; + + @Schema(description = "被审计的项目名称") + private String projectName; + + @Schema(description = "涉及二级单位ID(可为空)") + private Long secondLevelDeptId; + + @Schema(description = "涉及二级单位名称") + private String secondLevelDeptName; + + @Schema(description = "涉及三级单位ID(可为空)") + private Long thirdLevelDeptId; + + @Schema(description = "涉及三级单位名称") + private String thirdLevelDeptName; + + @Schema(description = "审计时间,精确到秒") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime auditTime; + + @Schema(description = "审计涉及的总金额") + private BigDecimal auditAmount; + + @Schema(description = "发现的问题金额,默认为0") + private BigDecimal issueAmount; + + @Override + public void check() { + if (StrUtil.isBlank(auditType)) { + throw new IllegalArgumentException("审计类型不能为空"); + } + if (StrUtil.isBlank(projectName)) { + throw new IllegalArgumentException("项目名称不能为空"); + } + if (auditTime == null) { + throw new IllegalArgumentException("审计时间不能为空"); + } + if (auditAmount == null) { + throw new IllegalArgumentException("审计涉及金额不能为空"); + } + if (issueAmount == null) { + issueAmount = BigDecimal.ZERO; + } + } +} diff --git a/src/main/java/com/biutag/supervision/pojo/request/dataAudit/DataAuditDelRequest.java b/src/main/java/com/biutag/supervision/pojo/request/dataAudit/DataAuditDelRequest.java new file mode 100644 index 0000000..e6f563b --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/request/dataAudit/DataAuditDelRequest.java @@ -0,0 +1,28 @@ +package com.biutag.supervision.pojo.request.dataAudit; + +import cn.hutool.core.collection.CollectionUtil; +import com.biutag.supervision.aop.ParamChecked; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Setter +@Getter +@Schema(description = "审计记录删除请求") +public class DataAuditDelRequest implements ParamChecked { + + @Schema(description = "审计记录ID") + private Long id; + + @Schema(description = "审计记录ID列表(批量删除)") + private List ids; + + @Override + public void check() { + if (id == null && CollectionUtil.isEmpty(ids)) { + throw new IllegalArgumentException("ID不能为空"); + } + } +} diff --git a/src/main/java/com/biutag/supervision/pojo/request/dataAudit/DataAuditPageRequest.java b/src/main/java/com/biutag/supervision/pojo/request/dataAudit/DataAuditPageRequest.java new file mode 100644 index 0000000..6b8b9c1 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/request/dataAudit/DataAuditPageRequest.java @@ -0,0 +1,36 @@ +package com.biutag.supervision.pojo.request.dataAudit; + +import com.biutag.supervision.pojo.param.BasePage; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; +import java.util.List; + +@Setter +@Getter +@Schema(description = "审计记录分页请求") +public class DataAuditPageRequest extends BasePage { + + @Schema(description = "审计类型") + private String auditType; + + @Schema(description = "项目名称") + private String projectName; + + @Schema(description = "涉及二级单位ID") + private Long secondLevelDeptId; + + @Schema(description = "涉及三级单位ID") + private Long thirdLevelDeptId; + + @Schema(description = "审计时间开始") + private LocalDateTime auditTimeStart; + + @Schema(description = "审计时间结束") + private LocalDateTime auditTimeEnd; + + @Schema(description = "审计时间区间") + private List auditTimeList; +} diff --git a/src/main/java/com/biutag/supervision/pojo/request/dataAudit/DataAuditUpdateRequest.java b/src/main/java/com/biutag/supervision/pojo/request/dataAudit/DataAuditUpdateRequest.java new file mode 100644 index 0000000..4765aa5 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/request/dataAudit/DataAuditUpdateRequest.java @@ -0,0 +1,65 @@ +package com.biutag.supervision.pojo.request.dataAudit; + +import cn.hutool.core.util.StrUtil; +import com.biutag.supervision.aop.ParamChecked; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Setter +@Getter +@Schema(description = "审计记录修改请求") +public class DataAuditUpdateRequest implements ParamChecked { + + @Schema(description = "主键ID") + private Long id; + + @Schema(description = "审计类型(如财务审计、合规审计等)") + private String auditType; + + @Schema(description = "被审计的项目名称") + private String projectName; + + @Schema(description = "涉及二级单位ID(可为空)") + private Long secondLevelDeptId; + + @Schema(description = "涉及二级单位名称") + private String secondLevelDeptName; + + @Schema(description = "涉及三级单位ID(可为空)") + private Long thirdLevelDeptId; + + @Schema(description = "涉及三级单位名称") + private String thirdLevelDeptName; + + @Schema(description = "审计时间,精确到秒") + private LocalDateTime auditTime; + + @Schema(description = "审计涉及的总金额") + private BigDecimal auditAmount; + + @Schema(description = "发现的问题金额,默认为0") + private BigDecimal issueAmount; + + @Override + public void check() { + if (id == null) { + throw new IllegalArgumentException("ID不能为空"); + } + if (StrUtil.isBlank(auditType)) { + throw new IllegalArgumentException("审计类型不能为空"); + } + if (StrUtil.isBlank(projectName)) { + throw new IllegalArgumentException("项目名称不能为空"); + } + if (auditTime == null) { + throw new IllegalArgumentException("审计时间不能为空"); + } + if (auditAmount == null) { + throw new IllegalArgumentException("审计涉及金额不能为空"); + } + } +} diff --git a/src/main/java/com/biutag/supervision/pojo/vo/dataAudit/DataAuditPageVo.java b/src/main/java/com/biutag/supervision/pojo/vo/dataAudit/DataAuditPageVo.java new file mode 100644 index 0000000..ae23b80 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/vo/dataAudit/DataAuditPageVo.java @@ -0,0 +1,54 @@ +package com.biutag.supervision.pojo.vo.dataAudit; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +@Schema(description = "审计记录分页VO") +public class DataAuditPageVo { + + @Schema(description = "主键ID") + private Long id; + + @Schema(description = "审计类型") + private String auditType; + + @Schema(description = "项目名称") + private String projectName; + + @Schema(description = "涉及二级单位ID") + private Long secondLevelDeptId; + + @Schema(description = "涉及二级单位名称") + private String secondLevelDeptName; + + @Schema(description = "涉及三级单位ID") + private Long thirdLevelDeptId; + + @Schema(description = "涉及三级单位名称") + private String thirdLevelDeptName; + + @Schema(description = "审计时间") + private LocalDateTime auditTime; + + @Schema(description = "审计涉及的总金额") + private BigDecimal auditAmount; + + @Schema(description = "发现的问题金额") + private BigDecimal issueAmount; + + @Schema(description = "创建人") + private String createBy; + + @Schema(description = "创建时间") + private LocalDateTime createTime; + + @Schema(description = "更新人") + private String updateBy; + + @Schema(description = "更新时间") + private LocalDateTime updateTime; +} diff --git a/src/main/java/com/biutag/supervision/repository/dataAudit/DataAuditResourceService.java b/src/main/java/com/biutag/supervision/repository/dataAudit/DataAuditResourceService.java new file mode 100644 index 0000000..711d8d8 --- /dev/null +++ b/src/main/java/com/biutag/supervision/repository/dataAudit/DataAuditResourceService.java @@ -0,0 +1,113 @@ +package com.biutag.supervision.repository.dataAudit; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.mapper.DataAuditMapper; +import com.biutag.supervision.pojo.entity.DataAudit; +import com.biutag.supervision.pojo.param.dataAudit.DataAuditQueryParam; +import com.biutag.supervision.repository.base.BaseDAO; +import jakarta.annotation.Resource; +import jakarta.validation.ValidationException; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; + +@Service +public class DataAuditResourceService extends BaseDAO { + + @Resource + private DataAuditMapper dataAuditMapper; + + public List query(DataAuditQueryParam param) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (param.getId() != null) { + queryWrapper.eq(DataAudit::getId, param.getId()); + } + if (StrUtil.isNotBlank(param.getAuditType())) { + queryWrapper.eq(DataAudit::getAuditType, param.getAuditType()); + } + if (StrUtil.isNotBlank(param.getProjectName())) { + queryWrapper.like(DataAudit::getProjectName, param.getProjectName()); + } + if (param.getSecondLevelDeptId() != null) { + queryWrapper.eq(DataAudit::getSecondLevelDeptId, param.getSecondLevelDeptId()); + } + if (param.getThirdLevelDeptId() != null) { + queryWrapper.eq(DataAudit::getThirdLevelDeptId, param.getThirdLevelDeptId()); + } + if (param.getAuditTimeStart() != null && param.getAuditTimeEnd() != null) { + queryWrapper.between(DataAudit::getAuditTime, param.getAuditTimeStart(), param.getAuditTimeEnd()); + } + if (queryWrapper.getExpression() == null || queryWrapper.getExpression().getSqlSegment().isEmpty()) { + return Collections.emptyList(); + } + return dataAuditMapper.selectList(queryWrapper); + } + + public IPage pageQuery(DataAuditQueryParam param) { + Page page = new Page<>(param.getCurrent(), param.getSize()); + LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); + if (StrUtil.isNotBlank(param.getAuditType())) { + qw.eq(DataAudit::getAuditType, param.getAuditType()); + } + if (StrUtil.isNotBlank(param.getProjectName())) { + qw.like(DataAudit::getProjectName, param.getProjectName()); + } + if (param.getSecondLevelDeptId() != null) { + qw.eq(DataAudit::getSecondLevelDeptId, param.getSecondLevelDeptId()); + } + if (param.getThirdLevelDeptId() != null) { + qw.eq(DataAudit::getThirdLevelDeptId, param.getThirdLevelDeptId()); + } + if (param.getAuditTimeStart() != null && param.getAuditTimeEnd() != null) { + qw.between(DataAudit::getAuditTime, param.getAuditTimeStart(), param.getAuditTimeEnd()); + } + qw.orderByDesc(DataAudit::getCreateTime); + return dataAuditMapper.selectPage(page, qw); + } + + public List pageList(DataAuditQueryParam param) { + return pageQuery(param).getRecords(); + } + + public Boolean createDataAudit(List dataAuditList) { + innerBatchInsert(dataAuditMapper, dataAuditList, "添加失败!"); + return Boolean.TRUE; + } + + public boolean deleteById(Long id) { + if (id == null) { + throw new ValidationException("id不能为空"); + } + return dataAuditMapper.deleteById(id) > 0; + } + + public boolean deleteByIds(List ids) { + if (CollectionUtil.isEmpty(ids)) { + throw new ValidationException("ids不能为空"); + } + return dataAuditMapper.deleteBatchIds(ids) > 0; + } + + public boolean updateById(DataAudit dataAudit) { + if (dataAudit.getId() == null) { + throw new ValidationException("id不能为空"); + } + dataAudit.setUpdateBy(UserContextHolder.getCurrentUser().getUserName()); + dataAudit.setUpdateTime(LocalDateTime.now()); + return dataAuditMapper.updateById(dataAudit) > 0; + } + + public DataAudit getById(Long id) { + if (id == null) { + return null; + } + return dataAuditMapper.selectById(id); + } +} diff --git a/src/main/java/com/biutag/supervision/service/dataAudit/DataAuditService.java b/src/main/java/com/biutag/supervision/service/dataAudit/DataAuditService.java new file mode 100644 index 0000000..d73be01 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/dataAudit/DataAuditService.java @@ -0,0 +1,23 @@ +package com.biutag.supervision.service.dataAudit; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.dto.dataAudit.DataAuditImportDto; +import com.biutag.supervision.pojo.dto.dataAudit.DataAuditPageDTO; +import com.biutag.supervision.pojo.request.dataAudit.*; + +import java.io.InputStream; +import java.util.List; + +public interface DataAuditService { + + Result> getDataAuditPage(DataAuditPageRequest request); + + Result addDataAudit(DataAuditAddRequest request); + + Result updateDataAudit(DataAuditUpdateRequest request); + + Result delDataAudit(DataAuditDelRequest request); + + int importData(InputStream inputStream); +} diff --git a/src/main/java/com/biutag/supervision/service/dataAudit/DataAuditServiceImpl.java b/src/main/java/com/biutag/supervision/service/dataAudit/DataAuditServiceImpl.java new file mode 100644 index 0000000..81db96a --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/dataAudit/DataAuditServiceImpl.java @@ -0,0 +1,207 @@ +package com.biutag.supervision.service.dataAudit; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.read.listener.ReadListener; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.dto.dataAudit.DataAuditImportDto; +import com.biutag.supervision.pojo.dto.dataAudit.DataAuditPageDTO; +import com.biutag.supervision.pojo.entity.DataAudit; +import com.biutag.supervision.pojo.entity.SupDepart; +import com.biutag.supervision.pojo.param.SupDepartQueryParam; +import com.biutag.supervision.pojo.param.dataAudit.DataAuditQueryParam; +import com.biutag.supervision.pojo.request.dataAudit.*; +import com.biutag.supervision.repository.dataAudit.DataAuditResourceService; +import com.biutag.supervision.repository.supdepart.SupDepartResourceService; +import com.biutag.supervision.service.SupDepartService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.InputStream; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +@Slf4j +@Service +@RequiredArgsConstructor +public class DataAuditServiceImpl implements DataAuditService { + + private final DataAuditResourceService dataAuditResourceService; + private final SupDepartService supDepartService; + private final SupDepartResourceService supDepartResourceService; + + @Override + public Result> getDataAuditPage(DataAuditPageRequest request) { + DataAuditQueryParam param = new DataAuditQueryParam(); + param.setCurrent(request.getCurrent()); + param.setSize(request.getSize()); + param.setAuditType(request.getAuditType()); + param.setProjectName(request.getProjectName()); + param.setSecondLevelDeptId(request.getSecondLevelDeptId()); + param.setThirdLevelDeptId(request.getThirdLevelDeptId()); + + if (CollectionUtil.size(request.getAuditTimeList()) == 2 + && request.getAuditTimeList().get(0) != null + && request.getAuditTimeList().get(1) != null) { + param.setAuditTimeStart(request.getAuditTimeList().get(0)); + param.setAuditTimeEnd(request.getAuditTimeList().get(1)); + } else { + param.setAuditTimeStart(request.getAuditTimeStart()); + param.setAuditTimeEnd(request.getAuditTimeEnd()); + } + IPage page = dataAuditResourceService.pageQuery(param); + Page dtoPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal()); + dtoPage.setRecords(page.getRecords().stream() + .map(entity -> BeanUtil.copyProperties(entity, DataAuditPageDTO.class)) + .toList()); + return Result.success(dtoPage); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Result addDataAudit(DataAuditAddRequest request) { + if (ObjectUtil.isNotNull(request.getSecondLevelDeptId())){ + SupDepart byId = supDepartService.getById(request.getSecondLevelDeptId()); + if (byId.getLevel()!=2){ + throw new IllegalArgumentException("请选择正确的二级单位"); + } + } + if (ObjectUtil.isNotNull(request.getThirdLevelDeptId())){ + SupDepart byId = supDepartService.getById(request.getThirdLevelDeptId()); + if (byId.getLevel()!=3){ + throw new IllegalArgumentException("请选择正确的三级单位"); + } + } + DataAudit dataAudit = BeanUtil.copyProperties(request, DataAudit.class); + dataAudit.setCreateBy(UserContextHolder.getCurrentUser().getUserName()); + dataAudit.setCreateTime(LocalDateTime.now()); + Boolean result = dataAuditResourceService.createDataAudit(Collections.singletonList(dataAudit)); + return Result.success(result); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Result updateDataAudit(DataAuditUpdateRequest request) { + if (ObjectUtil.isNotNull(request.getSecondLevelDeptId())){ + SupDepart byId = supDepartService.getById(request.getSecondLevelDeptId()); + if (byId.getLevel()!=2){ + throw new IllegalArgumentException("请选择正确的二级单位"); + } + } + if (ObjectUtil.isNotNull(request.getThirdLevelDeptId())){ + SupDepart byId = supDepartService.getById(request.getThirdLevelDeptId()); + if (byId.getLevel()!=3){ + throw new IllegalArgumentException("请选择正确的三级单位"); + } + } + DataAudit dataAudit = BeanUtil.copyProperties(request, DataAudit.class); + dataAudit.setUpdateBy(UserContextHolder.getCurrentUser().getUserName()); + dataAudit.setUpdateTime(LocalDateTime.now()); + boolean result = dataAuditResourceService.updateById(dataAudit); + return Result.success(result); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Result delDataAudit(DataAuditDelRequest request) { + boolean result; + if (request.getId() != null) { + result = dataAuditResourceService.deleteById(request.getId()); + } else if (CollectionUtil.isNotEmpty(request.getIds())) { + result = dataAuditResourceService.deleteByIds(request.getIds()); + } else { + return Result.failed("ID不能为空"); + } + return Result.success(result); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public int importData(InputStream inputStream) { + List list = new ArrayList<>(); + EasyExcel.read(inputStream, DataAuditImportDto.class, new ReadListener() { + @Override + public void invoke(DataAuditImportDto data, com.alibaba.excel.context.AnalysisContext analysisContext) { + if (StrUtil.isNotBlank(data.getSecondLevelDeptName())) { + SupDepartQueryParam supDepartQueryParam = new SupDepartQueryParam(); + supDepartQueryParam.setShortName(data.getSecondLevelDeptName()); + List query = supDepartResourceService.query(supDepartQueryParam); + if (CollectionUtil.isEmpty(query)){ + throw new IllegalArgumentException("没有找到对应二级单位["+data.getProjectName()+"]"); + } + data.setSecondLevelDeptId(Long.valueOf(query.get(0).getId())); + } + if (StrUtil.isNotBlank(data.getThirdLevelDeptName())) { + if (data.getSecondLevelDeptId() == null) { + throw new IllegalArgumentException( + String.format("项目[%s]的三级单位[%s]存在,但二级单位为空,无法确定归属", + data.getProjectName(), data.getThirdLevelDeptName())); + } + SupDepartQueryParam param = new SupDepartQueryParam(); + param.setShortName(data.getThirdLevelDeptName()); + param.setPid(String.valueOf(data.getSecondLevelDeptId())); + List query = supDepartResourceService.query(param); + if (CollectionUtil.isEmpty(query)) { + throw new IllegalArgumentException( + String.format("未找到三级单位[%s](父级ID:%s,项目:%s)", data.getThirdLevelDeptName(), data.getSecondLevelDeptId(), data.getProjectName())); + } + data.setThirdLevelDeptId(Long.valueOf(query.get(0).getId())); + } + list.add(data); + } + @Override + public void doAfterAllAnalysed(com.alibaba.excel.context.AnalysisContext analysisContext) { + } + }).sheet().doRead(); + + return saveImportData(list); + } + + private int saveImportData(List dataList) { + if (CollectionUtil.isEmpty(dataList)) { + return 0; + } + + List auditList = dataList.stream() + .filter(dto -> dto.getProjectName() != null && !dto.getProjectName().isEmpty()) + .map(dto -> { + DataAudit audit = new DataAudit(); + audit.setAuditType(dto.getAuditType()); + audit.setProjectName(dto.getProjectName()); + audit.setSecondLevelDeptId(dto.getSecondLevelDeptId()); + audit.setSecondLevelDeptName(dto.getSecondLevelDeptName()); + audit.setThirdLevelDeptId(dto.getThirdLevelDeptId()); + audit.setThirdLevelDeptName(dto.getThirdLevelDeptName()); + audit.setAuditTime(dto.getAuditTime()); + audit.setAuditAmount(dto.getAuditAmount()); + audit.setIssueAmount(dto.getIssueAmount()); + audit.setCreateBy(UserContextHolder.getCurrentUser().getUserName()); + audit.setCreateTime(LocalDateTime.now()); + audit.setUpdateBy(UserContextHolder.getCurrentUser().getUserName()); + audit.setUpdateTime(LocalDateTime.now()); + return audit; + }) + .toList(); + + if (CollectionUtil.isNotEmpty(auditList)) { + dataAuditResourceService.createDataAudit(auditList); + } + return auditList.size(); + } + + + + +} diff --git a/src/main/resources/mapper/DataAuditMapper.xml b/src/main/resources/mapper/DataAuditMapper.xml new file mode 100644 index 0000000..134c8ae --- /dev/null +++ b/src/main/resources/mapper/DataAuditMapper.xml @@ -0,0 +1,45 @@ + + + + + + INSERT INTO data_audit ( + audit_type, + project_name, + second_level_dept_id, + second_level_dept_name, + third_level_dept_id, + third_level_dept_name, + audit_time, + audit_amount, + issue_amount, + update_by, + update_time, + create_by, + create_time, + gwf1, gwf2, gwf3, gwf4, gwf5 + ) + VALUES + + ( + #{item.auditType}, + #{item.projectName}, + #{item.secondLevelDeptId}, + #{item.secondLevelDeptName}, + #{item.thirdLevelDeptId}, + #{item.thirdLevelDeptName}, + #{item.auditTime}, + #{item.auditAmount}, + #{item.issueAmount}, + #{item.updateBy}, + #{item.updateTime}, + #{item.createBy}, + #{item.createTime}, + #{item.gwf1}, #{item.gwf2}, #{item.gwf3}, #{item.gwf4}, #{item.gwf5} + ) + + + +