diff --git a/src/main/java/cn/lihongjie/coal/base/dao/BaseRepository.java b/src/main/java/cn/lihongjie/coal/base/dao/BaseRepository.java index bdf85633..73c9c390 100644 --- a/src/main/java/cn/lihongjie/coal/base/dao/BaseRepository.java +++ b/src/main/java/cn/lihongjie/coal/base/dao/BaseRepository.java @@ -30,4 +30,18 @@ public interface BaseRepository extends JpaRepository, JpaSpecific } }); } + + + default void deleteByOrganizationId(String organizationId) { + this.deleteAll(findAll( + (root, query, cb) -> { + try { + + Path path = root.get("organizationId"); + return cb.equal(path, organizationId); + } catch (Exception e) { + return cb.and(); + } + })); + } } diff --git a/src/main/java/cn/lihongjie/coal/empSalaryItem/controller/EmpSalaryItemController.java b/src/main/java/cn/lihongjie/coal/empSalaryItem/controller/EmpSalaryItemController.java index 34451484..7b3006d0 100644 --- a/src/main/java/cn/lihongjie/coal/empSalaryItem/controller/EmpSalaryItemController.java +++ b/src/main/java/cn/lihongjie/coal/empSalaryItem/controller/EmpSalaryItemController.java @@ -4,6 +4,7 @@ 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.common.Ctx; import cn.lihongjie.coal.empSalaryItem.dto.CreateEmpSalaryItemDto; import cn.lihongjie.coal.empSalaryItem.dto.EmpSalaryItemDto; import cn.lihongjie.coal.empSalaryItem.dto.UpdateEmpSalaryItemDto; @@ -42,6 +43,12 @@ public class EmpSalaryItemController { return true; } + @PostMapping("/init") + public Object init() { + this.service.initOrg(Ctx.currentUser().getOrganizationId()); + return true; + } + @PostMapping("/getById") public EmpSalaryItemDto getById(@RequestBody IdRequest request) { return this.service.getById(request.getId()); 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 2520476a..fd131071 100644 --- a/src/main/java/cn/lihongjie/coal/empSalaryItem/service/EmpSalaryItemService.java +++ b/src/main/java/cn/lihongjie/coal/empSalaryItem/service/EmpSalaryItemService.java @@ -3,14 +3,13 @@ package cn.lihongjie.coal.empSalaryItem.service; 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.empSalary.entity.EmpSalaryEntity; -import cn.lihongjie.coal.empSalaryBatch.entity.EmpSalaryBatchEntity; import cn.lihongjie.coal.empSalaryItem.dto.CreateEmpSalaryItemDto; import cn.lihongjie.coal.empSalaryItem.dto.EmpSalaryItemDto; import cn.lihongjie.coal.empSalaryItem.dto.UpdateEmpSalaryItemDto; import cn.lihongjie.coal.empSalaryItem.entity.EmpSalaryItemEntity; import cn.lihongjie.coal.empSalaryItem.mapper.EmpSalaryItemMapper; import cn.lihongjie.coal.empSalaryItem.repository.EmpSalaryItemRepository; +import cn.lihongjie.coal.empSalaryItemConfig.service.EmpSalaryItemConfigService; import lombok.extern.slf4j.Slf4j; @@ -22,7 +21,7 @@ import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.List; +import java.util.ArrayList; @Service @Slf4j @@ -35,10 +34,13 @@ public class EmpSalaryItemService @Autowired private ConversionService conversionService; + @Autowired + private EmpSalaryItemConfigService empSalaryItemConfigService; public EmpSalaryItemDto create(CreateEmpSalaryItemDto request) { EmpSalaryItemEntity entity = mapper.toEntity(request); this.repository.save(entity); + empSalaryItemConfigService.initOrg(entity.getOrganizationId()); return getById(entity.getId()); } @@ -47,7 +49,7 @@ public class EmpSalaryItemService this.mapper.updateEntity(entity, request); this.repository.save(entity); - + empSalaryItemConfigService.initOrg(entity.getOrganizationId()); return getById(entity.getId()); } @@ -75,17 +77,26 @@ public class EmpSalaryItemService - public void calculateSalary(EmpSalaryBatchEntity batch, List list) { - - // 获取所有的工资项目 - - - // 准备计算上下文 - - - // 计算工资项目 + public void initOrg(String organizationId) { + this.repository.deleteByOrganizationId(organizationId); + for (int i = 0; i < 50; i++) { + EmpSalaryItemEntity item = new EmpSalaryItemEntity(); + item.setItemType("1"); + item.setInputType("1"); + item.setFormulaShow(""); + item.setFormula(""); + item.setDependOn(new ArrayList<>()); + item.setPriority(0); + item.setOrganizationId(organizationId); + item.setName(""); + item.setCode("item" + i); + item.setRemarks(""); + item.setSortKey(i); + item.setStatus(0); + repository.save(item); + } } } diff --git a/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/controller/EmpSalaryItemConfigController.java b/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/controller/EmpSalaryItemConfigController.java index ffaa2baf..407cb44b 100644 --- a/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/controller/EmpSalaryItemConfigController.java +++ b/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/controller/EmpSalaryItemConfigController.java @@ -1,8 +1,10 @@ package cn.lihongjie.coal.empSalaryItemConfig.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.common.Ctx; import cn.lihongjie.coal.empSalaryItemConfig.dto.CreateEmpSalaryItemConfigDto; import cn.lihongjie.coal.empSalaryItemConfig.dto.EmpSalaryItemConfigDto; import cn.lihongjie.coal.empSalaryItemConfig.dto.UpdateEmpSalaryItemConfigDto; @@ -21,6 +23,7 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/empSalaryItemConfig") @SysLog(module = "工资公式配置") @Slf4j +@OrgScope public class EmpSalaryItemConfigController { @Autowired private EmpSalaryItemConfigService service; @@ -49,4 +52,11 @@ public class EmpSalaryItemConfigController { public Page list(@RequestBody CommonQuery request) { return this.service.list(request); } + + + @PostMapping("/init") + public Object init() { + this.service.initOrg(Ctx.currentUser().getOrganizationId()); + return true; + } } diff --git a/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/dto/CreateEmpSalaryItemConfigDto.java b/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/dto/CreateEmpSalaryItemConfigDto.java index 2fd3b857..cf2a4692 100644 --- a/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/dto/CreateEmpSalaryItemConfigDto.java +++ b/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/dto/CreateEmpSalaryItemConfigDto.java @@ -1,6 +1,7 @@ package cn.lihongjie.coal.empSalaryItemConfig.dto; -import cn.lihongjie.coal.base.dto.CommonDto; + +import cn.lihongjie.coal.base.dto.OrgCommonDto; import lombok.Data; @@ -8,7 +9,7 @@ import org.hibernate.annotations.Comment; import org.hibernate.annotations.Formula; @Data -public class CreateEmpSalaryItemConfigDto extends CommonDto { +public class CreateEmpSalaryItemConfigDto extends OrgCommonDto { @Comment("类别") private String itemType; diff --git a/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/dto/EmpSalaryItemConfigDto.java b/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/dto/EmpSalaryItemConfigDto.java index 68000720..49922561 100644 --- a/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/dto/EmpSalaryItemConfigDto.java +++ b/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/dto/EmpSalaryItemConfigDto.java @@ -1,6 +1,7 @@ package cn.lihongjie.coal.empSalaryItemConfig.dto; -import cn.lihongjie.coal.base.dto.CommonDto; + +import cn.lihongjie.coal.base.dto.OrgCommonDto; import lombok.Data; @@ -8,7 +9,7 @@ import org.hibernate.annotations.Comment; import org.hibernate.annotations.Formula; @Data -public class EmpSalaryItemConfigDto extends CommonDto { +public class EmpSalaryItemConfigDto extends OrgCommonDto { @Comment("类别") private String itemType; @@ -31,4 +32,8 @@ public class EmpSalaryItemConfigDto extends CommonDto { @Comment("表达式-展示") private String expressionShow; + + + @Comment("是否系统预设") + private Boolean systemPreset; } diff --git a/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/dto/UpdateEmpSalaryItemConfigDto.java b/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/dto/UpdateEmpSalaryItemConfigDto.java index 6ea798d9..b17dabcc 100644 --- a/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/dto/UpdateEmpSalaryItemConfigDto.java +++ b/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/dto/UpdateEmpSalaryItemConfigDto.java @@ -1,6 +1,7 @@ package cn.lihongjie.coal.empSalaryItemConfig.dto; -import cn.lihongjie.coal.base.dto.CommonDto; + +import cn.lihongjie.coal.base.dto.OrgCommonDto; import lombok.Data; @@ -8,7 +9,7 @@ import org.hibernate.annotations.Comment; import org.hibernate.annotations.Formula; @Data -public class UpdateEmpSalaryItemConfigDto extends CommonDto { +public class UpdateEmpSalaryItemConfigDto extends OrgCommonDto { @Comment("类别") private String itemType; diff --git a/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/entity/EmpSalaryItemConfigEntity.java b/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/entity/EmpSalaryItemConfigEntity.java index d353737a..5b642d1a 100644 --- a/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/entity/EmpSalaryItemConfigEntity.java +++ b/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/entity/EmpSalaryItemConfigEntity.java @@ -1,6 +1,7 @@ package cn.lihongjie.coal.empSalaryItemConfig.entity; -import cn.lihongjie.coal.base.entity.CommonEntity; + +import cn.lihongjie.coal.base.entity.OrgCommonEntity; import jakarta.persistence.Entity; @@ -11,7 +12,7 @@ import org.hibernate.annotations.Formula; @Data @Entity -public class EmpSalaryItemConfigEntity extends CommonEntity { +public class EmpSalaryItemConfigEntity extends OrgCommonEntity { @Comment("类别") private String itemType; @@ -40,6 +41,10 @@ public class EmpSalaryItemConfigEntity extends CommonEntity { @Comment("字典编码") private String dictCode; + + + @Comment("是否系统预设") + private Boolean systemPreset; diff --git a/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/repository/EmpSalaryItemConfigRepository.java b/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/repository/EmpSalaryItemConfigRepository.java index 11b27da8..9c5574ce 100644 --- a/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/repository/EmpSalaryItemConfigRepository.java +++ b/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/repository/EmpSalaryItemConfigRepository.java @@ -6,4 +6,6 @@ import cn.lihongjie.coal.empSalaryItemConfig.entity.EmpSalaryItemConfigEntity; import org.springframework.stereotype.Repository; @Repository -public interface EmpSalaryItemConfigRepository extends BaseRepository {} +public interface EmpSalaryItemConfigRepository extends BaseRepository { + long deleteByOrganizationIdAndItemType(String organizationId, String itemType); +} diff --git a/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/service/EmpSalaryItemConfigService.java b/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/service/EmpSalaryItemConfigService.java index 98c412d9..d5b01d97 100644 --- a/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/service/EmpSalaryItemConfigService.java +++ b/src/main/java/cn/lihongjie/coal/empSalaryItemConfig/service/EmpSalaryItemConfigService.java @@ -3,6 +3,8 @@ package cn.lihongjie.coal.empSalaryItemConfig.service; 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.empSalaryItem.entity.EmpSalaryItemEntity; +import cn.lihongjie.coal.empSalaryItem.service.EmpSalaryItemService; import cn.lihongjie.coal.empSalaryItemConfig.dto.CreateEmpSalaryItemConfigDto; import cn.lihongjie.coal.empSalaryItemConfig.dto.EmpSalaryItemConfigDto; import cn.lihongjie.coal.empSalaryItemConfig.dto.UpdateEmpSalaryItemConfigDto; @@ -10,16 +12,25 @@ import cn.lihongjie.coal.empSalaryItemConfig.entity.EmpSalaryItemConfigEntity; import cn.lihongjie.coal.empSalaryItemConfig.mapper.EmpSalaryItemConfigMapper; import cn.lihongjie.coal.empSalaryItemConfig.repository.EmpSalaryItemConfigRepository; +import jakarta.persistence.criteria.CriteriaBuilder; +import jakarta.persistence.criteria.CriteriaQuery; +import jakarta.persistence.criteria.Predicate; +import jakarta.persistence.criteria.Root; + import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; 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.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + @Service @Slf4j @Transactional @@ -68,4 +79,164 @@ public class EmpSalaryItemConfigService return page.map(this.mapper::toDto); } + + + @Autowired EmpSalaryItemService empSalaryItemService; + + @NotNull + private static EmpSalaryItemConfigEntity createEmpConfig(String organizationId, String expression, String expressionShow, boolean systemPreset, String itemType) { + EmpSalaryItemConfigEntity config = new EmpSalaryItemConfigEntity(); + config.setOrganizationId(organizationId); + config.setItemType(itemType); + config.setExpression(expression); + config.setExpressionShow(expressionShow); + config.setSystemPreset(systemPreset); + return config; + } + + public void initOrg(String organizationId) { + + // 所有启用的工资项目, 系统预设, 无法编辑 + + initSalaItem(organizationId); + + // 人员信息字段, 可编辑 + + initEmp(organizationId); + + // 工资标准字段, 系统预设, 无法编辑 + + initSalaStandard(organizationId); + + // 其他辅助信息字段, 系统预设, 无法编辑 + + initOthers(organizationId); + + // 自定义函数, 可编辑 + + initCustomFunctions(organizationId); + + + + + + + + + + + + + + + + + + + + + + + } + + private void initCustomFunctions(String organizationId) { + + } + + private void initOthers(String organizationId) { + long delete = repository.deleteByOrganizationIdAndItemType(organizationId, "3"); + + + this.repository.save(createEmpConfig(organizationId, "batch?.batchYearMonth?.year", "发放年度", false, "3")); + this.repository.save(createEmpConfig(organizationId, "batch?.batchYearMonth?.monthValue", "发放月份", false, "3")); + this.repository.save(createEmpConfig(organizationId, "batch?.batchNo", "发放批次号", false, "3")); + + } + + private void initSalaStandard(String organizationId) { + + long delete = repository.deleteByOrganizationIdAndItemType(organizationId, "2"); + + List items = empSalaryItemService.findAll( + new Specification() { + @Override + public Predicate toPredicate( + Root root, + CriteriaQuery query, + CriteriaBuilder criteriaBuilder) { + return criteriaBuilder.and( + criteriaBuilder.equal(root.get("organizationId"), organizationId), + criteriaBuilder.equal(root.get("status"), 1)); + } + }); + + + for (EmpSalaryItemEntity item : items) { + + this.repository.save(createEmpConfig(organizationId, "stdMap[\"" + item.getName() + "\"]", item.getName(),true, "2")); + } + } + + private void initEmp(String organizationId) { + + long delete = repository.deleteByOrganizationIdAndItemType(organizationId, "0"); + + + this.repository.save(createEmpConfig(organizationId, "emp?.department?.code", "部门编码", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp?.department?.name", "部门名称", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp?.jobPost?.code", "岗位编码", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp?.jobPost?.name", "岗位名称", false, "0")); + + + this.repository.save(createEmpConfig(organizationId, "emp.insurance1Base", "养老保险基数", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.insurance1Base", "养老保险基数", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.insurance1Percent", "养老保险比例", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.insurance2Base", "医疗保险基数", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.insurance2Percent", "医疗保险比例", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.insurance3Base", "失业保险基数", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.insurance3Percent", "失业保险比例", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.insurance4Base", "工伤保险基数", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.insurance4Percent", "工伤保险比例", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.insurance5Base", "生育保险基数", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.insurance5Percent", "生育保险比例", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.insurance6Base", "住房公积金基数", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.insurance6Percent", "住房公积金比例", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.name", "姓名", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.sex", "性别", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.nation", "民族", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.marriage", "婚姻状况", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.entryDate", "入职时间", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.resignDate", "离职时间", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.idCard", "身份证号", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.education", "学历", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.phone", "手机号", false, "0")); + this.repository.save(createEmpConfig(organizationId, "emp.empStatus", "员工状态", false, "0")); + + + } + + private void initSalaItem(String organizationId) { + long delete = repository.deleteByOrganizationIdAndItemType(organizationId, "1"); + + List items = empSalaryItemService.findAll( + new Specification() { + @Override + public Predicate toPredicate( + Root root, + CriteriaQuery query, + CriteriaBuilder criteriaBuilder) { + return criteriaBuilder.and( + criteriaBuilder.equal(root.get("organizationId"), organizationId), + criteriaBuilder.equal(root.get("status"), 1)); + } + }); + + + for (EmpSalaryItemEntity item : items) { + + this.repository.save(createEmpConfig(organizationId, "salary." + item.getCode(), item.getName(), true, "1")); + } + } + + } diff --git a/src/main/resources/config/dictionary.json b/src/main/resources/config/dictionary.json index c9a3444e..4b39125a 100644 --- a/src/main/resources/config/dictionary.json +++ b/src/main/resources/config/dictionary.json @@ -1999,7 +1999,16 @@ }, { "code": "2", - "name": "其他" + "name": "工资标准" + }, + + { + "code": "3", + "name": "其他辅助字段" + }, + { + "code": "4", + "name": "函数" } ]