Browse Source

审计项目的导入功能

master
buaixuexideshitongxue 4 weeks ago
parent
commit
9e1bdc7ad9
  1. 101
      src/main/java/com/biutag/supervision/controller/data/DataAuditController.java
  2. 11
      src/main/java/com/biutag/supervision/mapper/DataAuditMapper.java
  3. 53
      src/main/java/com/biutag/supervision/pojo/dto/dataAudit/DataAuditImportDto.java
  4. 56
      src/main/java/com/biutag/supervision/pojo/dto/dataAudit/DataAuditPageDTO.java
  5. 92
      src/main/java/com/biutag/supervision/pojo/entity/DataAudit.java
  6. 24
      src/main/java/com/biutag/supervision/pojo/param/dataAudit/DataAuditQueryParam.java
  7. 68
      src/main/java/com/biutag/supervision/pojo/request/dataAudit/DataAuditAddRequest.java
  8. 28
      src/main/java/com/biutag/supervision/pojo/request/dataAudit/DataAuditDelRequest.java
  9. 36
      src/main/java/com/biutag/supervision/pojo/request/dataAudit/DataAuditPageRequest.java
  10. 65
      src/main/java/com/biutag/supervision/pojo/request/dataAudit/DataAuditUpdateRequest.java
  11. 54
      src/main/java/com/biutag/supervision/pojo/vo/dataAudit/DataAuditPageVo.java
  12. 113
      src/main/java/com/biutag/supervision/repository/dataAudit/DataAuditResourceService.java
  13. 23
      src/main/java/com/biutag/supervision/service/dataAudit/DataAuditService.java
  14. 207
      src/main/java/com/biutag/supervision/service/dataAudit/DataAuditServiceImpl.java
  15. 45
      src/main/resources/mapper/DataAuditMapper.xml

101
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<Page<DataAuditPageDTO>> getPage(@RequestBody DataAuditPageRequest request) {
return dataAuditService.getDataAuditPage(request);
}
@Operation(description = "添加")
@PostMapping("/add")
public Result<Boolean> add(@RequestBody DataAuditAddRequest request) {
return dataAuditService.addDataAudit(request);
}
@Operation(description = "修改")
@PostMapping("/update")
public Result<Boolean> update(@RequestBody DataAuditUpdateRequest request) {
return dataAuditService.updateDataAudit(request);
}
@Operation(description = "删除")
@PostMapping("/delete")
public Result<Boolean> 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<DataAuditImportDto> 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<Integer> 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);
}
}

11
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<DataAudit> {
int insertBatch(List<DataAudit> list);
}

53
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;
}

56
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;
}

92
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;
}

24
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;
}

68
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;
}
}
}

28
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<Long> ids;
@Override
public void check() {
if (id == null && CollectionUtil.isEmpty(ids)) {
throw new IllegalArgumentException("ID不能为空");
}
}
}

36
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<LocalDateTime> auditTimeList;
}

65
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("审计涉及金额不能为空");
}
}
}

54
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;
}

113
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<DataAudit> query(DataAuditQueryParam param) {
LambdaQueryWrapper<DataAudit> 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<DataAudit> pageQuery(DataAuditQueryParam param) {
Page<DataAudit> page = new Page<>(param.getCurrent(), param.getSize());
LambdaQueryWrapper<DataAudit> 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<DataAudit> pageList(DataAuditQueryParam param) {
return pageQuery(param).getRecords();
}
public Boolean createDataAudit(List<DataAudit> 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<Long> 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);
}
}

23
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<Page<DataAuditPageDTO>> getDataAuditPage(DataAuditPageRequest request);
Result<Boolean> addDataAudit(DataAuditAddRequest request);
Result<Boolean> updateDataAudit(DataAuditUpdateRequest request);
Result<Boolean> delDataAudit(DataAuditDelRequest request);
int importData(InputStream inputStream);
}

207
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<Page<DataAuditPageDTO>> 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<DataAudit> page = dataAuditResourceService.pageQuery(param);
Page<DataAuditPageDTO> 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<Boolean> 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<Boolean> 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<Boolean> 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<DataAuditImportDto> list = new ArrayList<>();
EasyExcel.read(inputStream, DataAuditImportDto.class, new ReadListener<DataAuditImportDto>() {
@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<SupDepart> 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<SupDepart> 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<DataAuditImportDto> dataList) {
if (CollectionUtil.isEmpty(dataList)) {
return 0;
}
List<DataAudit> 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();
}
}

45
src/main/resources/mapper/DataAuditMapper.xml

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.biutag.supervision.mapper.DataAuditMapper">
<insert id="insertBatch" parameterType="java.util.List">
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
<foreach collection="list" item="item" separator=",">
(
#{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}
)
</foreach>
</insert>
</mapper>
Loading…
Cancel
Save