770 lines
35 KiB
Java
770 lines
35 KiB
Java
package com.engine.salary.service.impl;
|
||
|
||
import com.engine.common.service.HrmCommonService;
|
||
import com.engine.common.service.impl.HrmCommonServiceImpl;
|
||
import com.engine.common.util.ServiceUtil;
|
||
import com.engine.core.impl.Service;
|
||
import com.engine.salary.constant.SalaryAuthConstant;
|
||
import com.engine.salary.entity.datacollection.AddUpDeduction;
|
||
import com.engine.salary.entity.datacollection.AddUpSituation;
|
||
import com.engine.salary.entity.datacollection.po.OtherDeductionPO;
|
||
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
|
||
import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO;
|
||
import com.engine.salary.entity.salarysob.po.SalarySobPO;
|
||
import com.engine.salary.entity.taxagent.bo.TaxAgentBO;
|
||
import com.engine.salary.entity.taxagent.dto.TaxAgentEmployeeDTO;
|
||
import com.engine.salary.entity.taxagent.dto.TaxAgentEmployeeTaxAgentDTO;
|
||
import com.engine.salary.entity.taxagent.dto.TaxAgentListDTO;
|
||
import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeDTO;
|
||
import com.engine.salary.entity.taxagent.param.TaxAgentAdminChangeCheckParam;
|
||
import com.engine.salary.entity.taxagent.param.TaxAgentQueryParam;
|
||
import com.engine.salary.entity.taxagent.param.TaxAgentSaveParam;
|
||
import com.engine.salary.entity.taxagent.po.*;
|
||
import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum;
|
||
import com.engine.salary.enums.salarysob.SalaryEmployeeStatusEnum;
|
||
import com.engine.salary.enums.taxagent.TaxAgentRoleTypeEnum;
|
||
import com.engine.salary.exception.SalaryRunTimeException;
|
||
import com.engine.salary.mapper.archive.SalaryArchiveMapper;
|
||
import com.engine.salary.mapper.datacollection.AddUpDeductionMapper;
|
||
import com.engine.salary.mapper.datacollection.AddUpSituationMapper;
|
||
import com.engine.salary.mapper.datacollection.EmployMapper;
|
||
import com.engine.salary.mapper.datacollection.OtherDeductionMapper;
|
||
import com.engine.salary.mapper.salarysob.SalarySobMapper;
|
||
import com.engine.salary.mapper.taxagent.TaxAgentMapper;
|
||
import com.engine.salary.service.*;
|
||
import com.engine.salary.util.SalaryEntityUtil;
|
||
import com.engine.salary.util.SalaryI18nUtil;
|
||
import com.engine.salary.util.db.MapperProxyFactory;
|
||
import com.engine.salary.util.page.PageInfo;
|
||
import com.engine.salary.util.page.SalaryPageUtil;
|
||
import com.engine.salary.util.valid.RuntimeTypeEnum;
|
||
import com.engine.salary.util.valid.ValidUtil;
|
||
import com.google.common.collect.Lists;
|
||
import lombok.extern.slf4j.Slf4j;
|
||
import org.apache.commons.collections4.CollectionUtils;
|
||
import org.apache.commons.lang3.StringUtils;
|
||
import org.springframework.beans.BeanUtils;
|
||
import weaver.hrm.User;
|
||
import weaver.systeminfo.setting.HrmUserSettingComInfo;
|
||
import weaver.systeminfo.systemright.CheckUserRight;
|
||
|
||
import java.util.*;
|
||
import java.util.stream.Collectors;
|
||
|
||
@Slf4j
|
||
public class TaxAgentServiceImpl extends Service implements TaxAgentService {
|
||
|
||
|
||
private TaxAgentBaseService getTaxAgentBaseService(User user) {
|
||
return ServiceUtil.getService(TaxAgentBaseServiceImpl.class, user);
|
||
}
|
||
|
||
private TaxAgentAdminService getTaxAgentAdminService(User user) {
|
||
return ServiceUtil.getService(TaxAgentAdminServiceImpl.class, user);
|
||
}
|
||
|
||
private TaxAgentSubAdminService taxAgentSubAdminService;
|
||
|
||
private TaxAgentManageRangeService getTaxAgentManageRangeService(User user) {
|
||
return ServiceUtil.getService(TaxAgentManageRangeServiceImpl.class, user);
|
||
}
|
||
|
||
private TaxAgentEmpService getTaxAgentEmpService(User user) {
|
||
return ServiceUtil.getService(TaxAgentEmpServiceImpl.class, user);
|
||
}
|
||
|
||
private TaxAgentSubAdminEmpService taxAgentSubAdminEmpService;
|
||
|
||
private HrmCommonService getHrmCommonService(User user) {
|
||
return ServiceUtil.getService(HrmCommonServiceImpl.class, user);
|
||
}
|
||
|
||
|
||
private SalaryAcctRecordService getSalaryAcctRecordService(User user) {
|
||
return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user);
|
||
}
|
||
|
||
private SIAccountService getSIAccountService(User user) {
|
||
return ServiceUtil.getService(SIAccountServiceImpl.class, user);
|
||
}
|
||
|
||
private SalaryArchiveMapper getSalaryArchiveMapper() {
|
||
return MapperProxyFactory.getProxy(SalaryArchiveMapper.class);
|
||
}
|
||
|
||
private AddUpDeductionMapper getAddUpDeductionMapper() {
|
||
return MapperProxyFactory.getProxy(AddUpDeductionMapper.class);
|
||
}
|
||
|
||
private OtherDeductionMapper getOtherDeductionMapper() {
|
||
return MapperProxyFactory.getProxy(OtherDeductionMapper.class);
|
||
}
|
||
|
||
private AddUpSituationMapper getAddUpSituationMapper() {
|
||
return MapperProxyFactory.getProxy(AddUpSituationMapper.class);
|
||
}
|
||
|
||
private SalarySobMapper getSalarySobMapper() {
|
||
return MapperProxyFactory.getProxy(SalarySobMapper.class);
|
||
}
|
||
|
||
private TaxAgentMapper getTaxAgentMapper() {
|
||
return MapperProxyFactory.getProxy(TaxAgentMapper.class);
|
||
}
|
||
|
||
private EmployMapper getEmployMapper() {
|
||
return MapperProxyFactory.getProxy(EmployMapper.class);
|
||
}
|
||
|
||
|
||
// private PaymentAgencyMapper paymentAgencyMapper;
|
||
|
||
// private SIArchivesSocialMapper siArchivesSocialMapper;
|
||
|
||
// private SIArchivesFundMapper siArchivesFundMapper;
|
||
|
||
// private SIArchivesOtherMapper siArchivesOtherMapper;
|
||
|
||
// private AuthorityService authorityService;
|
||
|
||
|
||
// private HrmCommonHrmStatusService hrmCommonHrmStatusService;
|
||
|
||
|
||
@Override
|
||
public List<TaxAgentEmployeePO> listEmployees() {
|
||
return getTaxAgentMapper().listEmployee();
|
||
}
|
||
|
||
@Override
|
||
public TaxAgentRoleTypeEnum getRoleType(Long currentEmployeeId) {
|
||
TaxAgentRoleTypeEnum roleType = TaxAgentRoleTypeEnum.NONE;
|
||
if (isChief(currentEmployeeId)) {
|
||
return TaxAgentRoleTypeEnum.CHIEF;
|
||
}
|
||
// 是否开启分权
|
||
boolean isOpenDevolution = getTaxAgentBaseService(user).isOpenDevolution();
|
||
if (!isOpenDevolution) {
|
||
List<TaxAgentAdminPO> taxAgentAdmins = getTaxAgentAdminService(user).listByEmployeeId(currentEmployeeId);
|
||
if (CollectionUtils.isNotEmpty(taxAgentAdmins)) {
|
||
return TaxAgentRoleTypeEnum.ADMIN;
|
||
}
|
||
List<TaxAgentSubAdminPO> taxAgentSubAdmins = taxAgentSubAdminService.listByAndEmployeeId(currentEmployeeId);
|
||
if (CollectionUtils.isNotEmpty(taxAgentSubAdmins)) {
|
||
return TaxAgentRoleTypeEnum.SUBADMIN;
|
||
}
|
||
}
|
||
return roleType;
|
||
}
|
||
|
||
|
||
@Override
|
||
public Boolean isNeedAuth(Long currentEmployeeId) {
|
||
return isOpenDevolution() && !isChief(currentEmployeeId);
|
||
}
|
||
|
||
|
||
@Override
|
||
public Boolean isChief(Long currentEmployeeId) {
|
||
if (user == null) {
|
||
return false;
|
||
}
|
||
CheckUserRight ck = new CheckUserRight();
|
||
boolean hasRight = ck.checkUserRight(SalaryAuthConstant.SALARY_CHIEF, user);
|
||
|
||
if (!hasRight) {
|
||
String belongtoshow = "";// 是否启用多账号数据显示
|
||
try {
|
||
HrmUserSettingComInfo HrmUserSettingComInfo = new HrmUserSettingComInfo();
|
||
belongtoshow = HrmUserSettingComInfo.getBelongtoshowByUserId("" + user.getUID());
|
||
} catch (Exception e) {
|
||
log.error("获取权限异常", e);
|
||
}
|
||
|
||
if (belongtoshow.equals("1")) {
|
||
List lsUser = User.getBelongtoUsersByUserId(user.getUID());// 所有此账号
|
||
if (lsUser != null) {
|
||
for (Object tmpUser : lsUser) {
|
||
hasRight = ck.checkUserRight(SalaryAuthConstant.SALARY_CHIEF, (User) tmpUser);
|
||
if (hasRight) {
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
return hasRight;
|
||
}
|
||
|
||
@Override
|
||
public Boolean isDefaultOpen(Long currentEmployeeId) {
|
||
return getTaxAgentBaseService(user).isOpenDevolution();
|
||
}
|
||
|
||
@Override
|
||
public Boolean isAdminEnable(Long currentEmployeeId) {
|
||
//是管理员
|
||
List<TaxAgentAdminPO> taxAgentAdminList = getTaxAgentAdminService(user).listByEmployeeId(currentEmployeeId);
|
||
return CollectionUtils.isNotEmpty(taxAgentAdminList);
|
||
}
|
||
|
||
|
||
@Override
|
||
public PageInfo<TaxAgentPO> listPage(TaxAgentQueryParam queryParam) {
|
||
List<TaxAgentPO> taxAgentPOS = getTaxAgentMapper().listBySome(queryParam);
|
||
return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(),
|
||
taxAgentPOS, TaxAgentPO.class);
|
||
}
|
||
|
||
@Override
|
||
public List<TaxAgentPO> list(TaxAgentQueryParam queryParam) {
|
||
return getTaxAgentMapper().listBySome(queryParam);
|
||
}
|
||
|
||
|
||
@Override
|
||
public List<TaxAgentPO> listByIds(Collection<Long> ids) {
|
||
return getTaxAgentMapper().listBySome(TaxAgentQueryParam.builder().ids(ids).build());
|
||
}
|
||
|
||
@Override
|
||
public List<TaxAgentPO> listAll() {
|
||
return getTaxAgentMapper().listAll();
|
||
}
|
||
|
||
@Override
|
||
public TaxAgentPO getById(Long id) {
|
||
return getTaxAgentMapper().getById(id);
|
||
}
|
||
|
||
@Override
|
||
public Collection<TaxAgentListDTO> findAll() {
|
||
List<TaxAgentPO> taxAgents = getTaxAgentMapper().listAll();
|
||
return TaxAgentBO.convertToListDTO(taxAgents);
|
||
}
|
||
|
||
@Override
|
||
public Collection<TaxAgentPO> listAllTaxAgents(Long employeeId) {
|
||
List<TaxAgentPO> taxAgents = getTaxAgentMapper().listAll();
|
||
return handleForDevolution(taxAgents, employeeId, true);
|
||
}
|
||
|
||
@Override
|
||
public Collection<TaxAgentPO> listAllTaxAgentsAsAdmin(Long employeeId) {
|
||
List<TaxAgentPO> taxAgents = getTaxAgentMapper().listAll();
|
||
// 是否开启分权
|
||
boolean isOpenDevolution = getTaxAgentBaseService(user).isOpenDevolution();
|
||
if (!isOpenDevolution) {
|
||
return taxAgents;
|
||
}
|
||
List<Long> taxAgentIds = taxAgents.stream().map(TaxAgentPO::getId).collect(Collectors.toList());
|
||
List<Long> enableTaxAgentIds = Lists.newArrayList();
|
||
// 1.判断自己是否是管理员, 如果是管理员,就是能够查看所属个税扣缴义务人
|
||
List<TaxAgentAdminPO> taxAgentAdminList = getTaxAgentAdminService(user).listByTaxAgentIds(taxAgentIds);
|
||
// 是管理员的列表
|
||
List<Long> adminTaxAgentIds = taxAgentAdminList.stream().filter(f -> f.getEmployeeId().equals(employeeId)).map(TaxAgentAdminPO::getTaxAgentId).collect(Collectors.toList());
|
||
|
||
enableTaxAgentIds.addAll(adminTaxAgentIds);
|
||
return taxAgents.stream().filter(f -> enableTaxAgentIds.contains(f.getId())).collect(Collectors.toList());
|
||
}
|
||
|
||
@Override
|
||
public Collection<TaxAgentEmployeeTaxAgentDTO> listAllTaxAgentsAsRange(List<Long> employeeIds) {
|
||
List<TaxAgentPO> taxAgents = getTaxAgentMapper().listAll();
|
||
List<Long> taxAgentIds = taxAgents.stream().map(TaxAgentPO::getId).collect(Collectors.toList());
|
||
|
||
List<TaxAgentEmpPO> taxAgentEmployees = getTaxAgentEmpService(user).listByTaxAgentIds(taxAgentIds);
|
||
|
||
if (CollectionUtils.isEmpty(taxAgentEmployees)) {
|
||
return Lists.newArrayList();
|
||
}
|
||
|
||
// 转换数据结构
|
||
List<Long> allemployeeIds = taxAgentEmployees.stream().map(TaxAgentEmpPO::getEmployeeId).distinct().collect(Collectors.toList());
|
||
|
||
return allemployeeIds.stream().map(m -> {
|
||
List<Long> enableTaxAgentIds = taxAgentEmployees.stream().filter(f -> f.getEmployeeId().equals(m)).map(TaxAgentEmpPO::getTaxAgentId).distinct()
|
||
.collect(Collectors.toList());
|
||
return TaxAgentEmployeeTaxAgentDTO.builder()
|
||
.employeeId(m)
|
||
.taxAgentIds(enableTaxAgentIds)
|
||
.build();
|
||
}).collect(Collectors.toList());
|
||
}
|
||
|
||
@Override
|
||
public String save(TaxAgentSaveParam saveParam) {
|
||
ValidUtil.doValidator(saveParam);
|
||
|
||
// 是否开启分权
|
||
boolean isOpenDevolution = getTaxAgentBaseService(user).isOpenDevolution();
|
||
if (isOpenDevolution && CollectionUtils.isEmpty(saveParam.getAdminUserIds())) {
|
||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(106271, "请选择管理员"));
|
||
}
|
||
List<TaxAgentPO> taxAgents = getTaxAgentMapper().listByName(saveParam.getName());
|
||
if (CollectionUtils.isNotEmpty(taxAgents)) {
|
||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98080, "名称不允许重复"));
|
||
}
|
||
// PaymentAgencyPO paymentAgencyPO = new LambdaQueryChainWrapper<>(paymentAgencyMapper)
|
||
// .eq(PaymentAgencyPO::getTenantKey)
|
||
// .eq(PaymentAgencyPO::getDeleteType, DeleteTypeEnum.NOT_DELETED.getValue())
|
||
// .eq(PaymentAgencyPO::getAgencyName, saveParam.getName())
|
||
// .one();
|
||
// if (paymentAgencyPO != null) {
|
||
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(115130, "名称不允许与社保福利代缴机构名称重复"));
|
||
// }
|
||
// 保存
|
||
TaxAgentPO taxAgent = TaxAgentBO.convertToPO(saveParam, (long) user.getUID());
|
||
getTaxAgentMapper().insertIgnoreNull(taxAgent);
|
||
if (isOpenDevolution) {
|
||
getTaxAgentAdminService(user).batchInsert(taxAgent.getId(), saveParam.getAdminUserIds());
|
||
}
|
||
// 记录日志
|
||
// SalaryLoggerUtil.recordAddSingleLog(taxAgentLoggerTemplate,
|
||
// taxAgent.getId(),
|
||
// taxAgent.getName(),
|
||
// SalaryI18nUtil.getI18nLabel( 93766, "新增个税扣缴义务人"),
|
||
// SalaryI18nUtil.getI18nLabel( 93766, "新增个税扣缴义务人"),
|
||
// taxAgent);
|
||
|
||
return StringUtils.EMPTY + taxAgent.getId();
|
||
}
|
||
|
||
@Override
|
||
public String paymentAgencyUpdate(TaxAgentPO taxAgentPO) {
|
||
getTaxAgentMapper().update(taxAgentPO);
|
||
return "";
|
||
}
|
||
|
||
@Override
|
||
public String update(TaxAgentSaveParam saveParam) {
|
||
ValidUtil.doValidator(saveParam, RuntimeTypeEnum.UPDATE);
|
||
|
||
TaxAgentPO taxAgent = getById(saveParam.getId());
|
||
if (taxAgent == null) {
|
||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100545, "个税扣缴义务人不存在或不在权限范围内"));
|
||
}
|
||
// 是否开启分权
|
||
boolean isOpenDevolution = getTaxAgentBaseService(user).isOpenDevolution();
|
||
if (isOpenDevolution && CollectionUtils.isEmpty(saveParam.getAdminUserIds())) {
|
||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(106271, "请选择管理员"));
|
||
}
|
||
|
||
List<TaxAgentPO> individualTaxWithholdingAgents = getTaxAgentMapper().listByName(saveParam.getName());
|
||
boolean nameExist = individualTaxWithholdingAgents.stream().anyMatch(e -> !Objects.equals(e.getId(), saveParam.getId()));
|
||
if (nameExist) {
|
||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98080, "名称不允许重复"));
|
||
}
|
||
TaxAgentPO taxAgentNew = new TaxAgentPO();
|
||
BeanUtils.copyProperties(taxAgent, taxAgentNew);
|
||
BeanUtils.copyProperties(saveParam, taxAgentNew);
|
||
taxAgentNew.setUpdateTime(new Date());
|
||
getTaxAgentMapper().update(taxAgentNew);
|
||
if (isOpenDevolution) {
|
||
// Boolean isUnEnableChange = adminChangeCheck(TaxAgentAdminChangeCheckParam.builder()
|
||
// .taxAgentId(saveParam.getId())
|
||
// .adminUserId(saveParam.getAdminUserIds())
|
||
// .build());
|
||
// if (isUnEnableChange) {
|
||
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(115937, "该管理员有未归档核算数据,不可更换管理员"));
|
||
// }
|
||
// 删除管理员
|
||
getTaxAgentAdminService(user).deleteByTaxAgentIds(Collections.singletonList(taxAgent.getId()));
|
||
// 新增管理员
|
||
getTaxAgentAdminService(user).batchInsert(saveParam.getId(), saveParam.getAdminUserIds());
|
||
}
|
||
// 记录日志
|
||
// SalaryLoggerUtil.recordUpdateSingleLog(taxAgentLoggerTemplate,
|
||
// taxAgent.getId(),
|
||
// taxAgentNew.getName(),
|
||
// SalaryI18nUtil.getI18nLabel(93767, "编辑个税扣缴义务人"),
|
||
// SalaryI18nUtil.getI18nLabel(93767, "编辑个税扣缴义务人"),
|
||
// taxAgent,
|
||
// taxAgentNew);
|
||
|
||
return StringUtils.EMPTY;
|
||
}
|
||
|
||
@Override
|
||
public Boolean adminChangeCheck(TaxAgentAdminChangeCheckParam checkParam) {
|
||
ValidUtil.doValidator(checkParam);
|
||
List<TaxAgentAdminPO> taxAgentAdminList = getTaxAgentAdminService(user).listByTaxAgentIds(Collections.singletonList(checkParam.getTaxAgentId()));
|
||
Long adminUserId = CollectionUtils.isNotEmpty(taxAgentAdminList) ? taxAgentAdminList.get(0).getEmployeeId() : 0L;
|
||
boolean isChanged = checkParam.getAdminUserId() != null && !adminUserId.equals(checkParam.getAdminUserId());
|
||
// 更换了管理员
|
||
if (isChanged) {
|
||
// 检查是否核算
|
||
//todo 1.社保福利档案是否有核算未归档
|
||
Boolean checkedValue = false;// getSIAccountService(user).changeAdminUnfiledCheck(adminUserId);
|
||
// 2.薪资核算是否有核算未归档
|
||
List<SalaryAcctRecordPO> salaryAcctRecords = getSalaryAcctRecordService(user).listByStatusAndEmployeeId(SalaryAcctRecordStatusEnum.NOT_ARCHIVED, adminUserId);
|
||
if (CollectionUtils.isNotEmpty(salaryAcctRecords) || checkedValue) {
|
||
return Boolean.TRUE;
|
||
}
|
||
}
|
||
return Boolean.FALSE;
|
||
}
|
||
|
||
|
||
@Override
|
||
public String delete(List<Long> ids) {
|
||
|
||
if (org.springframework.util.CollectionUtils.isEmpty(ids)) {
|
||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误"));
|
||
}
|
||
|
||
List<TaxAgentPO> taxAgents = getTaxAgentMapper().listBySome(TaxAgentQueryParam.builder().ids(ids).build());
|
||
if (CollectionUtils.isEmpty(taxAgents)) {
|
||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(85382, "要删除的个税扣缴义务人在不存在或已删除"));
|
||
}
|
||
// 正在使用的记录不允许删除
|
||
boolean checkUsed = checkUsed(ids.get(0));
|
||
if (checkUsed) {
|
||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100570, "正在使用的记录不允许删除"));
|
||
}
|
||
// 删除管理员
|
||
getTaxAgentAdminService(user).deleteByTaxAgentIds(ids);
|
||
// 删除分管理员和对应管理范围
|
||
// todo taxAgentSubAdminService.deleteByTaxAgentIds(ids);
|
||
// 删除人员范围
|
||
getTaxAgentManageRangeService(user).deleteByTaxAgentIds(ids);
|
||
|
||
getTaxAgentMapper().deleteByIds(ids);
|
||
|
||
// 记录日志
|
||
// taxAgents.forEach(e -> SalaryLoggerUtil.recordDeleteSingleLog(taxAgentLoggerTemplate,
|
||
// e.getId(),
|
||
// e.getName(),
|
||
// SalaryI18nUtil.getI18nLabel(100546, "删除个税扣缴义务人"),
|
||
// SalaryI18nUtil.getI18nLabel(100546, "删除个税扣缴义务人") + ":" + e.getName(),
|
||
// e));
|
||
|
||
return StringUtils.EMPTY;
|
||
}
|
||
|
||
/**
|
||
* 检查正在被使用的记录
|
||
*
|
||
* @param id
|
||
* @return
|
||
*/
|
||
private boolean checkUsed(Long id) {
|
||
//被薪资档案引用
|
||
List<SalaryArchivePO> salaryArchiveList = getSalaryArchiveMapper().listSome(SalaryArchivePO.builder().taxAgentId(id).build());
|
||
if (CollectionUtils.isNotEmpty(salaryArchiveList)) {
|
||
throw new SalaryRunTimeException("存在薪资档案引用");
|
||
}
|
||
//被社保福利档案引用
|
||
// List<InsuranceArchivesSocialSchemePO> socialSchemePOList = new LambdaQueryChainWrapper<>(siArchivesSocialMapper)
|
||
// .eq(InsuranceArchivesSocialSchemePO::getTenantKey)
|
||
// .eq(InsuranceArchivesSocialSchemePO::getDeleteType, DeleteTypeEnum.NOT_DELETED.getValue())
|
||
// .in(InsuranceArchivesSocialSchemePO::getPaymentOrganization, ids)
|
||
// .list();
|
||
// if (CollectionUtils.isNotEmpty(socialSchemePOList)) {
|
||
// return Boolean.TRUE;
|
||
// }
|
||
// List<InsuranceArchivesFundSchemePO> fundSchemePOList = new LambdaQueryChainWrapper<>(siArchivesFundMapper)
|
||
// .eq(InsuranceArchivesFundSchemePO::getTenantKey)
|
||
// .eq(InsuranceArchivesFundSchemePO::getDeleteType, DeleteTypeEnum.NOT_DELETED.getValue())
|
||
// .in(InsuranceArchivesFundSchemePO::getPaymentOrganization, ids)
|
||
// .list();
|
||
// if (CollectionUtils.isNotEmpty(fundSchemePOList)) {
|
||
// return Boolean.TRUE;
|
||
// }
|
||
// List<InsuranceArchivesOtherSchemePO> otherSchemePOList = new LambdaQueryChainWrapper<>(siArchivesOtherMapper)
|
||
// .eq(InsuranceArchivesOtherSchemePO::getTenantKey)
|
||
// .eq(InsuranceArchivesOtherSchemePO::getDeleteType, DeleteTypeEnum.NOT_DELETED.getValue())
|
||
// .in(InsuranceArchivesOtherSchemePO::getPaymentOrganization, ids)
|
||
// .list();
|
||
// if (CollectionUtils.isNotEmpty(otherSchemePOList)) {
|
||
// return Boolean.TRUE;
|
||
// }
|
||
|
||
// 被外部人员引用
|
||
// List<ExtEmployeePO> extEmployeeList = extEmployeeService.listAll(tenantKey);
|
||
// List<Long> extTaxAgentIds = extEmployeeList.stream().map(ExtEmployeePO::getTaxAgentId).distinct().collect(Collectors.toList());
|
||
// if (CollectionUtils.isNotEmpty(extTaxAgentIds)) {
|
||
// return ids.stream().anyMatch(e -> extTaxAgentIds.stream().anyMatch(f -> f.equals(e)));
|
||
// }
|
||
|
||
// 被累计专项附加扣除引用
|
||
List<AddUpDeduction> addUpDeductionList = getAddUpDeductionMapper().listSome(AddUpDeduction.builder().taxAgentIds(Collections.singleton(id)).build());
|
||
if (CollectionUtils.isNotEmpty(addUpDeductionList)) {
|
||
throw new SalaryRunTimeException("存在累计专项附加扣除引用");
|
||
}
|
||
// 被其他免税扣除引用
|
||
List<OtherDeductionPO> otherDeductionList = getOtherDeductionMapper().listSome(OtherDeductionPO.builder().taxAgentIds(Collections.singleton(id)).build());
|
||
if (CollectionUtils.isNotEmpty(otherDeductionList)) {
|
||
throw new SalaryRunTimeException("存在其他免税扣除引用");
|
||
}
|
||
// 被往期累计情况引用
|
||
List<AddUpSituation> addUpSituationList = getAddUpSituationMapper().listSome(AddUpSituation.builder().taxAgentIds(Collections.singleton(id)).build());
|
||
if (CollectionUtils.isNotEmpty(addUpSituationList)) {
|
||
throw new SalaryRunTimeException("存在往期累计情况引用");
|
||
}
|
||
|
||
//账套
|
||
List<SalarySobPO> salarySobPOS = getSalarySobMapper().listSome(SalarySobPO.builder().taxAgentId(id).build());
|
||
if (CollectionUtils.isNotEmpty(salarySobPOS)) {
|
||
throw new SalaryRunTimeException("存在账套引用");
|
||
}
|
||
|
||
return Boolean.FALSE;
|
||
}
|
||
|
||
@Override
|
||
public List<Map<String, Object>> selectList() {
|
||
List<TaxAgentPO> taxAgents = getTaxAgentMapper().listAll();
|
||
taxAgents = handleForDevolution(taxAgents, (long) user.getUID(), true);
|
||
return taxAgents.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
|
||
public List<Map<String, Object>> selectListAsAdmin(boolean chiefCanSeeAll) {
|
||
List<TaxAgentPO> taxAgents = getTaxAgentMapper().listAll();
|
||
taxAgents = handleForDevolution(taxAgents, (long) user.getUID(), false);
|
||
return taxAgents.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());
|
||
}
|
||
|
||
/**
|
||
* 分权处理(总管理员可见所有)
|
||
*
|
||
* @param taxAgents
|
||
* @param currentEmployeeId
|
||
* @param chiefCanSeeAll 总管理员是否可见所有
|
||
* @return
|
||
*/
|
||
private List<TaxAgentPO> handleForDevolution(List<TaxAgentPO> taxAgents, Long currentEmployeeId, boolean chiefCanSeeAll) {
|
||
// 是否开启分权
|
||
boolean isOpenDevolution = getTaxAgentBaseService(user).isOpenDevolution();
|
||
if (!isOpenDevolution || (chiefCanSeeAll && isChief(currentEmployeeId))) {
|
||
return taxAgents;
|
||
}
|
||
List<Long> taxAgentIds = taxAgents.stream().map(TaxAgentPO::getId).collect(Collectors.toList());
|
||
List<Long> enableTaxAgentIds = Lists.newArrayList();
|
||
// 1.判断自己是否是管理员, 如果是管理员,就是能够查看所属个税扣缴义务人
|
||
List<TaxAgentAdminPO> taxAgentAdminList = getTaxAgentAdminService(user).listByTaxAgentIdsAndEmployeeId(taxAgentIds, currentEmployeeId);
|
||
// 是管理员的列表
|
||
List<Long> adminTaxAgentIds = taxAgentAdminList.stream().map(TaxAgentAdminPO::getTaxAgentId).collect(Collectors.toList());
|
||
|
||
enableTaxAgentIds.addAll(adminTaxAgentIds);
|
||
|
||
return taxAgents.stream().filter(f -> enableTaxAgentIds.contains(f.getId())).collect(Collectors.toList());
|
||
}
|
||
|
||
|
||
@Override
|
||
public Boolean isOpenDevolution() {
|
||
return getTaxAgentBaseService(user).isOpenDevolution();
|
||
}
|
||
|
||
@Override
|
||
public List<TaxAgentManageRangeEmployeeDTO> listTaxAgentAndEmployeeTree(Long employeeId) {
|
||
return listTaxAgentAndEmployeeTree(null, employeeId);
|
||
}
|
||
|
||
|
||
@Override
|
||
public List<TaxAgentEmployeeDTO> listTaxAgentAndEmployee(Long employeeId) {
|
||
return listTaxAgentAndEmployee(null, employeeId);
|
||
}
|
||
|
||
@Override
|
||
public List<TaxAgentManageRangeEmployeeDTO> listTaxAgentAndEmployeeTree(SalaryEmployeeStatusEnum employeeStatus, Long employeeId) {
|
||
List<TaxAgentManageRangeEmployeeDTO> taxAgentManageRangeEmployeeList = Lists.newArrayList();
|
||
// 所有个税扣缴义务人
|
||
List<TaxAgentPO> allTaxAgents = listAll();
|
||
if (CollectionUtils.isEmpty(allTaxAgents)) {
|
||
return taxAgentManageRangeEmployeeList;
|
||
}
|
||
|
||
List<Long> taxAgentIds = allTaxAgents.stream().map(TaxAgentPO::getId).collect(Collectors.toList());
|
||
List<TaxAgentEmployeePO> allEmployees = getTaxAgentMapper().listEmployee();
|
||
if (employeeStatus != null) {
|
||
List<String> personnelStatusList;
|
||
// 查询人员状态
|
||
// if (employeeStatus.equals(SalaryEmployeeStatusEnum.NORMAL)) {
|
||
// allEmployees = allEmployees.stream().filter(f -> UserStatusEnum.getNormalStatus().contains(f.getStatus())).collect(Collectors.toList());
|
||
// } else if (employeeStatus.equals(SalaryEmployeeStatusEnum.UNAVAILABLE)) {
|
||
// allEmployees = allEmployees.stream().filter(f -> UserStatusEnum.getUnavailableStatus().contains(f.getStatus())).collect(Collectors.toList());
|
||
// }
|
||
}
|
||
|
||
// 是否开启分权
|
||
if (!isOpenDevolution() || isChief(employeeId)) {
|
||
return getTaxAgentEmp(allTaxAgents, taxAgentIds, allEmployees);
|
||
}
|
||
|
||
// 1.判断自己是否是管理员, 如果是管理员,就是能够操作所属个税扣缴义务人下的所有人的数据
|
||
List<TaxAgentAdminPO> taxAgentAdminList = getTaxAgentAdminService(user).listByTaxAgentIdsAndEmployeeId(taxAgentIds, (long) user.getUID());
|
||
// 是管理员的列表
|
||
List<Long> adminTaxAgentIds = taxAgentAdminList.stream().map(TaxAgentAdminPO::getTaxAgentId).collect(Collectors.toList());
|
||
|
||
if (CollectionUtils.isNotEmpty(adminTaxAgentIds)) {
|
||
taxAgentManageRangeEmployeeList.addAll(getTaxAgentEmp(allTaxAgents, adminTaxAgentIds, allEmployees));
|
||
}
|
||
// 2.根据作为非管理员查找自己作为分管理员, 对应的管理范围人员
|
||
List<Long> noAdminTaxAgentIds = allTaxAgents.stream()
|
||
.map(TaxAgentPO::getId)
|
||
.filter(id -> !adminTaxAgentIds.contains(id)).collect(Collectors.toList());
|
||
if (CollectionUtils.isNotEmpty(noAdminTaxAgentIds)) {
|
||
// taxAgentManageRangeEmployeeList.addAll(getTaxAgentSubAdminEmp(allTaxAgents, noAdminTaxAgentIds, allEmployees));
|
||
}
|
||
|
||
return taxAgentManageRangeEmployeeList;
|
||
}
|
||
|
||
|
||
@Override
|
||
public List<TaxAgentManageRangeEmployeeDTO> listTaxAgentAndEmployeeTree() {
|
||
List<TaxAgentManageRangeEmployeeDTO> taxAgentManageRangeEmployeeList = Lists.newArrayList();
|
||
// 所有个税扣缴义务人
|
||
List<TaxAgentPO> allTaxAgents = listAll();
|
||
if (CollectionUtils.isEmpty(allTaxAgents)) {
|
||
return taxAgentManageRangeEmployeeList;
|
||
}
|
||
List<Long> taxAgentIds = allTaxAgents.stream().map(TaxAgentPO::getId).collect(Collectors.toList());
|
||
List<TaxAgentEmployeePO> allEmployees = getTaxAgentMapper().listEmployee();
|
||
taxAgentManageRangeEmployeeList.addAll(getTaxAgentEmp(allTaxAgents, taxAgentIds, allEmployees));
|
||
return taxAgentManageRangeEmployeeList;
|
||
}
|
||
|
||
@Override
|
||
public List<TaxAgentManageRangeEmployeeDTO> listAllTaxAgentAndEmployeeTree() {
|
||
List<TaxAgentManageRangeEmployeeDTO> taxAgentManageRangeEmployeeList = Lists.newArrayList();
|
||
// 所有个税扣缴义务人
|
||
List<TaxAgentPO> allTaxAgents = listAll();
|
||
if (CollectionUtils.isEmpty(allTaxAgents)) {
|
||
return taxAgentManageRangeEmployeeList;
|
||
}
|
||
|
||
List<Long> taxAgentIds = allTaxAgents.stream().map(TaxAgentPO::getId).collect(Collectors.toList());
|
||
List<TaxAgentEmployeePO> allEmployees = getTaxAgentMapper().listEmployee();
|
||
|
||
// 1.判断自己是否是管理员, 如果是管理员,就是能够操作所属个税扣缴义务人下的所有人的数据
|
||
List<TaxAgentAdminPO> taxAgentAdminList = getTaxAgentAdminService(user).listByTaxAgentIdsAndEmployeeId(taxAgentIds, (long) user.getUID());
|
||
// 是管理员的列表
|
||
List<Long> adminTaxAgentIds = taxAgentAdminList.stream().map(TaxAgentAdminPO::getTaxAgentId).collect(Collectors.toList());
|
||
taxAgentManageRangeEmployeeList.addAll(getTaxAgentEmp(allTaxAgents, adminTaxAgentIds, allEmployees));
|
||
taxAgentManageRangeEmployeeList = taxAgentManageRangeEmployeeList.stream().distinct().collect(Collectors.toList());
|
||
return taxAgentManageRangeEmployeeList;
|
||
}
|
||
|
||
|
||
/**
|
||
* 获取分管理员的关联人员
|
||
*
|
||
* @param allTaxAgents
|
||
* @param noAdminTaxAgentIds
|
||
* @param allEmployees
|
||
* @return
|
||
*/
|
||
private List<TaxAgentManageRangeEmployeeDTO> getTaxAgentSubAdminEmp(List<TaxAgentPO> allTaxAgents, List<Long> noAdminTaxAgentIds, List<TaxAgentEmployeePO> allEmployees) {
|
||
List<TaxAgentManageRangeEmployeeDTO> taxAgentManageRangeEmployeeList = Lists.newArrayList();
|
||
List<TaxAgentSubAdminEmpPO> taxAgentEmps = taxAgentSubAdminEmpService.listByTaxAgentIds(noAdminTaxAgentIds);
|
||
|
||
taxAgentEmps = taxAgentEmps.stream().filter(f -> allEmployees.stream().anyMatch(e -> e.getEmployeeId().equals(f.getEmployeeId()))).collect(Collectors.toList());
|
||
|
||
List<TaxAgentSubAdminEmpPO> finalTaxAgentEmps = taxAgentEmps;
|
||
noAdminTaxAgentIds.forEach(e -> {
|
||
Optional<TaxAgentPO> optionalTaxAgent = allTaxAgents.stream().filter(t -> t.getId().equals(e)).findFirst();
|
||
String taxAgentName = (optionalTaxAgent.isPresent() ? optionalTaxAgent.get().getName() : "");
|
||
List<TaxAgentManageRangeEmployeeDTO.TaxAgentEmployee> taxAgentEmployees = finalTaxAgentEmps.stream().filter(f -> f.getTaxAgentId().equals(e)).map(m -> {
|
||
TaxAgentManageRangeEmployeeDTO.TaxAgentEmployee taxAgentEmployee = new TaxAgentManageRangeEmployeeDTO.TaxAgentEmployee();
|
||
taxAgentEmployee.setEmployeeId(m.getEmployeeId());
|
||
taxAgentEmployee.setUsername(m.getEmployeeName());
|
||
return taxAgentEmployee;
|
||
}).collect(Collectors.toList());
|
||
taxAgentManageRangeEmployeeList.add(
|
||
TaxAgentManageRangeEmployeeDTO.builder()
|
||
.taxAgentId(e)
|
||
.taxAgentName(taxAgentName)
|
||
.employeeList(taxAgentEmployees)
|
||
.build()
|
||
);
|
||
});
|
||
return taxAgentManageRangeEmployeeList;
|
||
}
|
||
|
||
/**
|
||
* 获取个税口角义务人的关联人员
|
||
*
|
||
* @param allTaxAgents
|
||
* @param taxAgentIds
|
||
* @return
|
||
*/
|
||
private List<TaxAgentManageRangeEmployeeDTO> getTaxAgentEmp(List<TaxAgentPO> allTaxAgents, List<Long> taxAgentIds, List<TaxAgentEmployeePO> allEmployees) {
|
||
List<TaxAgentManageRangeEmployeeDTO> taxAgentManageRangeEmployeeList = Lists.newArrayList();
|
||
List<TaxAgentEmpPO> taxAgentEmps = getTaxAgentEmpService(user).listByTaxAgentIds(taxAgentIds);
|
||
|
||
taxAgentEmps = taxAgentEmps.stream().filter(f -> allEmployees.stream().anyMatch(e -> e.getEmployeeId().equals(f.getEmployeeId()))).collect(Collectors.toList());
|
||
|
||
List<TaxAgentEmpPO> finalTaxAgentEmps = taxAgentEmps;
|
||
taxAgentIds.forEach(e -> {
|
||
Optional<TaxAgentPO> optionalTaxAgent = allTaxAgents.stream().filter(t -> t.getId().equals(e)).findFirst();
|
||
String taxAgentName = (optionalTaxAgent.isPresent() ? optionalTaxAgent.get().getName() : "");
|
||
List<TaxAgentManageRangeEmployeeDTO.TaxAgentEmployee> taxAgentEmployees = finalTaxAgentEmps.stream().filter(f -> f.getTaxAgentId().equals(e)).map(m -> {
|
||
TaxAgentManageRangeEmployeeDTO.TaxAgentEmployee taxAgentEmployee = new TaxAgentManageRangeEmployeeDTO.TaxAgentEmployee();
|
||
taxAgentEmployee.setEmployeeId(m.getEmployeeId());
|
||
taxAgentEmployee.setUsername(m.getEmployeeName());
|
||
return taxAgentEmployee;
|
||
}).collect(Collectors.toList());
|
||
taxAgentManageRangeEmployeeList.add(
|
||
TaxAgentManageRangeEmployeeDTO.builder()
|
||
.taxAgentId(e)
|
||
.taxAgentName(taxAgentName)
|
||
.employeeList(taxAgentEmployees)
|
||
.build()
|
||
);
|
||
});
|
||
return taxAgentManageRangeEmployeeList;
|
||
}
|
||
|
||
@Override
|
||
public List<TaxAgentEmployeeDTO> listTaxAgentAndEmployee(SalaryEmployeeStatusEnum employeeStatus, Long employeeId) {
|
||
List<TaxAgentEmployeeDTO> taxAgentEmployeeList = Lists.newArrayList();
|
||
|
||
List<TaxAgentManageRangeEmployeeDTO> taxAgentManageRangeEmployeeList = listTaxAgentAndEmployeeTree(employeeStatus, employeeId);
|
||
taxAgentManageRangeEmployeeList.forEach(m -> {
|
||
List<TaxAgentManageRangeEmployeeDTO.TaxAgentEmployee> employeeList = m.getEmployeeList();
|
||
if (CollectionUtils.isEmpty(employeeList)) {
|
||
taxAgentEmployeeList.add(TaxAgentEmployeeDTO.builder()
|
||
.taxAgentId(m.getTaxAgentId())
|
||
.taxAgentName(m.getTaxAgentName())
|
||
.employeeId(null)
|
||
.username(null)
|
||
.build());
|
||
} else {
|
||
employeeList.forEach(f -> taxAgentEmployeeList.add(TaxAgentEmployeeDTO.builder()
|
||
.taxAgentId(m.getTaxAgentId())
|
||
.taxAgentName(m.getTaxAgentName())
|
||
.employeeId(f.getEmployeeId())
|
||
.username(f.getUsername())
|
||
.build()));
|
||
}
|
||
});
|
||
|
||
return taxAgentEmployeeList;
|
||
}
|
||
|
||
@Override
|
||
public Collection<Long> listEmployeeIdsInTaxAgent(Long taxAgentId) {
|
||
List<TaxAgentEmpPO> taxAgentEmpPOS = getTaxAgentEmpService(user).listByTaxAgentIds(Collections.singletonList(taxAgentId));
|
||
|
||
return SalaryEntityUtil.properties(taxAgentEmpPOS, TaxAgentEmpPO::getEmployeeId);
|
||
}
|
||
|
||
|
||
}
|