package com.engine.salary.wrapper;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.salaryacct.bo.SalaryAcctEmployeeBO;
import com.engine.salary.entity.salaryacct.dto.SalaryAccEmployeeListDTO;
import com.engine.salary.entity.salaryacct.param.SalaryAcctEmployeeAddParam;
import com.engine.salary.entity.salaryacct.param.SalaryAcctEmployeeDeleteParam;
import com.engine.salary.entity.salaryacct.param.SalaryAcctEmployeeQueryParam;
import com.engine.salary.entity.salaryacct.param.SalaryAcctEmployeeSaveParam;
import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO;
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.service.SalaryAcctEmployeeService;
import com.engine.salary.service.SalaryEmployeeService;
import com.engine.salary.service.TaxAgentService;
import com.engine.salary.service.impl.SalaryAcctEmployeeServiceImpl;
import com.engine.salary.service.impl.SalaryEmployeeServiceImpl;
import com.engine.salary.service.impl.TaxAgentServiceImpl;
import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.page.PageInfo;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.math.NumberUtils;
import weaver.hrm.User;
import java.util.List;
import java.util.stream.Collectors;
/**
* 薪资核算人员
*
Copyright: Copyright (c) 2022
* Company: 泛微软件
*
* @author qiantao
* @version 1.0
**/
public class SalaryAcctEmployeeWrapper extends Service {
private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) {
return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user);
}
private SalaryEmployeeService getSalaryEmployeeService(User user) {
return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user);
}
private TaxAgentService getTaxAgentService(User user) {
return ServiceUtil.getService(TaxAgentServiceImpl.class, user);
}
/**
* 薪资核算人员列表
*
* @param queryParam 列表查询参数
* @return
*/
public PageInfo listPage(SalaryAcctEmployeeQueryParam queryParam) {
// 查询薪资核算人员(人员)
PageInfo page = getSalaryAcctEmployeeService(user).listPageByParam(queryParam);
// 转换成列表dto
PageInfo dtoPage = convert2ListDTO(page);
return dtoPage;
}
/**
* 同比减少的薪资核算人员列表
*
* @param queryParam 列表查询参数
* @return
*/
public PageInfo listPage4Reduce(SalaryAcctEmployeeQueryParam queryParam) {
// 查询同比减少的薪资核算人员(分页)
PageInfo page = getSalaryAcctEmployeeService(user).listPageByParam4Reduce(queryParam);
// 转换成列表dto
PageInfo dtoPage = convert2ListDTO(page);
return dtoPage;
}
/**
* 同比增加的薪资核算人员列表
*
* @param queryParam 列表查询参数
* @return
*/
public PageInfo listPage4Add(SalaryAcctEmployeeQueryParam queryParam) {
// 查询同比减少的薪资核算人员(分页)
PageInfo page = getSalaryAcctEmployeeService(user).listPageByParam4Add(queryParam);
// 转换成列表dto
PageInfo dtoPage = convert2ListDTO(page);
return dtoPage;
}
/**
* 转换成列表dto
*
* @param page 薪资核算人员po
* @return
*/
private PageInfo convert2ListDTO(PageInfo page) {
List list = page.getList();
if (CollectionUtils.isEmpty(list)) {
return new PageInfo<>(SalaryAccEmployeeListDTO.class);
}
// 查询人员信息
List employeeIds = list.stream().map(SalaryAcctEmployeePO::getEmployeeId).collect(Collectors.toList());
List simpleEmployees = getSalaryEmployeeService(user).listByIds(employeeIds);
// 查询个税扣缴义务人
List taxAgentIds = list.stream().map(SalaryAcctEmployeePO::getTaxAgentId).collect(Collectors.toList());
List taxAgentPOS = getTaxAgentService(user).listByIds(taxAgentIds);
// 转换成列表dto
List salaryAccEmployeeListDTOS = SalaryAcctEmployeeBO.convert2EmployeeListDTO(list, taxAgentPOS, simpleEmployees);
PageInfo pageInfo = new PageInfo(salaryAccEmployeeListDTOS, SalaryAccEmployeeListDTO.class);
pageInfo.setTotal(page.getTotal());
pageInfo.setPageSize(page.getPageSize());
pageInfo.setPageNum(page.getPageNum());
return pageInfo;
}
// /**
// * 获取高级搜索表单
// *
// * @return
// */
// public WeaSearchCondition getCondition(String tenantKey) {
// SalaryAcctEmpSearchConditionDTO searchConditionDTO = new SalaryAcctEmpSearchConditionDTO();
// WeaSearchCondition searchCondition = SalaryFormatUtil.getInstance().buildCondition(SalaryAcctEmpSearchConditionDTO.class,
// searchConditionDTO, "SalaryAcctEmpCondition");
// // 查询个税扣缴义务人
// List taxAgentPOS = getTaxAgentService(user).listAll(tenantKey);
// List weaSearchConditionOptions = taxAgentPOS.stream()
// .map(taxAgentPO -> new WeaSearchConditionOption(String.valueOf(taxAgentPO.getId()), taxAgentPO.getName()))
// .collect(Collectors.toList());
// // 给查询条件中的个税扣缴义务人填充下拉项
// searchCondition.getItems().forEach((k, v) -> {
// if (StringUtils.equals("taxAgentId", k)) {
// v.setOptions(weaSearchConditionOptions);
// }
// });
// // 其他条件不要
// searchCondition.getGroups().remove(1);
// return searchCondition;
// }
/**
* 添加薪资核算人员
*
* @param saveParam 保存参数
*/
public void save(SalaryAcctEmployeeSaveParam saveParam) {
getSalaryAcctEmployeeService(user).save(saveParam);
}
/**
* 从环比上月减少添加薪资核算人员
*
* @param addParam
*/
public void addFromReduce(SalaryAcctEmployeeAddParam addParam) {
getSalaryAcctEmployeeService(user).addFromReduce(addParam);
}
/**
* 删除薪资核算人员
*
* @param deleteParam 删除参数
*/
public void delete(SalaryAcctEmployeeDeleteParam deleteParam) {
getSalaryAcctEmployeeService(user).deleteByParam(deleteParam);
}
/**
* 检查个税扣缴义务人
*
* @param salaryAcctRecordId 薪资核算记录的id
*/
public void checkTaxAgent(Long salaryAcctRecordId) {
List salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user)
.listBySalaryAcctRecordIdAndTaxAgentId(salaryAcctRecordId, NumberUtils.LONG_ZERO);
if (CollectionUtils.isNotEmpty(salaryAcctEmployeePOS)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98871, "有{0}个人无个税扣缴义务人,请先去薪资档案里维护员工档案,再点击当前页面的刷新按钮")
.replace("{0}", "" + salaryAcctEmployeePOS.size()));
}
}
/**
* 刷新个税扣缴义务人
*
* @param salaryAcctRecordId 薪资核算记录的id
*/
public void refreshTaxAgent(Long salaryAcctRecordId) {
getSalaryAcctEmployeeService(user).refresh(salaryAcctRecordId);
}
}