weaver-hrm-salary/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java

364 lines
17 KiB
Java
Raw Normal View History

2022-04-12 10:11:53 +08:00
package com.engine.salary.service.impl;
import cn.hutool.json.JSONUtil;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.biz.SalarySobBiz;
import com.engine.salary.biz.SalaryTemplateBiz;
import com.engine.salary.entity.salaryBill.bo.SalaryTemplateBO;
import com.engine.salary.entity.salaryBill.dto.SalaryTemplateListDTO;
import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemSetListDTO;
import com.engine.salary.entity.salaryBill.param.SalaryTemplateCopyParam;
import com.engine.salary.entity.salaryBill.param.SalaryTemplateDefaultUseParam;
import com.engine.salary.entity.salaryBill.param.SalaryTemplateQueryParam;
import com.engine.salary.entity.salaryBill.param.SalaryTemplateSaveParam;
import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO;
import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO;
import com.engine.salary.entity.salarysob.dto.SalarySobItemDTO;
import com.engine.salary.entity.salarysob.dto.SalarySobItemGroupDTO;
import com.engine.salary.entity.salarysob.po.SalarySobItemHidePO;
2022-04-12 10:11:53 +08:00
import com.engine.salary.entity.salarysob.po.SalarySobPO;
import com.engine.salary.enums.salarybill.SalaryTemplateWhetherEnum;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.service.*;
2023-06-19 13:59:24 +08:00
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.util.page.SalaryPageUtil;
2022-04-12 18:28:12 +08:00
import com.mzlion.core.utils.BeanUtils;
2022-04-12 10:11:53 +08:00
import org.apache.commons.collections.CollectionUtils;
2022-06-06 16:55:02 +08:00
import org.apache.commons.lang3.math.NumberUtils;
2022-04-12 10:11:53 +08:00
import weaver.hrm.User;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Description: 工资单模板
* @Author: wangxiangzhong
* @Date: 2021-12-08 14:44
*/
public class SalaryTemplateServiceImpl extends Service implements SalaryTemplateService {
private SalaryTemplateBiz mapper = new SalaryTemplateBiz();
private SalarySobBiz salarySobMapper = new SalarySobBiz();
private SalarySobItemService getSalarySobItemService(User user) {
return ServiceUtil.getService(SalarySobItemServiceImpl.class, user);
}
2022-06-06 16:55:02 +08:00
private SalarySobService getSalarySobService(User user) {
return ServiceUtil.getService(SalarySobServiceImpl.class, user);
}
2022-04-12 10:11:53 +08:00
2023-06-19 13:59:24 +08:00
private TaxAgentService getTaxAgentService(User user) {
return ServiceUtil.getService(TaxAgentServiceImpl.class, user);
}
private SalarySobItemHideService getSalarySobItemHideService(User user) {
return ServiceUtil.getService(SalarySobItemHideServiceImpl.class, user);
}
2022-04-12 10:11:53 +08:00
@Override
public SalaryTemplatePO getById(Long id) {
return mapper.getById(id);
}
// @Override
// public Map<String, Object> listPage(SalaryTemplateQueryParam queryParam) {
// mapper.list(queryParam);
// return page;
// }
@Override
public String defaultUse(SalaryTemplateDefaultUseParam defaultUseParamy) {
// 校验参数
SalaryTemplateDefaultUseParam.checkParam(defaultUseParamy);
SalaryTemplatePO salaryTemplate = getById(defaultUseParamy.getId());
if (salaryTemplate == null) {
throw new SalaryRunTimeException("工资单模板不存在");
}
// 选中默认使用
SalaryTemplatePO po = new SalaryTemplatePO();
po.setDeleteType(0);
po.setSalarySobId(salaryTemplate.getSalarySobId());
po.setUseType(SalaryTemplateWhetherEnum.FALSE.getValue());
2022-05-24 10:24:17 +08:00
mapper.updateBySalarySobId(po);
2022-04-12 10:11:53 +08:00
SalaryTemplatePO salaryTemplateNew = new SalaryTemplatePO();
BeanUtils.copyProperties(salaryTemplate, salaryTemplateNew);
salaryTemplateNew.setUseType(SalaryTemplateWhetherEnum.TRUE.getValue());
mapper.updateById(salaryTemplateNew);
// 记录日志
// SalaryLoggerUtil.recordUpdateSingleLog(salaryTemplateLoggerTemplate,
// salaryTemplate.getId(),
// salaryTemplateNew.getName(),
// SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 100534, "设为默认使用"),
// SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 100534, "设为默认使用"),
// salaryTemplate,
// salaryTemplateNew);
return "";
}
@Override
public String save(SalaryTemplateSaveParam saveParam) {
// 校验参数
SalaryTemplateSaveParam.checkParam(saveParam);
SalaryTemplatePO po = new SalaryTemplatePO();
po.setDeleteType(0);
po.setName(saveParam.getName());
List<SalaryTemplatePO> salaryTemplates = mapper.listSome(po);
if (CollectionUtils.isNotEmpty(salaryTemplates)) {
throw new SalaryRunTimeException("工资单模板名称不允许重复");
}
SalarySobPO salarySobPO = new SalarySobPO();
po.setDeleteType(0);
po.setId(saveParam.getSalarySobId());
List<SalarySobPO> salarySobs = salarySobMapper.listSome(salarySobPO);
if (CollectionUtils.isEmpty(salarySobs)) {
throw new SalaryRunTimeException("薪资账套不存在");
}
// todo 薪资项目设置检查校验
// 保存
SalaryTemplatePO salaryTemplate = SalaryTemplateBO.convertToPO(saveParam, (long) user.getUID());
2023-07-03 14:02:34 +08:00
// salaryTemplate.setSendEmailId(saveParam.getSendEmail());
2022-04-12 10:11:53 +08:00
salaryTemplate.setEmailStatus(saveParam.getEmailStatus()?1:0);
salaryTemplate.setMsgStatus(saveParam.getMsgStatus()?1:0);
salaryTemplate.setTextContentPosition(saveParam.getTextContentPosition());
salaryTemplate.setSalaryItemNullStatus(saveParam.getSalaryItemNullStatus()?1:0);
salaryTemplate.setSalaryItemZeroStatus(saveParam.getSalaryItemZeroStatus()?1:0);
salaryTemplate.setAutoSendCycleType(saveParam.getAutoSendCycleType());
2022-04-12 10:11:53 +08:00
mapper.insert(salaryTemplate);
// 记录日志
// SalaryLoggerUtil.recordAddSingleLog(salaryTemplateLoggerTemplate,
// salaryTemplate.getId(),
// salaryTemplate.getName(),
// SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100538, "新增工资单模板"),
// SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100538, "新增工资单模板"),
// salaryTemplate);
return "";
}
@Override
public String update(SalaryTemplateSaveParam saveParam) {
// 校验参数
SalaryTemplateSaveParam.checkParam(saveParam);
// 校验是否可以编辑
if (saveParam.getId() == null) {
throw new SalaryRunTimeException("参数错误");
}
SalaryTemplatePO salaryTemplate = getById(saveParam.getId());
if (salaryTemplate == null) {
throw new SalaryRunTimeException("工资单模板不存在");
}
// 工资单模板编辑时不允许调整账套
if (!salaryTemplate.getSalarySobId().equals(saveParam.getSalarySobId())) {
throw new SalaryRunTimeException("工资单模板编辑时不允许调整账套");
}
SalaryTemplatePO po = new SalaryTemplatePO();
po.setDeleteType(0);
po.setName(saveParam.getName());
List<SalaryTemplatePO> salaryTemplates = mapper.listSome(po);
boolean nameExist = salaryTemplates.stream().anyMatch(e -> !Objects.equals(e.getId(), saveParam.getId()));
if (nameExist) {
throw new SalaryRunTimeException("工资单模板名称不允许重复");
}
SalarySobPO salarySobPO = new SalarySobPO();
po.setDeleteType(0);
po.setId(saveParam.getSalarySobId());
List<SalarySobPO> salarySobs = salarySobMapper.listSome(salarySobPO);
if (CollectionUtils.isEmpty(salarySobs)) {
throw new SalaryRunTimeException("薪资账套不存在");
}
// 更新工资单
SalaryTemplatePO salaryTemplateNew = new SalaryTemplatePO();
BeanUtils.copyProperties(salaryTemplate, salaryTemplateNew);
BeanUtils.copyProperties(saveParam, salaryTemplateNew);
salaryTemplateNew.setUpdateTime(new Date());
2023-07-03 14:02:34 +08:00
salaryTemplateNew.setSendEmailId(0L);
2022-04-12 10:11:53 +08:00
salaryTemplateNew.setEmailStatus(saveParam.getEmailStatus()?1:0);
salaryTemplateNew.setMsgStatus(saveParam.getMsgStatus()?1:0);
salaryTemplateNew.setTextContentPosition(saveParam.getTextContentPosition());
salaryTemplateNew.setSalaryItemNullStatus(saveParam.getSalaryItemNullStatus()?1:0);
salaryTemplateNew.setSalaryItemZeroStatus(saveParam.getSalaryItemZeroStatus()?1:0);
2023-06-30 15:58:55 +08:00
salaryTemplateNew.setAutoSendStatus(saveParam.getAutoSendStatus()?1:0);
salaryTemplateNew.setAutoSendCycleType(saveParam.getAutoSendCycleType());
2023-07-13 11:50:02 +08:00
salaryTemplateNew.setAckFeedbackStatus(saveParam.getAckFeedbackStatus()?1:0);
salaryTemplateNew.setAutoAckDays(saveParam.getAutoAckDays());
salaryTemplateNew.setFeedbackUrl(saveParam.getFeedbackUrl());
2022-04-12 10:11:53 +08:00
// todo 薪资项目设置检查校验
2022-04-12 18:28:12 +08:00
salaryTemplateNew.setSalaryItemSetting(saveParam.getSalaryItemSetting() != null ? JSONUtil.toJsonStr(saveParam.getSalaryItemSetting()) : "");
2022-12-07 15:03:39 +08:00
salaryTemplateNew.setReplenishSalaryItemSetting(saveParam.getReplenishSalaryItemSetting() != null ? JSONUtil.toJsonStr(saveParam.getReplenishSalaryItemSetting()) : "");
2022-04-12 10:11:53 +08:00
mapper.updateById(salaryTemplateNew);
// 记录日志
// SalaryLoggerUtil.recordUpdateSingleLog(salaryTemplateLoggerTemplate,
// salaryTemplate.getId(),
// salaryTemplateNew.getName(),
// SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100539, "编辑工资单模板"),
// SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100539, "编辑工资单模板"),
// salaryTemplate,
// salaryTemplateNew);
return "";
}
@Override
public String copy(SalaryTemplateCopyParam copyParam) {
// 校验参数
SalaryTemplateCopyParam.checkParam(copyParam);
SalaryTemplatePO salaryTemplate = getById(copyParam.getId());
if (salaryTemplate == null) {
throw new SalaryRunTimeException("被复制的工资单不存在");
}
List<SalaryTemplateListDTO> salaryTemplates = mapper.list(SalaryTemplateQueryParam.builder().name(copyParam.getName()).build());
if (CollectionUtils.isNotEmpty(salaryTemplates)) {
throw new SalaryRunTimeException("工资单模板名称不允许重复");
}
SalaryTemplatePO salaryTemplateNew = new SalaryTemplatePO();
BeanUtils.copyProperties(salaryTemplate, salaryTemplateNew);
2022-04-12 18:28:12 +08:00
salaryTemplateNew.setId(null);
2022-04-12 10:11:53 +08:00
salaryTemplateNew.setName(copyParam.getName());
salaryTemplateNew.setUseType(SalaryTemplateWhetherEnum.FALSE.getValue());
mapper.insert(salaryTemplateNew);
// 记录日志
// SalaryLoggerUtil.recordAddSingleLog(salaryTemplateLoggerTemplate,
// salaryTemplateNew.getId(),
// salaryTemplateNew.getName(),
// SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100541, "复制工资单模板"),
// SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100541, "复制工资单模板"),
// salaryTemplateNew);
return "";
}
@Override
public String delete(Collection<Long> ids) {
if (CollectionUtils.isEmpty(ids)) {
throw new SalaryRunTimeException("参数错误");
}
List<SalaryTemplateListDTO> salaryTemplates = mapper.list(SalaryTemplateQueryParam.builder().ids(ids).build());
if (CollectionUtils.isEmpty(salaryTemplates)) {
throw new SalaryRunTimeException("要删除的工资单在不存在或已删除");
}
// TODO 正在使用的记录不允许删除
mapper.deleteByIds(ids);
// 记录日志
// salaryTemplates.forEach(e -> SalaryLoggerUtil.recordDeleteSingleLog(salaryTemplateLoggerTemplate,
// e.getId(),
// e.getName(),
// SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100542, "删除工资单模板"),
// SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100542, "删除工资单模板")+"" + e.getName(),
// e));
return "";
}
@Override
public List<Map<String, Object>> selectSalarySobList() {
2022-06-06 16:55:02 +08:00
List<SalarySobPO> salarySobs = getSalarySobService(user).listByDisable(NumberUtils.INTEGER_ZERO);
2022-04-12 10:11:53 +08:00
return salarySobs.stream().map(m->{
Map<String, Object> map = new HashMap<>(2);
map.put("id", String.valueOf(m.getId()));
map.put("content", m.getName());
return map;
}).collect(Collectors.toList());
}
@Override
2022-12-06 15:29:08 +08:00
public List<SalaryTemplateSalaryItemSetListDTO> getSalaryItemSet(Long salarySobId, boolean isReplenish) {
SalarySobItemAggregateDTO salarySobItemAggregate = getSalarySobItemService(user).getAggregateBySalarySobId(salarySobId);
// 处理薪资账套中隐藏的分类和项目
// 获取关闭显示的分类
List<Long> hideGroupIDs = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder().salarySobId(salarySobId).isGroup(1).build());
// 过滤关闭显示的薪资项目分类
List<SalarySobItemGroupDTO> itemGroupDTOS = salarySobItemAggregate.getItemGroups().stream().filter(group -> !(hideGroupIDs.contains(group.getId()))).collect(Collectors.toList());
// 获取关闭显示的薪资项目
List<Long> hideItemIDs = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder().salarySobId(salarySobId).isGroup(0).build());
for(SalarySobItemGroupDTO DTO : itemGroupDTOS){
List<SalarySobItemDTO> items = DTO.getItems();
DTO.setItems( items.stream().filter(item -> !(hideItemIDs.contains(item.getSalaryItemId()))).collect(Collectors.toList()) );
}
itemGroupDTOS = itemGroupDTOS.stream().filter(DTO -> CollectionUtils.isNotEmpty(DTO.getItems())).collect(Collectors.toList());
salarySobItemAggregate.setItemGroups(itemGroupDTOS);
if(hideGroupIDs.contains(0L)){
// 隐藏了未分类
salarySobItemAggregate.setItems(Collections.emptyList());
}else{
salarySobItemAggregate.setItems( salarySobItemAggregate.getItems().stream().filter( item -> !(hideItemIDs.contains(item.getSalaryItemId())) ).collect(Collectors.toList()) );
}
return SalaryTemplateBO.convertSalarySobItemAggregateToSalaryItemSet(salarySobItemAggregate, new Long(user.getUID()), isReplenish);
}
@Override
public List<SalaryTemplateSalaryItemSetListDTO> getSalaryItemSetContainHide(Long salarySobId, boolean isReplenish) {
2022-04-12 10:11:53 +08:00
SalarySobItemAggregateDTO salarySobItemAggregate = getSalarySobItemService(user).getAggregateBySalarySobId(salarySobId);
2022-12-06 15:29:08 +08:00
return SalaryTemplateBO.convertSalarySobItemAggregateToSalaryItemSet(salarySobItemAggregate, new Long(user.getUID()), isReplenish);
2022-04-12 10:11:53 +08:00
}
@Override
public List<SalaryTemplatePO> getDefaultTemplates(List<Long> salarySobIds) {
return mapper.listDefaultTemplates(salarySobIds);
}
@Override
public List<SalaryTemplatePO> getBySalarySobIds(Collection<Long> ids) {
return mapper.listSome(SalaryTemplatePO.builder().salarySobIds(ids).build());
}
2023-06-19 13:59:24 +08:00
@Override
public PageInfo<SalaryTemplateListDTO> listPage(SalaryTemplateQueryParam queryParam) {
List<SalaryTemplateListDTO> salaryTemplateDTOList = Collections.emptyList();
// 分权
long currentEmployeeId = user.getUID();
Boolean needAuth = getTaxAgentService(user).isNeedAuth(currentEmployeeId);
if (needAuth) {
List<SalarySobPO> salarySobPOS = getSalarySobService(user).listByDisable(NumberUtils.INTEGER_ZERO);
Set<Long> salarySobIds = SalaryEntityUtil.properties(salarySobPOS, SalarySobPO::getId);
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(salarySobIds)) {
// 查询
salaryTemplateDTOList = mapper.listDTO(SalaryTemplatePO.builder()
.salarySobId(queryParam.getSalarySobId())
.name(queryParam.getName())
.salarySobIds(salarySobIds).build());
} else {
return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), salaryTemplateDTOList, SalaryTemplateListDTO.class);
}
}else{
// 查询
salaryTemplateDTOList = mapper.listDTO(SalaryTemplatePO.builder().salarySobId(queryParam.getSalarySobId()).name(queryParam.getName()).build());
}
// 分页参数
PageInfo<SalaryTemplateListDTO> page = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), salaryTemplateDTOList, SalaryTemplateListDTO.class);
return page;
}
2023-07-03 17:46:11 +08:00
@Override
public List<SalaryTemplatePO> getAutoSendTemplate() {
return mapper.listSome(SalaryTemplatePO.builder().autoSendStatus(NumberUtils.INTEGER_ONE).useType(NumberUtils.INTEGER_ONE).deleteType(NumberUtils.INTEGER_ZERO).build());
}
2023-07-14 09:55:36 +08:00
@Override
public List<SalaryTemplatePO> listNeedAckDefaultTemplate() {
return mapper.listSome(SalaryTemplatePO.builder().useType(NumberUtils.INTEGER_ONE).ackFeedbackStatus(NumberUtils.INTEGER_ONE).build());
}
2022-04-12 10:11:53 +08:00
}