From 340248439fa15ebc995c3e8585072de6010aed7a Mon Sep 17 00:00:00 2001 From: lihongjie0209 Date: Thu, 21 Mar 2024 11:04:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8=E7=9A=84?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SalaryItemController.java | 54 ----- .../salaryItem/dto/CreateSalaryItemDto.java | 46 ---- .../coal/salaryItem/dto/SalaryItemDto.java | 53 ----- .../salaryItem/dto/UpdateSalaryItemDto.java | 51 ----- .../salaryItem/entity/SalaryItemEntity.java | 61 ------ .../salaryItem/mapper/SalaryItemMapper.java | 18 -- .../repository/SalaryItemRepository.java | 13 -- .../salaryItem/service/SalaryItemService.java | 207 ------------------ 8 files changed, 503 deletions(-) delete mode 100644 src/main/java/cn/lihongjie/coal/salaryItem/controller/SalaryItemController.java delete mode 100644 src/main/java/cn/lihongjie/coal/salaryItem/dto/CreateSalaryItemDto.java delete mode 100644 src/main/java/cn/lihongjie/coal/salaryItem/dto/SalaryItemDto.java delete mode 100644 src/main/java/cn/lihongjie/coal/salaryItem/dto/UpdateSalaryItemDto.java delete mode 100644 src/main/java/cn/lihongjie/coal/salaryItem/entity/SalaryItemEntity.java delete mode 100644 src/main/java/cn/lihongjie/coal/salaryItem/mapper/SalaryItemMapper.java delete mode 100644 src/main/java/cn/lihongjie/coal/salaryItem/repository/SalaryItemRepository.java delete mode 100644 src/main/java/cn/lihongjie/coal/salaryItem/service/SalaryItemService.java diff --git a/src/main/java/cn/lihongjie/coal/salaryItem/controller/SalaryItemController.java b/src/main/java/cn/lihongjie/coal/salaryItem/controller/SalaryItemController.java deleted file mode 100644 index 57ec0487..00000000 --- a/src/main/java/cn/lihongjie/coal/salaryItem/controller/SalaryItemController.java +++ /dev/null @@ -1,54 +0,0 @@ -package cn.lihongjie.coal.salaryItem.controller; - -import cn.lihongjie.coal.annotation.OrgScope; -import cn.lihongjie.coal.annotation.SysLog; -import cn.lihongjie.coal.base.dto.CommonQuery; -import cn.lihongjie.coal.base.dto.IdRequest; -import cn.lihongjie.coal.salaryItem.dto.CreateSalaryItemDto; -import cn.lihongjie.coal.salaryItem.dto.SalaryItemDto; -import cn.lihongjie.coal.salaryItem.dto.UpdateSalaryItemDto; -import cn.lihongjie.coal.salaryItem.service.SalaryItemService; - -import lombok.extern.slf4j.Slf4j; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.Page; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/salaryItem") -@SysLog(module = "工资项目") -@Slf4j -@OrgScope -public class SalaryItemController { - @Autowired private SalaryItemService service; - - @PostMapping("/create") - public SalaryItemDto create(@RequestBody CreateSalaryItemDto request) { - return this.service.create(request); - } - - @PostMapping("/update") - public SalaryItemDto update(@RequestBody UpdateSalaryItemDto request) { - return this.service.update(request); - } - - @PostMapping("/delete") - public Object delete(@RequestBody IdRequest request) { - this.service.delete(request); - return true; - } - - @PostMapping("/getById") - public SalaryItemDto getById(@RequestBody IdRequest request) { - return this.service.getById(request.getId()); - } - - @PostMapping("/list") - public Page list(@RequestBody CommonQuery request) { - return this.service.list(request); - } -} diff --git a/src/main/java/cn/lihongjie/coal/salaryItem/dto/CreateSalaryItemDto.java b/src/main/java/cn/lihongjie/coal/salaryItem/dto/CreateSalaryItemDto.java deleted file mode 100644 index 1ccd914d..00000000 --- a/src/main/java/cn/lihongjie/coal/salaryItem/dto/CreateSalaryItemDto.java +++ /dev/null @@ -1,46 +0,0 @@ -package cn.lihongjie.coal.salaryItem.dto; - -import cn.lihongjie.coal.base.dto.OrgCommonDto; - -import lombok.Data; - -import org.hibernate.annotations.Comment; -import org.hibernate.annotations.Formula; - -@Data -public class CreateSalaryItemDto extends OrgCommonDto { - @Comment("上级名称") - private String parentName; - - @Comment("工资项目类型") - private String itemType; - - @Formula( - "(select i.name\n" - + "from t_dictionary d,\n" - + " t_dictionary_item i\n" - + "where d.id = i.dictionary_id\n" - + " and d.code = 'salaryItem.type'\n" - + " and i.code = item_type)") - @Comment("工资项目类型-名称") - private String itemTypeName; - - @Comment("工资项目录入方式") - private String inputType; - - @Formula( - "(select i.name\n" - + "from t_dictionary d,\n" - + " t_dictionary_item i\n" - + "where d.id = i.dictionary_id\n" - + " and d.code = 'salaryItem.inputType'\n" - + " and i.code = input_type)") - @Comment("工资项目录入方式-名称") - private String inputTypeName; - - @Comment("公式-显示") - private String formulaShow; - - @Comment("公式") - private String formula; -} diff --git a/src/main/java/cn/lihongjie/coal/salaryItem/dto/SalaryItemDto.java b/src/main/java/cn/lihongjie/coal/salaryItem/dto/SalaryItemDto.java deleted file mode 100644 index 1a440061..00000000 --- a/src/main/java/cn/lihongjie/coal/salaryItem/dto/SalaryItemDto.java +++ /dev/null @@ -1,53 +0,0 @@ -package cn.lihongjie.coal.salaryItem.dto; - -import cn.lihongjie.coal.base.dto.OrgCommonDto; - -import lombok.Data; - -import org.hibernate.annotations.Comment; -import org.hibernate.annotations.Formula; - -import java.util.List; - -@Data -public class SalaryItemDto extends OrgCommonDto { - @Comment("上级名称") - private String parentName; - - private String fullName; - - @Comment("工资项目类型") - private String itemType; - - @Formula( - "(select i.name\n" - + "from t_dictionary d,\n" - + " t_dictionary_item i\n" - + "where d.id = i.dictionary_id\n" - + " and d.code = 'salaryItem.type'\n" - + " and i.code = item_type)") - @Comment("工资项目类型-名称") - private String itemTypeName; - - @Comment("工资项目录入方式") - private String inputType; - - @Formula( - "(select i.name\n" - + "from t_dictionary d,\n" - + " t_dictionary_item i\n" - + "where d.id = i.dictionary_id\n" - + " and d.code = 'salaryItem.inputType'\n" - + " and i.code = input_type)") - @Comment("工资项目录入方式-名称") - private String inputTypeName; - - @Comment("公式-显示") - private String formulaShow; - - @Comment("公式") - private String formula; - - @Comment("依赖项目") - private List dependOn; -} diff --git a/src/main/java/cn/lihongjie/coal/salaryItem/dto/UpdateSalaryItemDto.java b/src/main/java/cn/lihongjie/coal/salaryItem/dto/UpdateSalaryItemDto.java deleted file mode 100644 index e868377d..00000000 --- a/src/main/java/cn/lihongjie/coal/salaryItem/dto/UpdateSalaryItemDto.java +++ /dev/null @@ -1,51 +0,0 @@ -package cn.lihongjie.coal.salaryItem.dto; - -import cn.lihongjie.coal.base.dto.OrgCommonDto; - -import lombok.Data; - -import org.hibernate.annotations.Comment; -import org.hibernate.annotations.Formula; - -import java.util.List; - -@Data -public class UpdateSalaryItemDto extends OrgCommonDto { - @Comment("上级名称") - private String parentName; - - @Comment("工资项目类型") - private String itemType; - - @Formula( - "(select i.name\n" - + "from t_dictionary d,\n" - + " t_dictionary_item i\n" - + "where d.id = i.dictionary_id\n" - + " and d.code = 'salaryItem.type'\n" - + " and i.code = item_type)") - @Comment("工资项目类型-名称") - private String itemTypeName; - - @Comment("工资项目录入方式") - private String inputType; - - @Formula( - "(select i.name\n" - + "from t_dictionary d,\n" - + " t_dictionary_item i\n" - + "where d.id = i.dictionary_id\n" - + " and d.code = 'salaryItem.inputType'\n" - + " and i.code = input_type)") - @Comment("工资项目录入方式-名称") - private String inputTypeName; - - @Comment("公式-显示") - private String formulaShow; - - @Comment("公式") - private String formula; - - @Comment("依赖项目") - private List dependOn; -} diff --git a/src/main/java/cn/lihongjie/coal/salaryItem/entity/SalaryItemEntity.java b/src/main/java/cn/lihongjie/coal/salaryItem/entity/SalaryItemEntity.java deleted file mode 100644 index 42c247a1..00000000 --- a/src/main/java/cn/lihongjie/coal/salaryItem/entity/SalaryItemEntity.java +++ /dev/null @@ -1,61 +0,0 @@ -package cn.lihongjie.coal.salaryItem.entity; - -import cn.lihongjie.coal.base.entity.OrgCommonEntity; - -import jakarta.persistence.Entity; - -import lombok.Data; - -import org.hibernate.annotations.Comment; -import org.hibernate.annotations.Formula; - -import java.util.List; - -@Data -@Entity -public class SalaryItemEntity extends OrgCommonEntity { - - @Comment("上级名称") - private String parentName; - - @Formula("(CONCAT(parentName,'-' ,name))") - private String fullName; - - @Comment("工资项目类型") - private String itemType; - - @Formula( - "(select i.name\n" - + "from t_dictionary d,\n" - + " t_dictionary_item i\n" - + "where d.id = i.dictionary_id\n" - + " and d.code = 'salaryItem.type'\n" - + " and i.code = item_type)") - // @Comment("工资项目类型-名称") - private String itemTypeName; - - @Comment("工资项目录入方式") - private String inputType; - - @Formula( - "(select i.name\n" - + "from t_dictionary d,\n" - + " t_dictionary_item i\n" - + "where d.id = i.dictionary_id\n" - + " and d.code = 'salaryItem.inputType'\n" - + " and i.code = input_type)") - // @Comment("工资项目录入方式-名称") - private String inputTypeName; - - @Comment("公式-显示") - private String formulaShow; - - @Comment("公式") - private String formula; - - @Comment("依赖项目") - private List dependOn; - - @Comment("优先级") - private Integer priority; -} diff --git a/src/main/java/cn/lihongjie/coal/salaryItem/mapper/SalaryItemMapper.java b/src/main/java/cn/lihongjie/coal/salaryItem/mapper/SalaryItemMapper.java deleted file mode 100644 index a66e28aa..00000000 --- a/src/main/java/cn/lihongjie/coal/salaryItem/mapper/SalaryItemMapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.lihongjie.coal.salaryItem.mapper; - -import cn.lihongjie.coal.base.mapper.BaseMapper; -import cn.lihongjie.coal.salaryItem.dto.CreateSalaryItemDto; -import cn.lihongjie.coal.salaryItem.dto.SalaryItemDto; -import cn.lihongjie.coal.salaryItem.dto.UpdateSalaryItemDto; -import cn.lihongjie.coal.salaryItem.entity.SalaryItemEntity; - -import org.mapstruct.Mapper; -import org.mapstruct.control.DeepClone; - -@Mapper( - componentModel = org.mapstruct.MappingConstants.ComponentModel.SPRING, - uses = {cn.lihongjie.coal.base.mapper.CommonMapper.class, cn.lihongjie.coal.base.mapper.CommonEntityMapper.class}, - mappingControl = DeepClone.class) -public interface SalaryItemMapper - extends BaseMapper< - SalaryItemEntity, SalaryItemDto, CreateSalaryItemDto, UpdateSalaryItemDto> {} diff --git a/src/main/java/cn/lihongjie/coal/salaryItem/repository/SalaryItemRepository.java b/src/main/java/cn/lihongjie/coal/salaryItem/repository/SalaryItemRepository.java deleted file mode 100644 index 8968f310..00000000 --- a/src/main/java/cn/lihongjie/coal/salaryItem/repository/SalaryItemRepository.java +++ /dev/null @@ -1,13 +0,0 @@ -package cn.lihongjie.coal.salaryItem.repository; - -import cn.lihongjie.coal.base.dao.BaseRepository; -import cn.lihongjie.coal.salaryItem.entity.SalaryItemEntity; - -import org.springframework.stereotype.Repository; - -import java.util.List; - -@Repository -public interface SalaryItemRepository extends BaseRepository { - List findByOrganizationIdAndStatus(String organizationId, Integer status); -} diff --git a/src/main/java/cn/lihongjie/coal/salaryItem/service/SalaryItemService.java b/src/main/java/cn/lihongjie/coal/salaryItem/service/SalaryItemService.java deleted file mode 100644 index cd6e4669..00000000 --- a/src/main/java/cn/lihongjie/coal/salaryItem/service/SalaryItemService.java +++ /dev/null @@ -1,207 +0,0 @@ -package cn.lihongjie.coal.salaryItem.service; - -import cn.lihongjie.coal.base.dto.CommonQuery; -import cn.lihongjie.coal.base.dto.IdRequest; -import cn.lihongjie.coal.base.entity.CommonEntity; -import cn.lihongjie.coal.base.service.BaseService; -import cn.lihongjie.coal.common.GroovyScriptUtils; -import cn.lihongjie.coal.exception.BizException; -import cn.lihongjie.coal.salaryItem.dto.CreateSalaryItemDto; -import cn.lihongjie.coal.salaryItem.dto.SalaryItemDto; -import cn.lihongjie.coal.salaryItem.dto.UpdateSalaryItemDto; -import cn.lihongjie.coal.salaryItem.entity.SalaryItemEntity; -import cn.lihongjie.coal.salaryItem.mapper.SalaryItemMapper; -import cn.lihongjie.coal.salaryItem.repository.SalaryItemRepository; - -import lombok.extern.slf4j.Slf4j; - -import org.apache.commons.lang3.StringUtils; -import org.jgrapht.graph.DefaultDirectedGraph; -import org.jgrapht.graph.DefaultEdge; -import org.jgrapht.traverse.TopologicalOrderIterator; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.convert.ConversionService; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Sort; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.function.Function; -import java.util.stream.Collectors; - -@Service -@Slf4j -@Transactional -public -class SalaryItemService extends BaseService { - @Autowired private SalaryItemRepository repository; - - @Autowired private SalaryItemMapper mapper; - - @Autowired private ConversionService conversionService; - - public SalaryItemDto create(CreateSalaryItemDto request) { - SalaryItemEntity entity = mapper.toEntity(request); - - updateField(entity); - // 校验公式 - this.repository.save(entity); - syncFormula(entity); - return getById(entity.getId()); - } - - private void updateField(SalaryItemEntity entity) { - List allItems = - repository.findByOrganizationIdAndStatus(entity.getOrganizationId(), 1); - - Map nameMap = - allItems.stream() - .collect( - Collectors.toMap( - e -> String.format("【%s】", e.getFullName()), e -> e)); - - Set dependsOn = new HashSet<>(); - - Function mapper = - (String s) -> { - if (nameMap.containsKey(s)) { - String code = nameMap.get(s).getCode(); - dependsOn.add(code); - return code; - } - throw new BizException("公式中的依赖项 {} 不存在", s); - }; - // 生成公式 - - String formula = - GroovyScriptUtils.replaceVariable("【(.*?)】", entity.getFormulaShow(), mapper); - - entity.setDependOn(dependsOn.stream().toList()); - - entity.setFormula(formula); - - try { - - GroovyScriptUtils.variables(formula); - } catch (Exception e) { - throw new BizException("无效的公式"); - } - } - - private void syncFormula(SalaryItemEntity entity) { - - DefaultDirectedGraph graph = - new DefaultDirectedGraph<>(DefaultEdge.class); - List all = - repository.findByOrganizationIdAndStatus(entity.getOrganizationId(), 1); - - Set enabledCode = - all.stream().map(sie -> sie.getCode()).collect(Collectors.toSet()); - - for (SalaryItemEntity def : all) { - - if (StringUtils.equalsIgnoreCase(def.getInputType(), "1")) { - - Iterable dependents = def.getDependOn(); - - for (String d : dependents) { - if (!enabledCode.contains(d)) { - throw new BizException("公式中的依赖项 {} 不存在", d); - } - graph.addVertex(def.getCode()); - graph.addVertex(d); - - graph.addEdge(d, def.getCode()); - } - } - } - - Map codeMap = - all.stream().collect(Collectors.toMap(CommonEntity::getCode, e -> e)); - - Function mapper = - (String s) -> { - if (codeMap.containsKey(s)) { - return "【" + codeMap.get(s).getFullName() + "】"; - } - throw new BizException("公式中的依赖项 {} 不存在", s); - }; - // 生成公式 - - TopologicalOrderIterator iterator = - new TopologicalOrderIterator<>(graph); - - int order = 0; - while (iterator.hasNext()) { - Object next = iterator.next(); - - for (var item : all) { - - if (StringUtils.equalsIgnoreCase(item.getCode(), next + "")) { - item.setPriority(order++); - item.setFormulaShow( - GroovyScriptUtils.replaceVariable( - "item\\d+", entity.getFormula(), mapper)); - break; - } - } - } - this.repository.saveAll(all); - } - - public SalaryItemDto update(UpdateSalaryItemDto request) { - SalaryItemEntity entity = this.repository.get(request.getId()); - - - this.mapper.updateEntity(entity, request); - - updateField(entity); - this.repository.save(entity); - - syncFormula(entity); - return getById(entity.getId()); - } - - public void delete(IdRequest request) { - this.repository.deleteAllById(request.getIds()); - } - - public SalaryItemDto getById(String id) { - SalaryItemEntity entity = repository.get(id); - - return mapper.toDto(entity); - } - - public Page list(CommonQuery query) { - Page page = - repository.findAll( - query.specification(conversionService), - PageRequest.of( - query.getPageNo(), - query.getPageSize(), - Sort.by(query.getOrders()))); - - return page.map(this.mapper::toDto); - } - - public void initOrgDefault(String organizationId) { - - for (int i = 0; i < 50; i++) { - - SalaryItemEntity item = new SalaryItemEntity(); - item.setCode("item" + i); - item.setInputType("1"); - item.setItemType("1"); - item.setStatus(0); - - item.setOrganizationId(organizationId); - - this.repository.save(item); - } - } -}