package com.engine.salary.wrapper;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.biz.EmployBiz;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.salaryacct.bo.SalaryAcctRecordBO;
import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeCountDTO;
import com.engine.salary.entity.salaryacct.dto.SalaryAcctRecordFormDTO;
import com.engine.salary.entity.salaryacct.dto.SalaryAcctRecordListDTO;
import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam;
import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam;
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO;
import com.engine.salary.entity.salarysob.po.SalarySobPO;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.service.SalaryAcctEmployeeService;
import com.engine.salary.service.SalaryAcctRecordService;
import com.engine.salary.service.SalarySobService;
import com.engine.salary.service.impl.SalaryAcctRecordServiceImpl;
import com.engine.salary.service.impl.SalarySobServiceImpl;
import com.engine.salary.util.SalaryDateUtil;
import com.engine.salary.util.SalaryEntityUtil;
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.Collection;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 薪资核算记录
*
Copyright: Copyright (c) 2022
* Company: 泛微软件
*
* @author qiantao
* @version 1.0
**/
public class SalaryAcctRecordWrapper extends Service {
private SalaryAcctRecordService getSalaryAcctRecordService(User user) {
return (SalaryAcctRecordService) ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user);
}
private SalarySobService getSalarySobService(User user) {
return (SalarySobService) ServiceUtil.getService(SalarySobServiceImpl.class, user);
}
private SalaryAcctEmployeeService salaryAcctEmployeeService;
// private ComInfoCache comInfoCache;
public PageInfo listPage(SalaryAcctRecordQueryParam queryParam) {
EmployBiz employBiz = new EmployBiz();
// 查询薪资核算记录(分页)
PageInfo page = getSalaryAcctRecordService(user).listPageByParam(queryParam);
PageInfo dtoPage = new PageInfo();
dtoPage.setPageNum(queryParam.getCurrent());
dtoPage.setPageSize(queryParam.getPageSize());
List list = page.getList();
if (CollectionUtils.isNotEmpty(list)) {
// 查询薪资账套
Set salarySobIds = SalaryEntityUtil.properties(list, SalaryAcctRecordPO::getSalarySobId);
List salarySobPOS = getSalarySobService(user).listByIds(salarySobIds);
// 查询薪资核算记录的创建人员的人员信息
List employeeIds = SalaryEntityUtil.properties(list, SalaryAcctRecordPO::getCreator, Collectors.toList());
List employeeComInfos = employBiz.getEmployeeByIdsAll(employeeIds);
// 查询薪资核算人数的数量
Set salaryAcctRecordIds = SalaryEntityUtil.properties(list, SalaryAcctRecordPO::getId);
List salaryAcctEmployeeCountDTOS = salaryAcctEmployeeService.countBySalaryAcctRecordId(salaryAcctRecordIds);
// 转换成列表dto
List salaryAcctRecordListDTOS = SalaryAcctRecordBO.convert2ListDTO(list, salarySobPOS, employeeComInfos, salaryAcctEmployeeCountDTOS);
dtoPage.setList(salaryAcctRecordListDTOS);
}
// WeaTable weaTable = SalaryFormatUtil.getInstance().buildTable(SalaryAcctRecordListDTO.class, dtoPage);
// 只有未归档时可以"核算"、"删除"、"归档"
// 归档后、申报后可以"查看"、"重新核算"
// for (int i = 0; i < page.getRecords().size(); i++) {
// SalaryAcctRecordPO salaryAcctRecord = page.getRecords().get(i);
// List permissions = weaTable.getOperatesPermission().get(i);
// for (int j = 0; j < permissions.size(); j++) {
// Permission permission = permissions.get(j);
// if ((j == 0 || j == 1 || j == 3) && !Objects.equals(salaryAcctRecord.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue())) {
// permission.setVisible(false);
// permission.setDisabled(false);
// }
// if ((j == 2 || j == 5) && Objects.equals(salaryAcctRecord.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue())) {
// permission.setVisible(false);
// permission.setDisabled(false);
// }
// }
// }
return dtoPage;
}
/**
* 薪资核算记录详情
*
* @param id 薪资核算记录id
* @return
*/
public SalaryAcctRecordFormDTO getForm(Long id) {
SalaryAcctRecordFormDTO formDTO = new SalaryAcctRecordFormDTO();
// 查询所有启用的薪资账套
List salarySobPOS = getSalarySobService(user).listByDisable(NumberUtils.INTEGER_ZERO);
// 薪资核算详情表单中"薪资账套"的下拉选择项
if (Objects.nonNull(id)) {
// 查询薪资核算
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(id);
if (Objects.isNull(salaryAcctRecordPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除"));
}
// 查询薪资账套
SalarySobPO salarySobPO = getSalarySobService(user).getById(salaryAcctRecordPO.getSalarySobId());
if (Objects.isNull(salarySobPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98769, "薪资账套不存在或已被删除"));
}
// 转换成薪资核算记录详情dto
formDTO.setId(salaryAcctRecordPO.getId())
.setSalarySobId(salarySobPO.getId())
.setSalarySobName(salarySobPO.getName())
.setSalaryMonth(SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth()).toString())
.setDescription(salaryAcctRecordPO.getDescription());
}
// 转换成前端所需的数据格式
return formDTO;
}
/**
* 薪资核算记录所用的薪资账套薪资周期、考勤周期……
*
* @param id 薪资核算记录的id
* @return
*/
public SalarySobCycleDTO getSalarySobCycleById(Long id) {
return getSalaryAcctRecordService(user).getSalarySobCycleById(id);
}
/**
* 保存
*
* @param saveParam 保存参数
* @return
*/
public Long save(SalaryAcctRecordSaveParam saveParam) {
return getSalaryAcctRecordService(user).save(saveParam);
}
/**
* 删除
*
* @param ids 薪资核算记录的id
*/
public void delete(Collection ids) {
getSalaryAcctRecordService(user).deleteByIds(ids);
}
/**
* 归档
*
* @param id 薪资核算记录的id
*/
public void file(Long id, Long employeeId) {
getSalaryAcctRecordService(user).file(id);
}
/**
* 重新归档
*
* @param id 薪资核算记录的id
*/
public void reCalculate(Long id) {
getSalaryAcctRecordService(user).reCalculate(id);
}
/**
* 判断是否存在合并计税
*
* @param id 主键id
* @return
*/
public Integer hasConsolidatedTax(Long id) {
return getSalaryAcctRecordService(user).hasConsolidatedTax(id);
}
}