From 9178825cdbea17ef907a76fb1157db6fe33e12ce Mon Sep 17 00:00:00 2001 From: lihongjie0209 Date: Fri, 5 Apr 2024 13:32:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84excel=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../cn/lihongjie/coal/common/ExcelUtils.java | 39 ++++++++++++++++++- .../service/DataCollectorService.java | 3 ++ .../repository/DictionaryRepository.java | 11 +++++- .../dictionary/service/DictionaryService.java | 16 +++++++- .../coal/employee/dto/EmployeeDto.java | 4 +- .../coal/employee/entity/EmployeeEntity.java | 11 ++---- .../employee/service/EmployeeService.java | 35 ++++++++++------- .../coal/file/service/FileService.java | 6 +-- 9 files changed, 96 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 1bbe73aa..de684041 100644 --- a/README.md +++ b/README.md @@ -90,6 +90,6 @@ cd /data/backup && sudo -u postgres pg_dumpall | gzip > /data/backup/$(date +"% ``` rabbitmqctl add_user datacollector datacollector -rabbitmqctl set_permissions --vhost /coal/test datacollector '' 'sysExchange' '' +rabbitmqctl set_permissions --vhost /coal/test datacollector '' 'sysExchange' 'pms\.client.*' ``` \ No newline at end of file diff --git a/src/main/java/cn/lihongjie/coal/common/ExcelUtils.java b/src/main/java/cn/lihongjie/coal/common/ExcelUtils.java index 00be7cf2..d89cebd6 100644 --- a/src/main/java/cn/lihongjie/coal/common/ExcelUtils.java +++ b/src/main/java/cn/lihongjie/coal/common/ExcelUtils.java @@ -23,6 +23,7 @@ import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicReference; @@ -34,16 +35,24 @@ public class ExcelUtils { public static Map> wbCtxManager = new ConcurrentHashMap<>(); - public static String getCode(Object value) { + public static String getCode(Object value, Function codeGetter) { if (value == null) { return null; } if (value instanceof String) { + + if (((String) value).contains("-")){ + + + return Splitter.on("-") .trimResults() .omitEmptyStrings() .splitToList((String) value) .get(0); + }else { + return codeGetter.apply((String) value); + } } return value.toString(); } @@ -82,7 +91,9 @@ public class ExcelUtils { readFirstSheet( inputStream, row -> { - return objectCreator.get(); + T t = objectCreator.get(); + ans.add(t); + return t; }, (headerCell, dataCell, object, value) -> { valueSetter.set(headerCell.getStringCellValue(), (T) object, value); @@ -449,6 +460,30 @@ public class ExcelUtils { } } + public static String getString(Object value) { + + if (value == null) { + return null; + } + if (value instanceof String) { + return (String) value; + } + + if (value instanceof LocalDateTime){ + return ((LocalDateTime) value).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + } + + if (value instanceof Double d){ + if (d % 1 == 0){ + return String.valueOf(d.intValue()); + } + } + + + return value.toString(); + + } + public interface ValidationInfo { record ListValidationInfo(List list) implements ValidationInfo {} diff --git a/src/main/java/cn/lihongjie/coal/dataCollector/service/DataCollectorService.java b/src/main/java/cn/lihongjie/coal/dataCollector/service/DataCollectorService.java index d7dc7eee..6e9900a9 100644 --- a/src/main/java/cn/lihongjie/coal/dataCollector/service/DataCollectorService.java +++ b/src/main/java/cn/lihongjie/coal/dataCollector/service/DataCollectorService.java @@ -83,6 +83,9 @@ public class DataCollectorService public void delete(IdRequest request) { this.repository.deleteAllById(request.getIds()); } + public void createQueue(IdRequest request) { + this.repository.deleteAllById(request.getIds()); + } public DataCollectorDto getById(String id) { DataCollectorEntity entity = repository.get(id); diff --git a/src/main/java/cn/lihongjie/coal/dictionary/repository/DictionaryRepository.java b/src/main/java/cn/lihongjie/coal/dictionary/repository/DictionaryRepository.java index 7aa1d10e..6aacc5d2 100644 --- a/src/main/java/cn/lihongjie/coal/dictionary/repository/DictionaryRepository.java +++ b/src/main/java/cn/lihongjie/coal/dictionary/repository/DictionaryRepository.java @@ -3,12 +3,21 @@ package cn.lihongjie.coal.dictionary.repository; import cn.lihongjie.coal.base.dao.BaseRepository; import cn.lihongjie.coal.dictionary.entity.DictionaryEntity; import cn.lihongjie.coal.script.entity.ScriptEntity; -import java.util.Optional; + +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import java.util.Optional; + @Repository public interface DictionaryRepository extends BaseRepository { DictionaryEntity findByCode(String code); Optional findByScript(ScriptEntity script); + + @Query( + value = + "select i.code from t_dictionary_item i inner join t_dictionary d on i.dictionary_id = d.id where d.code = :code and i.name = :name", + nativeQuery = true) + String translate(String code, String name); } diff --git a/src/main/java/cn/lihongjie/coal/dictionary/service/DictionaryService.java b/src/main/java/cn/lihongjie/coal/dictionary/service/DictionaryService.java index 7ce39d39..12df3f90 100644 --- a/src/main/java/cn/lihongjie/coal/dictionary/service/DictionaryService.java +++ b/src/main/java/cn/lihongjie/coal/dictionary/service/DictionaryService.java @@ -20,6 +20,8 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import io.vavr.Function2; + import jakarta.annotation.PostConstruct; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; @@ -272,8 +274,20 @@ class DictionaryService extends BaseService list = new ArrayList<>(); - TreeUtils.dfsList(tree.getTree(), (TreeDto x )->x.getChildren(), object -> list.add(object.getCurrent().getCode() + "-" + object.getCurrent().getName()), (TreeDto x )->x.getId()); + TreeUtils.dfsList(tree.getTree(), (TreeDto x )->x.getChildren(), object -> list.add(object.getCurrent().getName()), (TreeDto x )->x.getId()); return list; } + + public Function2 getTranslator() { + + return Function2.of(this::translate).memoized(); + } + + public String translate(String code, String s) { + + + + return this.repository.translate(code, s); + } } diff --git a/src/main/java/cn/lihongjie/coal/employee/dto/EmployeeDto.java b/src/main/java/cn/lihongjie/coal/employee/dto/EmployeeDto.java index 42259a3e..aed4b6b3 100644 --- a/src/main/java/cn/lihongjie/coal/employee/dto/EmployeeDto.java +++ b/src/main/java/cn/lihongjie/coal/employee/dto/EmployeeDto.java @@ -6,7 +6,7 @@ import cn.lihongjie.coal.employee.entity.EmpCarVO; import cn.lihongjie.coal.employee.entity.EmpCertVO; import cn.lihongjie.coal.employee.entity.EmpFamilyMemberVO; import cn.lihongjie.coal.file.entity.FileEntity; -import cn.lihongjie.coal.jobPost.entity.JobPostEntity; +import cn.lihongjie.coal.jobPost.dto.JobPostDto; import jakarta.persistence.ElementCollection; import jakarta.persistence.ManyToOne; @@ -81,7 +81,7 @@ public class EmployeeDto extends OrgCommonDto { @Comment("岗位") @ManyToOne - private JobPostEntity jobPost; + private JobPostDto jobPost; @Comment("银行编码") private String bank; diff --git a/src/main/java/cn/lihongjie/coal/employee/entity/EmployeeEntity.java b/src/main/java/cn/lihongjie/coal/employee/entity/EmployeeEntity.java index e63ab864..6730b1c0 100644 --- a/src/main/java/cn/lihongjie/coal/employee/entity/EmployeeEntity.java +++ b/src/main/java/cn/lihongjie/coal/employee/entity/EmployeeEntity.java @@ -5,10 +5,7 @@ import cn.lihongjie.coal.department.entity.DepartmentEntity; import cn.lihongjie.coal.file.entity.FileEntity; import cn.lihongjie.coal.jobPost.entity.JobPostEntity; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; +import jakarta.persistence.*; import lombok.Data; @@ -96,7 +93,7 @@ public class EmployeeEntity extends OrgCommonEntity { @Comment("手机号") private String phone; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) private FileEntity headImage; @Comment("身份证照片") @@ -108,11 +105,11 @@ public class EmployeeEntity extends OrgCommonEntity { private List bankCardImages; @Comment("部门") - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) private DepartmentEntity department; @Comment("岗位") - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) private JobPostEntity jobPost; @Comment("银行编码") diff --git a/src/main/java/cn/lihongjie/coal/employee/service/EmployeeService.java b/src/main/java/cn/lihongjie/coal/employee/service/EmployeeService.java index 45ce1c40..60e17cc1 100644 --- a/src/main/java/cn/lihongjie/coal/employee/service/EmployeeService.java +++ b/src/main/java/cn/lihongjie/coal/employee/service/EmployeeService.java @@ -23,6 +23,7 @@ import cn.lihongjie.coal.jobPost.entity.JobPostEntity; import cn.lihongjie.coal.jobPost.service.JobPostService; import io.vavr.Function1; +import io.vavr.Function2; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; @@ -187,35 +188,41 @@ public class EmployeeService extends BaseService translator = dictionaryService.getTranslator(); + var sexTranslator = translator.apply("sex"); + var nationTranslator = translator.apply("nation"); + var marriageTranslator = translator.apply("marriage"); + var educationTranslator = translator.apply("education"); + List list = ExcelUtils.readFirstSheetToObjectList( download, EmployeeEntity::new, (header, emp, value) -> { switch (header) { - case "姓名" -> emp.setName((String) value); - case "性别" -> emp.setSex(ExcelUtils.getCode(value)); - case "民族" -> emp.setNation(ExcelUtils.getCode(value)); - case "婚姻状况" -> emp.setMarriage(ExcelUtils.getCode(value)); + case "姓名" -> emp.setName(ExcelUtils.getString(value)); + case "性别" -> emp.setSex(ExcelUtils.getCode(value, sexTranslator)); + case "民族" -> emp.setNation(ExcelUtils.getCode(value, nationTranslator)); + case "婚姻状况" -> emp.setMarriage(ExcelUtils.getCode(value, marriageTranslator)); case "入职时间" -> emp.setEntryDate(ExcelUtils.getLocalDate(value)); - case "身份证号" -> emp.setIdCard((String) value); - case "学历" -> emp.setEducation(ExcelUtils.getCode(value)); - case "毕业学校" -> emp.setSchool((String) value); - case "籍贯" -> emp.setNativePlace((String) value); - case "住址" -> emp.setAddress((String) value); - case "手机号" -> emp.setPhone((String) value); + case "身份证号" -> emp.setIdCard(ExcelUtils.getString(value)); + case "学历" -> emp.setEducation(ExcelUtils.getCode(value, educationTranslator)); + case "毕业学校" -> emp.setSchool(ExcelUtils.getString(value)); + case "籍贯" -> emp.setNativePlace(ExcelUtils.getString(value)); + case "住址" -> emp.setAddress(ExcelUtils.getString(value)); + case "手机号" -> emp.setPhone(ExcelUtils.getString(value)); case "部门" -> emp.setDepartment( entityManager.getReference( DepartmentEntity.class, - getDepartmentId.apply((String) value))); + getDepartmentId.apply(ExcelUtils.getString(value)))); case "岗位" -> emp.setJobPost( entityManager.getReference( JobPostEntity.class, - getJobPostId.apply((String) value))); - case "银行卡号" -> emp.setBank(ExcelUtils.getCode(value)); - case "收款人姓名" -> emp.setBankName((String) value); + getJobPostId.apply(ExcelUtils.getString(value)))); + case "银行卡号" -> emp.setBank(ExcelUtils.getString(value)); + case "收款人姓名" -> emp.setBankName(ExcelUtils.getString(value)); } }); diff --git a/src/main/java/cn/lihongjie/coal/file/service/FileService.java b/src/main/java/cn/lihongjie/coal/file/service/FileService.java index 291f3b33..2f2e53d8 100644 --- a/src/main/java/cn/lihongjie/coal/file/service/FileService.java +++ b/src/main/java/cn/lihongjie/coal/file/service/FileService.java @@ -15,9 +15,9 @@ import cn.lihongjie.coal.spring.config.AliyunProperty; import cn.lihongjie.coal.spring.config.HwCloudProperty; import com.aliyun.oss.OSSClient; +import com.aliyun.oss.model.OSSObject; import com.fasterxml.jackson.databind.ObjectMapper; import com.obs.services.ObsClient; -import com.obs.services.model.ObsObject; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -226,8 +226,8 @@ public class FileService extends BaseService { FileEntity fileEntity = repository.get(fileId); String objectKey = getObjectKey(fileEntity); try { - ObsObject object = - obsClient.getObject(aliyunProperty.getOSS().getBucketName(), objectKey); + OSSObject object = + ossClient.getObject(aliyunProperty.getOSS().getBucketName(), objectKey); return object.getObjectContent(); } catch (Exception e) {