From 0a503075707dab00dcf31ad618897e451e7694f6 Mon Sep 17 00:00:00 2001 From: lihongjie0209 Date: Thu, 21 Mar 2024 09:54:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/CreateDeviceWorkOrderDto.java | 3 +- .../dto/DeviceWorkOrderDto.java | 2 +- .../dto/UpdateDeviceWorkOrderDto.java | 3 +- .../entity/DeviceWorkOrderEntity.java | 7 ++-- .../service/DeviceWorkOrderService.java | 13 +++++++ .../dto/CreateDeviceWorkOrderDetailDto.java | 13 ++++++- .../dto/DeviceWorkOrderDetailDto.java | 10 +++++ .../dto/UpdateDeviceWorkOrderDetailDto.java | 13 ++++++- .../dto/CreateEmpSalaryItemDto.java | 3 ++ .../empSalaryItem/dto/EmpSalaryItemDto.java | 4 ++ .../dto/UpdateEmpSalaryItemDto.java | 3 ++ .../entity/EmpSalaryItemEntity.java | 2 + .../service/EmpSalaryItemService.java | 39 +++++++++++++++++-- 13 files changed, 104 insertions(+), 11 deletions(-) diff --git a/src/main/java/cn/lihongjie/coal/deviceWorkOrder/dto/CreateDeviceWorkOrderDto.java b/src/main/java/cn/lihongjie/coal/deviceWorkOrder/dto/CreateDeviceWorkOrderDto.java index 49c64172..d4abd675 100644 --- a/src/main/java/cn/lihongjie/coal/deviceWorkOrder/dto/CreateDeviceWorkOrderDto.java +++ b/src/main/java/cn/lihongjie/coal/deviceWorkOrder/dto/CreateDeviceWorkOrderDto.java @@ -1,6 +1,7 @@ package cn.lihongjie.coal.deviceWorkOrder.dto; import cn.lihongjie.coal.base.dto.OrgCommonDto; +import cn.lihongjie.coal.deviceWorkOrderDetail.dto.CreateDeviceWorkOrderDetailDto; import jakarta.persistence.ManyToOne; @@ -39,7 +40,7 @@ public class CreateDeviceWorkOrderDto extends OrgCommonDto { - private List details; + private List details; diff --git a/src/main/java/cn/lihongjie/coal/deviceWorkOrder/dto/DeviceWorkOrderDto.java b/src/main/java/cn/lihongjie/coal/deviceWorkOrder/dto/DeviceWorkOrderDto.java index f2e51b9f..64ea0cc7 100644 --- a/src/main/java/cn/lihongjie/coal/deviceWorkOrder/dto/DeviceWorkOrderDto.java +++ b/src/main/java/cn/lihongjie/coal/deviceWorkOrder/dto/DeviceWorkOrderDto.java @@ -41,7 +41,7 @@ public class DeviceWorkOrderDto extends OrgCommonDto { + "from t_dictionary d,\n" + " t_dictionary_item i\n" + "where d.id = i.dictionary_id\n" - + " and d.code = 'device.workOrder.status'\n" + + " and d.code = 'device.workOrder.type'\n" + " and i.code = type)") private String typeName; diff --git a/src/main/java/cn/lihongjie/coal/deviceWorkOrder/dto/UpdateDeviceWorkOrderDto.java b/src/main/java/cn/lihongjie/coal/deviceWorkOrder/dto/UpdateDeviceWorkOrderDto.java index b7639155..e9c4781f 100644 --- a/src/main/java/cn/lihongjie/coal/deviceWorkOrder/dto/UpdateDeviceWorkOrderDto.java +++ b/src/main/java/cn/lihongjie/coal/deviceWorkOrder/dto/UpdateDeviceWorkOrderDto.java @@ -1,6 +1,7 @@ package cn.lihongjie.coal.deviceWorkOrder.dto; import cn.lihongjie.coal.base.dto.OrgCommonDto; +import cn.lihongjie.coal.deviceWorkOrderDetail.dto.CreateDeviceWorkOrderDetailDto; import jakarta.persistence.ManyToOne; @@ -37,5 +38,5 @@ public class UpdateDeviceWorkOrderDto extends OrgCommonDto { - private List details; + private List details; } diff --git a/src/main/java/cn/lihongjie/coal/deviceWorkOrder/entity/DeviceWorkOrderEntity.java b/src/main/java/cn/lihongjie/coal/deviceWorkOrder/entity/DeviceWorkOrderEntity.java index d2e248e0..1b92bdd2 100644 --- a/src/main/java/cn/lihongjie/coal/deviceWorkOrder/entity/DeviceWorkOrderEntity.java +++ b/src/main/java/cn/lihongjie/coal/deviceWorkOrder/entity/DeviceWorkOrderEntity.java @@ -5,6 +5,7 @@ import cn.lihongjie.coal.device.entity.DeviceEntity; import cn.lihongjie.coal.deviceWorkOrderDetail.entity.DeviceWorkOrderDetailEntity; import cn.lihongjie.coal.user.entity.UserEntity; +import jakarta.persistence.CascadeType; import jakarta.persistence.Entity; import jakarta.persistence.ManyToOne; import jakarta.persistence.OneToMany; @@ -45,7 +46,7 @@ public class DeviceWorkOrderEntity extends OrgCommonEntity { + "from t_dictionary d,\n" + " t_dictionary_item i\n" + "where d.id = i.dictionary_id\n" - + " and d.code = 'device.workOrder.status'\n" + + " and d.code = 'device.workOrder.type'\n" + " and i.code = type)") private String typeName; @@ -63,7 +64,7 @@ public class DeviceWorkOrderEntity extends OrgCommonEntity { @Comment("归档状态") @ColumnDefault("'0'") - private String archiveStatus; + private String archiveStatus = "0"; @Formula( "(select i.name\n" @@ -75,7 +76,7 @@ public class DeviceWorkOrderEntity extends OrgCommonEntity { private String archiveStatusName; - @OneToMany(mappedBy = "workOrder") + @OneToMany(mappedBy = "workOrder", cascade = {CascadeType.ALL}) private List details; diff --git a/src/main/java/cn/lihongjie/coal/deviceWorkOrder/service/DeviceWorkOrderService.java b/src/main/java/cn/lihongjie/coal/deviceWorkOrder/service/DeviceWorkOrderService.java index 7d6cb30f..df72c5c9 100644 --- a/src/main/java/cn/lihongjie/coal/deviceWorkOrder/service/DeviceWorkOrderService.java +++ b/src/main/java/cn/lihongjie/coal/deviceWorkOrder/service/DeviceWorkOrderService.java @@ -14,6 +14,7 @@ import cn.lihongjie.coal.exception.BizException; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.convert.ConversionService; import org.springframework.data.domain.Page; @@ -35,8 +36,13 @@ public class DeviceWorkOrderService public DeviceWorkOrderDto create(CreateDeviceWorkOrderDto request) { DeviceWorkOrderEntity entity = mapper.toEntity(request); + if (CollectionUtils.isNotEmpty(entity.getDetails())) { + + entity.getDetails().forEach(x -> x.setWorkOrder(entity)); + } this.repository.save(entity); + return getById(entity.getId()); } @@ -51,6 +57,13 @@ public class DeviceWorkOrderService }); this.mapper.updateEntity(entity, request); + + + if (CollectionUtils.isNotEmpty(entity.getDetails())) { + + entity.getDetails().forEach(x -> x.setWorkOrder(entity)); + } + this.repository.save(entity); return getById(entity.getId()); diff --git a/src/main/java/cn/lihongjie/coal/deviceWorkOrderDetail/dto/CreateDeviceWorkOrderDetailDto.java b/src/main/java/cn/lihongjie/coal/deviceWorkOrderDetail/dto/CreateDeviceWorkOrderDetailDto.java index 36c0aeec..0dee00a8 100644 --- a/src/main/java/cn/lihongjie/coal/deviceWorkOrderDetail/dto/CreateDeviceWorkOrderDetailDto.java +++ b/src/main/java/cn/lihongjie/coal/deviceWorkOrderDetail/dto/CreateDeviceWorkOrderDetailDto.java @@ -4,5 +4,16 @@ import cn.lihongjie.coal.base.dto.OrgCommonDto; import lombok.Data; +import java.time.LocalDateTime; + @Data -public class CreateDeviceWorkOrderDetailDto extends OrgCommonDto {} +public class CreateDeviceWorkOrderDetailDto extends OrgCommonDto { + + private LocalDateTime startTime; + + private LocalDateTime endTime; + + + private String content; + +} diff --git a/src/main/java/cn/lihongjie/coal/deviceWorkOrderDetail/dto/DeviceWorkOrderDetailDto.java b/src/main/java/cn/lihongjie/coal/deviceWorkOrderDetail/dto/DeviceWorkOrderDetailDto.java index 719b74f9..74c0c296 100644 --- a/src/main/java/cn/lihongjie/coal/deviceWorkOrderDetail/dto/DeviceWorkOrderDetailDto.java +++ b/src/main/java/cn/lihongjie/coal/deviceWorkOrderDetail/dto/DeviceWorkOrderDetailDto.java @@ -4,8 +4,18 @@ import cn.lihongjie.coal.base.dto.OrgCommonDto; import lombok.Data; +import java.time.LocalDateTime; + @Data public class DeviceWorkOrderDetailDto extends OrgCommonDto { + + private LocalDateTime startTime; + + private LocalDateTime endTime; + + + private String content; + private String archiveStatus; private String archiveStatusName; diff --git a/src/main/java/cn/lihongjie/coal/deviceWorkOrderDetail/dto/UpdateDeviceWorkOrderDetailDto.java b/src/main/java/cn/lihongjie/coal/deviceWorkOrderDetail/dto/UpdateDeviceWorkOrderDetailDto.java index 6e37b170..f789d6cb 100644 --- a/src/main/java/cn/lihongjie/coal/deviceWorkOrderDetail/dto/UpdateDeviceWorkOrderDetailDto.java +++ b/src/main/java/cn/lihongjie/coal/deviceWorkOrderDetail/dto/UpdateDeviceWorkOrderDetailDto.java @@ -4,5 +4,16 @@ import cn.lihongjie.coal.base.dto.OrgCommonDto; import lombok.Data; +import java.time.LocalDateTime; + @Data -public class UpdateDeviceWorkOrderDetailDto extends OrgCommonDto {} +public class UpdateDeviceWorkOrderDetailDto extends OrgCommonDto { + + private LocalDateTime startTime; + + private LocalDateTime endTime; + + + private String content; + +} diff --git a/src/main/java/cn/lihongjie/coal/empSalaryItem/dto/CreateEmpSalaryItemDto.java b/src/main/java/cn/lihongjie/coal/empSalaryItem/dto/CreateEmpSalaryItemDto.java index 19b00dec..7a2a0294 100644 --- a/src/main/java/cn/lihongjie/coal/empSalaryItem/dto/CreateEmpSalaryItemDto.java +++ b/src/main/java/cn/lihongjie/coal/empSalaryItem/dto/CreateEmpSalaryItemDto.java @@ -14,6 +14,9 @@ public class CreateEmpSalaryItemDto extends OrgCommonDto { @Comment("是否展示") private Boolean show; + + @Comment("是否继承") + private Boolean inherit; @Comment("上级名称") private String parentName; diff --git a/src/main/java/cn/lihongjie/coal/empSalaryItem/dto/EmpSalaryItemDto.java b/src/main/java/cn/lihongjie/coal/empSalaryItem/dto/EmpSalaryItemDto.java index 9ffd8216..27f4381b 100644 --- a/src/main/java/cn/lihongjie/coal/empSalaryItem/dto/EmpSalaryItemDto.java +++ b/src/main/java/cn/lihongjie/coal/empSalaryItem/dto/EmpSalaryItemDto.java @@ -18,6 +18,10 @@ public class EmpSalaryItemDto extends OrgCommonDto { @Comment("是否展示") private Boolean show; + @Comment("是否继承") + private Boolean inherit; + + @Comment("工资项目类型") private String itemType; diff --git a/src/main/java/cn/lihongjie/coal/empSalaryItem/dto/UpdateEmpSalaryItemDto.java b/src/main/java/cn/lihongjie/coal/empSalaryItem/dto/UpdateEmpSalaryItemDto.java index eda5b8f5..1fc1debc 100644 --- a/src/main/java/cn/lihongjie/coal/empSalaryItem/dto/UpdateEmpSalaryItemDto.java +++ b/src/main/java/cn/lihongjie/coal/empSalaryItem/dto/UpdateEmpSalaryItemDto.java @@ -18,6 +18,9 @@ public class UpdateEmpSalaryItemDto extends OrgCommonDto { @Comment("是否展示") private Boolean show; + + @Comment("是否继承") + private Boolean inherit; @Comment("工资项目类型") private String itemType; diff --git a/src/main/java/cn/lihongjie/coal/empSalaryItem/entity/EmpSalaryItemEntity.java b/src/main/java/cn/lihongjie/coal/empSalaryItem/entity/EmpSalaryItemEntity.java index b8d49a9b..7eec6c56 100644 --- a/src/main/java/cn/lihongjie/coal/empSalaryItem/entity/EmpSalaryItemEntity.java +++ b/src/main/java/cn/lihongjie/coal/empSalaryItem/entity/EmpSalaryItemEntity.java @@ -18,6 +18,8 @@ public class EmpSalaryItemEntity extends OrgCommonEntity { @Comment("是否展示") private Boolean show; + @Comment("是否继承") + private Boolean inherit; @Comment("上级名称") private String parentName; diff --git a/src/main/java/cn/lihongjie/coal/empSalaryItem/service/EmpSalaryItemService.java b/src/main/java/cn/lihongjie/coal/empSalaryItem/service/EmpSalaryItemService.java index 9b596690..a7b46c2d 100644 --- a/src/main/java/cn/lihongjie/coal/empSalaryItem/service/EmpSalaryItemService.java +++ b/src/main/java/cn/lihongjie/coal/empSalaryItem/service/EmpSalaryItemService.java @@ -4,7 +4,6 @@ import cn.lihongjie.coal.base.dto.CommonQuery; import cn.lihongjie.coal.base.dto.IdRequest; import cn.lihongjie.coal.base.service.BaseService; import cn.lihongjie.coal.common.Ctx; -import cn.lihongjie.coal.common.GroovyScriptUtils; import cn.lihongjie.coal.empSalary.entity.EmpSalaryEntity; import cn.lihongjie.coal.empSalaryBatch.entity.EmpSalaryBatchEntity; import cn.lihongjie.coal.empSalaryItem.dto.CreateEmpSalaryItemDto; @@ -33,6 +32,10 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.RegExUtils; import org.apache.commons.lang3.StringUtils; +import org.codehaus.groovy.ast.ASTNode; +import org.codehaus.groovy.ast.CodeVisitorSupport; +import org.codehaus.groovy.ast.builder.AstStringCompiler; +import org.codehaus.groovy.ast.expr.VariableExpression; import org.codehaus.groovy.control.CompilerConfiguration; import org.jgrapht.alg.cycle.CycleDetector; import org.jgrapht.graph.DefaultDirectedGraph; @@ -171,19 +174,49 @@ public class EmpSalaryItemService formula = tmp; // 如果是工资字段 - if (StringUtils.equals(it.getItemType(), "1")){ + if (StringUtils.equals(it.getItemType(), "1")) { dependOn.add(it.getCode().replace("salary_", "")); } } } item.setDependOn(dependOn); + List variables = new ArrayList<>(); try { - GroovyScriptUtils.validate(formula); + if (!StringUtils.isEmpty(formula)) { + AstStringCompiler compiler = new AstStringCompiler(); + List astNodes = new ArrayList<>(); + + astNodes = compiler.compile(formula); + + astNodes.stream() + .forEach( + x -> + x.visit( + new CodeVisitorSupport() { + @Override + public void visitVariableExpression( + VariableExpression expression) { + variables.add(expression.getName()); + } + })); + } } catch (Exception e) { throw new BizException("无效的公式: " + item.getName()); } + variables.removeAll(Arrays.asList("salary", "emp", "stdMap", "batch")); + + Collection unknownVariables = CollectionUtils.removeAll(variables, dependOn); + + if (!unknownVariables.isEmpty()) { + + throw new BizException( + "工资项目 [" + + StringUtils.defaultIfBlank(item.getName(), item.getCode()) + + "] 公式中存在未知变量: " + + StringUtils.join(unknownVariables, ", ")); + } item.setFormula(formula); }