weaver-hrm-salary/src/com/engine/salary/wrapper/SalaryItemWrapper.java

325 lines
14 KiB
Java
Raw Normal View History

2022-03-21 09:33:21 +08:00
package com.engine.salary.wrapper;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
2024-08-06 14:24:08 +08:00
import com.engine.hrmelog.entity.dto.LoggerContext;
2022-03-21 09:33:21 +08:00
import com.engine.salary.component.WeaFormOption;
2024-02-21 18:19:02 +08:00
import com.engine.salary.config.SalaryElogConfig;
2022-04-15 13:54:47 +08:00
import com.engine.salary.entity.salaryformula.ExpressFormula;
2022-03-21 20:09:10 +08:00
import com.engine.salary.entity.salaryitem.bo.SalaryItemBO;
import com.engine.salary.entity.salaryitem.bo.SysSalaryItemBO;
import com.engine.salary.entity.salaryitem.dto.SalaryItemFormDTO;
import com.engine.salary.entity.salaryitem.dto.SalaryItemListDTO;
2024-08-06 14:24:08 +08:00
import com.engine.salary.entity.salaryitem.param.*;
2022-03-21 09:33:21 +08:00
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
2022-03-21 20:09:10 +08:00
import com.engine.salary.entity.salaryitem.po.SysSalaryItemPO;
import com.engine.salary.entity.salarysob.po.SalarySobItemPO;
import com.engine.salary.enums.*;
2022-04-28 15:02:11 +08:00
import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum;
2022-03-21 20:09:10 +08:00
import com.engine.salary.exception.SalaryRunTimeException;
2023-02-16 09:16:00 +08:00
import com.engine.salary.service.*;
import com.engine.salary.service.impl.*;
import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum;
import com.engine.salary.sys.service.SalarySysConfService;
import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl;
2022-03-21 09:33:21 +08:00
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryI18nUtil;
2024-08-07 09:06:09 +08:00
import com.engine.salary.util.excel.ImportExcelResponse;
2022-04-15 13:54:47 +08:00
import com.engine.salary.util.page.PageInfo;
2022-03-22 10:42:26 +08:00
import com.engine.salary.util.valid.RuntimeTypeEnum;
2022-03-21 20:09:10 +08:00
import com.engine.salary.util.valid.ValidUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.math.NumberUtils;
import org.apache.commons.lang3.StringUtils;
2024-08-06 14:24:08 +08:00
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
2022-03-21 09:33:21 +08:00
import weaver.hrm.User;
import java.util.*;
/**
* 薪资项目
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
public class SalaryItemWrapper extends Service {
private SalaryItemService getSalaryItemService(User user) {
2023-02-16 09:16:00 +08:00
return ServiceUtil.getService(SalaryItemServiceImpl.class, user);
2022-03-21 09:33:21 +08:00
}
2022-03-21 20:09:10 +08:00
private SysSalaryItemService getSysSalaryItemService(User user) {
2023-02-16 09:16:00 +08:00
return ServiceUtil.getService(SysSalaryItemServiceImpl.class, user);
2022-03-21 20:09:10 +08:00
}
2022-04-15 13:54:47 +08:00
private SalaryFormulaService getSalaryFormulaService(User user) {
2023-02-16 09:16:00 +08:00
return ServiceUtil.getService(SalaryFormulaServiceImpl.class, user);
2022-04-15 13:54:47 +08:00
}
2022-03-21 09:33:21 +08:00
2022-03-21 20:09:10 +08:00
private SalarySobItemService getSalarySobItemService(User user) {
2023-02-16 09:16:00 +08:00
return ServiceUtil.getService(SalarySobItemServiceImpl.class, user);
}
private SalarySobBackItemService getSalarySobBackItemService(User user) {
return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user);
2022-03-21 20:09:10 +08:00
}
2022-03-21 09:33:21 +08:00
private SalarySysConfService getSalarySysConfService(User user) {
return ServiceUtil.getService(SalarySysConfServiceImpl.class, user);
}
2022-03-21 09:33:21 +08:00
/**
* 薪资项目列表
*
* @param searchParam 查询参数
* @return
*/
public PageInfo<SalaryItemListDTO> listPage(SalaryItemSearchParam searchParam) {
2023-02-17 14:37:59 +08:00
SalaryItemServiceImpl.UsingItem usingItem = getSalaryItemService(user).getUsingItem();
List<Long> usingFormulaIds = usingItem.getUsingFormulaIds();
List<Long> usingItemIds = usingItem.getUsingItemIds();
List<String> usingCodes = usingItem.getUsingCodes();
2023-02-16 10:44:13 +08:00
//删除无用公式
2024-05-06 16:03:29 +08:00
// getSalaryFormulaService(user).deleteNotIn(usingFormulaIds);
2023-02-15 17:36:29 +08:00
//薪资档案引用的项目转移到字段管理功能项
searchParam.setUseInEmployeeSalary(SalaryOnOffEnum.OFF.getValue());
2022-04-15 13:54:47 +08:00
// 1、查询薪资项目
PageInfo<SalaryItemPO> page = getSalaryItemService(user).listPageByParam(searchParam);
List<SalaryItemPO> salaryItemList = page.getList();
//最终返回的分页对象
PageInfo<SalaryItemListDTO> salaryItemListDTOPage = new PageInfo<>(SalaryItemListDTO.class);
salaryItemListDTOPage.setPageSize(page.getPageSize());
salaryItemListDTOPage.setPageNum(page.getPageNum());
salaryItemListDTOPage.setTotal(page.getTotal());
//是否需要系统算税,不需要则去除系统项目
TaxDeclarationFunctionEnum taxDeclarationFunctionEnum = getSalarySysConfService(user).getTaxDeclaration();
2022-04-15 13:54:47 +08:00
// 被薪资账套引用的薪资项目
if (CollectionUtils.isNotEmpty(salaryItemList)) {
//2、填充公式内容
Set<Long> formulaIds = SalaryEntityUtil.properties(salaryItemList, SalaryItemPO::getFormulaId);
List<ExpressFormula> expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds);
// 查询系统薪资项目
Set<Long> sysSalaryItemIds = SalaryEntityUtil.properties(salaryItemList, SalaryItemPO::getSysSalaryItemId);
List<SysSalaryItemPO> sysSalaryItemPOS = getSysSalaryItemService(user).listByIds(sysSalaryItemIds);
2022-04-15 13:54:47 +08:00
// 转换成薪资项目列表dto
List<SalaryItemListDTO> salaryItemListDTOS = SalaryItemBO.convert2ListDTO(salaryItemList, expressFormulas, sysSalaryItemPOS);
2023-02-16 14:53:03 +08:00
//系统项目不删除
2022-09-29 16:21:02 +08:00
salaryItemListDTOS.forEach(dto -> {
if ((taxDeclarationFunctionEnum != TaxDeclarationFunctionEnum.CLOSURE && StringUtils.isNotBlank(dto.getSystemName()))
|| usingItemIds.contains(dto.getId())
|| usingCodes.contains(dto.getCode())) {
2022-09-29 16:21:02 +08:00
dto.setCanDelete(false);
}
});
2022-04-15 13:54:47 +08:00
salaryItemListDTOPage.setList(salaryItemListDTOS);
}
2022-03-21 20:09:10 +08:00
2022-04-15 13:54:47 +08:00
return salaryItemListDTOPage;
2022-03-21 20:09:10 +08:00
2022-04-15 13:54:47 +08:00
}
2022-03-23 18:41:38 +08:00
2022-03-21 20:09:10 +08:00
/**
* 可以删除的薪资项目列表
*
* @param searchParam 查询人员
* @return
*/
2022-04-15 13:54:47 +08:00
public PageInfo<SalaryItemListDTO> listPage4CanDelete(SalaryItemSearchParam searchParam) {
2022-03-21 20:09:10 +08:00
// 查询所有薪资账套中的薪资项目副本
List<SalarySobItemPO> salarySobItemPOS = getSalarySobItemService(user).list();
// 被引用的薪资项目id
Set<Long> salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId);
// 排除被引用的薪资项目(被引用的薪资项目不可以删除)
searchParam.setExcludeIds(salaryItemIds);
// 转换成前端所需的数据格式
return listPage(searchParam);
2022-03-21 20:09:10 +08:00
}
/**
* 根据主键id获取薪资项目详情
*
* @param ids 薪资项目的主键id
* @return
*/
public List<SalaryItemListDTO> listByIds(Collection<Long> ids) {
List<SalaryItemPO> salaryItemPOS = getSalaryItemService(user).listByIds(ids);
if (CollectionUtils.isEmpty(salaryItemPOS)) {
return Collections.emptyList();
}
// 查询公式详情
Set<Long> formulaIds = SalaryEntityUtil.properties(salaryItemPOS, SalaryItemPO::getFormulaId);
2022-04-16 13:51:53 +08:00
List<ExpressFormula> expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds);
// 查询系统薪资项目
Set<Long> sysSalaryItemIds = SalaryEntityUtil.properties(salaryItemPOS, SalaryItemPO::getSysSalaryItemId);
List<SysSalaryItemPO> sysSalaryItemPOS = getSysSalaryItemService(user).listByIds(sysSalaryItemIds);
2022-03-21 20:09:10 +08:00
// 转换成薪资项目列表dto
return SalaryItemBO.convert2ListDTO(salaryItemPOS, expressFormulas, sysSalaryItemPOS);
2022-03-21 09:33:21 +08:00
}
2022-03-21 20:09:10 +08:00
/**
* 薪资项目详情
*
* @param id 主键id
* @return
*/
public SalaryItemFormDTO getForm(Long id) {
SalaryItemFormDTO salaryItemFormDTO = new SalaryItemFormDTO();
// 默认可以编辑
salaryItemFormDTO.setCanEdit(NumberUtils.INTEGER_ONE);
if (!Objects.isNull(id)) {
// 查询薪资项目
SalaryItemPO salaryItemPO = getSalaryItemService(user).getById(id);
// 系统薪资项目
SysSalaryItemPO sysSalaryItemPO = getSysSalaryItemService(user).getById(id);
if (Objects.isNull(salaryItemPO) && Objects.isNull(sysSalaryItemPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98299, "参数错误,薪资项目不存在或已被删除"));
}
2022-04-16 13:51:53 +08:00
ExpressFormula expressFormula;
2022-03-17 15:14:35 +08:00
// // 转换成薪资项目详情dto
2022-03-21 20:09:10 +08:00
if (Objects.isNull(salaryItemPO)) {
salaryItemFormDTO = SysSalaryItemBO.convert2FormDTO(sysSalaryItemPO);
2022-04-16 13:51:53 +08:00
expressFormula = getSalaryFormulaService(user).getExpressFormula(sysSalaryItemPO.getFormulaId());
2022-03-21 20:09:10 +08:00
} else {
salaryItemFormDTO = SalaryItemBO.convert2FormDTO(salaryItemPO);
2022-04-16 13:51:53 +08:00
expressFormula = getSalaryFormulaService(user).getExpressFormula(salaryItemPO.getFormulaId());
2022-03-21 20:09:10 +08:00
}
2023-07-24 17:11:19 +08:00
String formulaContent = Optional.ofNullable(expressFormula).map(ExpressFormula::getFormula).orElse("");
salaryItemFormDTO.setFormulaContent(formulaContent);
salaryItemFormDTO.setOriginFormulaContent(salaryItemFormDTO.getValueType().equals(SalaryValueTypeEnum.FORMULA.getValue()) ? formulaContent : "");
salaryItemFormDTO.setOriginSqlContent(salaryItemFormDTO.getValueType().equals(SalaryValueTypeEnum.SQL.getValue()) ? formulaContent : "");
2022-03-21 20:09:10 +08:00
}
return salaryItemFormDTO;
}
2022-03-21 09:33:21 +08:00
/**
* 获取薪资项目可选的类型与属性有联动
*
* @return
*/
public Map<String, List<WeaFormOption>> listSalaryItemTypeOption() {
return SalaryEntityUtil.group2ListMap(Arrays.asList(SalaryItemTypeEnum.values()),
e -> e.getCategory().name(),
e -> new WeaFormOption(e.name(), SalaryI18nUtil.getI18nLabel(e.getLabelId(), e.getDefaultLabel())));
}
/**
* 保存薪资项目
*
* @param saveParam 保存参数
*/
public void save(SalaryItemSaveParam saveParam) {
2022-03-21 20:09:10 +08:00
ValidUtil.doValidator(saveParam);
2022-04-28 15:02:11 +08:00
validParam(saveParam);
2024-02-21 18:19:02 +08:00
SalaryItemPO salaryItemPO = getSalaryItemService(user).save(saveParam);
// 记录日志
LoggerContext<SalaryItemPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(String.valueOf(salaryItemPO.getId()));
loggerContext.setTargetName(salaryItemPO.getName());
loggerContext.setOperateType(OperateTypeEnum.ADD.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新建薪资项目"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新建薪资项目") + ": " + salaryItemPO.getName());
loggerContext.setNewValues(salaryItemPO);
SalaryElogConfig.salaryItemLoggerTemplate.write(loggerContext);
2022-03-21 09:33:21 +08:00
}
2022-04-28 15:02:11 +08:00
private void validParam(SalaryItemSaveParam saveParam) {
if (SalarySystemTypeEnum.parseByValue(saveParam.getSystemType()) == null) {
throw new SalaryRunTimeException("系统内置的薪资项目异常");
}
if (SalaryRoundingModeEnum.parseByValue(saveParam.getRoundingMode()) == null) {
throw new SalaryRunTimeException("舍入规则异常");
}
if (SalaryValueTypeEnum.parseByValue(saveParam.getValueType()) == null) {
throw new SalaryRunTimeException("取值方式异常");
}
if (SalaryDataTypeEnum.parseByValue(saveParam.getDataType()) == null) {
throw new SalaryRunTimeException("字段类型异常");
}
2023-08-31 10:23:14 +08:00
if (saveParam.getName().contains("{") || saveParam.getName().contains("}") || saveParam.getName().contains(".")) {
throw new SalaryRunTimeException("薪资项目名称中不得包含大括号或点");
}
2022-04-28 15:02:11 +08:00
}
2022-03-21 09:33:21 +08:00
/**
* 编辑薪资项目
*
* @param saveParam 更新参数
*/
public void update(SalaryItemSaveParam saveParam) {
2022-03-22 10:42:26 +08:00
ValidUtil.doValidator(saveParam, RuntimeTypeEnum.UPDATE);
2022-04-28 15:02:11 +08:00
validParam(saveParam);
2024-02-21 18:19:02 +08:00
SalaryItemPO salaryItemPO = getSalaryItemService(user).update(saveParam);
// 记录日志
SalaryItemPO newSalaryItemPO = getSalaryItemService(user).getById(salaryItemPO.getId());
LoggerContext<SalaryItemPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(String.valueOf(newSalaryItemPO.getId()));
loggerContext.setTargetName(newSalaryItemPO.getName());
loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "编辑字段"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "编辑字段") + ": " + newSalaryItemPO.getName());
loggerContext.setOldValues(salaryItemPO);
loggerContext.setNewValues(newSalaryItemPO);
SalaryElogConfig.salaryItemLoggerTemplate.write(loggerContext);
2022-03-21 09:33:21 +08:00
}
/**
* 删除薪资项目
*
2022-03-21 20:09:10 +08:00
* @param ids 主键id
2022-03-21 09:33:21 +08:00
*/
2022-03-21 20:09:10 +08:00
public void delete(Collection<Long> ids) {
getSalaryItemService(user).deleteByIds(ids);
2022-03-21 09:33:21 +08:00
}
2023-02-17 10:54:18 +08:00
2023-08-31 09:24:41 +08:00
/**
* 获取薪资项目在哪些账套中使用
2024-08-06 14:24:08 +08:00
*
2023-08-31 09:24:41 +08:00
* @param salaryItemId
*/
public List<Map<String, Object>> getSalarySobBySalaryItem(Long salaryItemId) {
return getSalaryItemService(user).getSalarySobBySalaryItem(salaryItemId);
}
/**
* 将薪资项目管理中的信息同步至账套
2024-08-06 14:24:08 +08:00
*
2023-08-31 09:24:41 +08:00
* @param syncSalaryItemParam
*/
public void syncSalaryItemToSalarySobItem(SyncSalaryItemParam syncSalaryItemParam) {
getSalaryItemService(user).syncSalaryItemToSalarySobItem(syncSalaryItemParam);
}
2024-08-06 10:32:57 +08:00
2024-08-06 14:24:08 +08:00
public XSSFWorkbook export(SalaryItemExportParam param) {
2024-08-07 14:40:08 +08:00
return getSalaryItemService(user).export(param);
2024-08-06 14:24:08 +08:00
}
2024-08-06 10:32:57 +08:00
2024-08-07 14:23:35 +08:00
public Map<String, Object> preview(SalaryItemImportParam param) {
return getSalaryItemService(user).preview(param);
}
2024-08-07 09:06:09 +08:00
public ImportExcelResponse importSalaryItem(SalaryItemImportParam param) {
return getSalaryItemService(user).importSalaryItem(param);
2024-08-06 10:32:57 +08:00
}
2024-08-07 14:23:35 +08:00
public XSSFWorkbook downloadTemplate(SalaryItemDownloadTemplateParam param) {
2024-08-07 14:40:08 +08:00
return getSalaryItemService(user).downloadTemplate(param);
2024-08-07 14:23:35 +08:00
}
2022-03-21 09:33:21 +08:00
}