From fa12c182bde0a9b0804609961081572032844e90 Mon Sep 17 00:00:00 2001 From: lihongjie0209 Date: Fri, 16 Aug 2024 11:19:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=89=B9=E9=87=8F=E7=BC=96?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coal/empSalary/dto/BatchEditDto.java | 4 + .../empSalary/service/EmpSalaryService.java | 132 ++++++++++++------ 2 files changed, 91 insertions(+), 45 deletions(-) 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 9cc261c6..618a77bf 100644 --- a/src/main/java/cn/lihongjie/coal/empSalary/dto/BatchEditDto.java +++ b/src/main/java/cn/lihongjie/coal/empSalary/dto/BatchEditDto.java @@ -20,4 +20,8 @@ public class BatchEditDto { + + + + } 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 4c4f7ee8..c2c5bda5 100644 --- a/src/main/java/cn/lihongjie/coal/empSalary/service/EmpSalaryService.java +++ b/src/main/java/cn/lihongjie/coal/empSalary/service/EmpSalaryService.java @@ -3,6 +3,7 @@ package cn.lihongjie.coal.empSalary.service; 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.mapper.CommonMapper; import cn.lihongjie.coal.base.service.BaseService; import cn.lihongjie.coal.common.ExcelUtils; import cn.lihongjie.coal.common.MapUtils; @@ -63,6 +64,7 @@ import java.util.stream.Collectors; @Slf4j @Transactional public class EmpSalaryService extends BaseService { + @Autowired private CommonMapper commonMapper; @Autowired private EmpSalaryRepository repository; @Autowired private EmpSalaryMapper mapper; @@ -92,6 +94,31 @@ public class EmpSalaryService extends BaseService> list) { + List ids = list.stream().map(x -> x.get("id") + "").toList(); + + Map> map = + list.stream().collect(Collectors.toMap(e -> e.get("id") + "", e -> e)); + + List all = this.findAllByIds(ids); + + Script scriptObj = empSalaryItemService.newScriptInstance(organizationId); + + for (EmpSalaryEntity salary : all) { + + Map ctx = buildRecalculateCtx(salary); + + MapUtils.merge(map.get(salary.getId()), ctx, EmpSalaryEntity.ITEM_KEYS); + + scriptObj.setBinding(new Binding(Map.of("salary", ctx))); + + scriptObj.run(); + ReflectUtils.updateFromMap(salary, ctx, EmpSalaryEntity.ITEM_KEYS, conversionService); + } + + this.saveAll(all); + } + public void batchEdit(BatchEditDto dto) { EmpSalaryBatchEntity batch = batchService.get(dto.getBatchId()); @@ -109,25 +136,17 @@ public class EmpSalaryService extends BaseService all = this.findAllByIds(dto.getSalaryIds()); - - HashMap src = new HashMap<>(dto.getSalaryItems()); - - Script scriptObj = empSalaryItemService.newScriptInstance(batch.getOrganizationId()); - - for (EmpSalaryEntity salary : all) { - - Map ctx = buildRecalculateCtx(salary); - - MapUtils.merge(src, ctx, EmpSalaryEntity.ITEM_KEYS); - - scriptObj.setBinding(new Binding(Map.of("salary", ctx))); - - scriptObj.run(); - ReflectUtils.updateFromMap(salary, ctx, EmpSalaryEntity.ITEM_KEYS, conversionService); - } - - this.saveAll(all); + batchEdit( + batch.getOrganizationId(), + dto.getSalaryIds().stream() + .map( + x -> { + HashMap map = new HashMap<>(); + map.put("id", x); + map.putAll(dto.getSalaryItems()); + return map; + }) + .collect(Collectors.toList())); } public void archive(IdRequest dto) { @@ -802,40 +821,47 @@ select id from tmp1 where rk = 1 assertBatchEditable(batch); + RLock lock = redissonClient.getLock("batchModify." + batch.getId()); + + boolean tryLock = lock.tryLock(); + + if (!tryLock) { + batchModifing(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)); + 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 = + List> batchEditDtos = ExcelUtils.readFirstSheetToObjectList( download, () -> { - BatchEditDto dto = new BatchEditDto(); - dto.setBatchId(request.getBatchId()); - dto.setSalaryItems(new HashMap<>()); - return dto; + return new HashMap(); }, - new ExcelUtils.CellValueToObjectSetter() { + new ExcelUtils.CellValueToObjectSetter>() { @Override - public void set(String header, BatchEditDto object, Object value) { + public void set( + String header, Map object, Object value) { if (header.equals("身份证号") || header.equals("身份证")) { - object.setSalaryIds(List.of(value + "")); + object.put("idCard", value); } else if (StringUtils.equalsAny("姓名", "部门", "岗位")) { // 忽略这些字段 } else if (itemMap.containsKey(header)) { - object.getSalaryItems() - .put( - itemMap.get(header).getCode(), - conversionService.convert( - value, BigDecimal.class)); + + object.put( + itemMap.get(header).getCode(), + conversionService.convert(value, BigDecimal.class)); } else { log.info("未知列: {}", header); throw new BizException("未知列: {}", header); @@ -843,23 +869,39 @@ select id from tmp1 where rk = 1 } }); - List resultList = em.createQuery( - """ + 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(); + """, + EmpSalaryEntity.class) + .setParameter("batchId", request.getBatchId()) + .setParameter( + "idCards", + batchEditDtos.stream() + .map(x -> x.get("idCard").toString()) + .toList()) + .getResultList(); - Map map = resultList.stream().collect(Collectors.toMap(e -> e.getIdCard(), e -> e)); + for (EmpSalaryEntity salary : resultList) { - for (BatchEditDto batchEditDto : batchEditDtos) { - batchEditDto.setSalaryIds(Collections.singletonList(map.get(batchEditDto.getSalaryIds().get(0)).getId())); - batchEdit(batchEditDto); + for (Map dto : batchEditDtos) { + + if (StringUtils.equals( + salary.getEmployee().getIdCard(), dto.get("idCard").toString())) { + + dto.put("id", salary.getId()); + } + } } + for (Map dto : batchEditDtos) { + if (dto.get("id") == null) { + log.warn("未找到员工 {}", dto.get("idCard")); + } + } + + batchEdit(batch.getOrganizationId(), batchEditDtos); } }