添加工资项目初始化

This commit is contained in:
2024-03-19 17:50:16 +08:00
parent b1ccbf7176
commit 40cc9bdc43
11 changed files with 259 additions and 23 deletions

View File

@@ -30,4 +30,18 @@ public interface BaseRepository<T> extends JpaRepository<T, String>, JpaSpecific
}
});
}
default void deleteByOrganizationId(String organizationId) {
this.deleteAll(findAll(
(root, query, cb) -> {
try {
Path<Object> path = root.get("organizationId");
return cb.equal(path, organizationId);
} catch (Exception e) {
return cb.and();
}
}));
}
}

View File

@@ -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());

View File

@@ -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<EmpSalaryEntity> 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);
}
}
}

View File

@@ -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<EmpSalaryItemConfigDto> list(@RequestBody CommonQuery request) {
return this.service.list(request);
}
@PostMapping("/init")
public Object init() {
this.service.initOrg(Ctx.currentUser().getOrganizationId());
return true;
}
}

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -6,4 +6,6 @@ import cn.lihongjie.coal.empSalaryItemConfig.entity.EmpSalaryItemConfigEntity;
import org.springframework.stereotype.Repository;
@Repository
public interface EmpSalaryItemConfigRepository extends BaseRepository<EmpSalaryItemConfigEntity> {}
public interface EmpSalaryItemConfigRepository extends BaseRepository<EmpSalaryItemConfigEntity> {
long deleteByOrganizationIdAndItemType(String organizationId, String itemType);
}

View File

@@ -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<EmpSalaryItemEntity> items = empSalaryItemService.findAll(
new Specification<EmpSalaryItemEntity>() {
@Override
public Predicate toPredicate(
Root<EmpSalaryItemEntity> 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<EmpSalaryItemEntity> items = empSalaryItemService.findAll(
new Specification<EmpSalaryItemEntity>() {
@Override
public Predicate toPredicate(
Root<EmpSalaryItemEntity> 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"));
}
}
}

View File

@@ -1999,7 +1999,16 @@
},
{
"code": "2",
"name": "其他"
"name": "工资标准"
},
{
"code": "3",
"name": "其他辅助字段"
},
{
"code": "4",
"name": "函数"
}
]