From 0b0cc7a65d47b8e5acd26303c13bc3b9c10b3c4d Mon Sep 17 00:00:00 2001 From: lihongjie0209 Date: Fri, 16 Aug 2024 10:46:21 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E8=BF=87excel=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E8=BF=9B=E8=A1=8C=E7=BC=96=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/EmpSalaryController.java | 7 ++ .../coal/empSalary/dto/BatchEditDto.java | 2 + .../empSalary/service/EmpSalaryService.java | 78 ++++++++++++++++++- 3 files changed, 83 insertions(+), 4 deletions(-) diff --git a/src/main/java/cn/lihongjie/coal/empSalary/controller/EmpSalaryController.java b/src/main/java/cn/lihongjie/coal/empSalary/controller/EmpSalaryController.java index 113d0e4a..2a299bf1 100644 --- a/src/main/java/cn/lihongjie/coal/empSalary/controller/EmpSalaryController.java +++ b/src/main/java/cn/lihongjie/coal/empSalary/controller/EmpSalaryController.java @@ -95,6 +95,13 @@ public class EmpSalaryController { return true; } + + @PostMapping("/batchEditExcel") + public Object batchEditExcel(@RequestBody BatchEditDto request) { + this.service.batchEditExcel(request); + return true; + } + @PostMapping("/archive") public Object archive(@RequestBody IdRequest request) { this.service.archive(request); diff --git a/src/main/java/cn/lihongjie/coal/empSalary/dto/BatchEditDto.java b/src/main/java/cn/lihongjie/coal/empSalary/dto/BatchEditDto.java index 92631066..9cc261c6 100644 --- a/src/main/java/cn/lihongjie/coal/empSalary/dto/BatchEditDto.java +++ b/src/main/java/cn/lihongjie/coal/empSalary/dto/BatchEditDto.java @@ -10,6 +10,8 @@ public class BatchEditDto { private String batchId; + private String fileId; + private List salaryIds; diff --git a/src/main/java/cn/lihongjie/coal/empSalary/service/EmpSalaryService.java b/src/main/java/cn/lihongjie/coal/empSalary/service/EmpSalaryService.java index 5570f2fa..de9530e2 100644 --- a/src/main/java/cn/lihongjie/coal/empSalary/service/EmpSalaryService.java +++ b/src/main/java/cn/lihongjie/coal/empSalary/service/EmpSalaryService.java @@ -4,6 +4,7 @@ import cn.lihongjie.coal.base.dto.CommonQuery; import cn.lihongjie.coal.base.dto.IdRequest; import cn.lihongjie.coal.base.entity.OrgCommonEntity; import cn.lihongjie.coal.base.service.BaseService; +import cn.lihongjie.coal.common.ExcelUtils; import cn.lihongjie.coal.common.GroovyScriptUtils; import cn.lihongjie.coal.common.MapUtils; import cn.lihongjie.coal.common.ReflectUtils; @@ -26,6 +27,7 @@ import cn.lihongjie.coal.employee.entity.EmployeeEntity; import cn.lihongjie.coal.employee.mapper.EmployeeMapper; import cn.lihongjie.coal.employee.service.EmployeeService; import cn.lihongjie.coal.exception.BizException; +import cn.lihongjie.coal.file.service.FileService; import groovy.lang.Binding; import groovy.lang.GroovyClassLoader; @@ -36,6 +38,7 @@ import io.vavr.control.Try; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; +import lombok.Cleanup; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -56,11 +59,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StopWatch; +import java.io.InputStream; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service @@ -863,4 +864,73 @@ select id from tmp1 where rk = 1 log.info("删除工资数据 {} 条", cnt); } + + @Autowired FileService fileService; + + public void batchEditExcel(BatchEditDto request) { + + var batch = this.batchService.get(request.getBatchId()); + + assertBatchEditable(batch); + + List items = + this.empSalaryItemService.getItems(batch.getOrganizationId()); + + Map itemMap = + items.stream().filter(x -> StringUtils.equalsAny(x.getInputType(), "1")).collect(Collectors.toMap(e -> e.getName(), e -> e)); + + @Cleanup InputStream download = fileService.download(request.getFileId()); + + List batchEditDtos = + ExcelUtils.readFirstSheetToObjectList( + download, + () -> { + BatchEditDto dto = new BatchEditDto(); + dto.setBatchId(request.getBatchId()); + dto.setSalaryItems(new HashMap<>()); + return dto; + }, + new ExcelUtils.CellValueToObjectSetter() { + @Override + public void set(String header, BatchEditDto object, Object value) { + + if (header.equals("身份证号") || header.equals("身份证")) { + object.setSalaryIds(List.of(value + "")); + + } else if (StringUtils.equalsAny("姓名", "部门", "岗位")) { + + // 忽略这些字段 + + } else if (itemMap.containsKey(header)) { + object.getSalaryItems() + .put( + itemMap.get(header).getCode(), + conversionService.convert( + value, BigDecimal.class)); + } else { + log.info("未知列: {}", header); + throw new BizException("未知列: {}", header); + } + } + }); + + List resultList = em.createQuery( + """ + select s from EmpSalaryEntity s where s.batch.id =:batchId and s.employee.idCard in :idCards + """, EmpSalaryEntity.class) + .setParameter("batchId", request.getBatchId()) + .setParameter( + "idCards", + batchEditDtos.stream().flatMap(x -> x.getSalaryIds().stream()).toList()) + .getResultList(); + + Map map = resultList.stream().collect(Collectors.toMap(e -> e.getIdCard(), e -> e)); + + for (BatchEditDto batchEditDto : batchEditDtos) { + batchEditDto.setSalaryIds(Collections.singletonList(map.get(batchEditDto.getSalaryIds().get(0)).getId())); + batchEdit(batchEditDto); + } + + + } }