package com.engine.salary.service.impl;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.constant.SalaryDefaultTenantConstant;
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
import com.engine.salary.entity.taxagent.param.TaxAgentSaveBaseParam;
import com.engine.salary.entity.taxagent.po.TaxAgentBasePO;
import com.engine.salary.enums.SalaryOnOffEnum;
import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.mapper.taxagent.TaxAgentBaseMapper;
import com.engine.salary.service.SIAccountService;
import com.engine.salary.service.SalaryAcctRecordService;
import com.engine.salary.service.TaxAgentBaseService;
import com.engine.salary.sys.entity.vo.UploadConfigResponse;
import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.db.MapperProxyFactory;
import com.engine.salary.util.db.IdGenerator;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import weaver.hrm.User;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 个税扣缴义务人基本信息
*
Copyright: Copyright (c) 2022
* Company: 泛微软件
*
* @author qiantao
* @version 1.0
**/
public class TaxAgentBaseServiceImpl extends Service implements TaxAgentBaseService {
private TaxAgentBaseMapper getTaxAgentBaseMapper() {
return MapperProxyFactory.getProxy(TaxAgentBaseMapper.class);
}
private SalaryAcctRecordService getSalaryAcctRecordService(User user) {
return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user);
}
private SIAccountService getSIAccountService(User user) {
return ServiceUtil.getService(SIAccountServiceImpl.class, user);
}
public TaxAgentBaseServiceImpl() {
}
@Override
public Boolean isOpenDevolution() {
TaxAgentBasePO base = getBaseInfo();
return (base != null && base.getDevolutionStatus() == 1) ? Boolean.TRUE : Boolean.FALSE;
}
@Override
public TaxAgentBasePO getBaseInfo() {
List list = getTaxAgentBaseMapper().listAll();
return CollectionUtils.isEmpty(list) ? null : list.get(0);
}
@Override
public String save(TaxAgentSaveBaseParam saveBaseParam) {
if (saveBaseParam.getDevolutionStatus() == null) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误"));
}
// 检查使用中的数据
boolean isUnable = checkUsedData();
if (isUnable) {
if (saveBaseParam.getDevolutionStatus()) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(117395, "当前有未归档的核算数据,全部归档后才可以启用分权"));
} else {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(117396, "当前有未归档的核算数据,全部归档后才可以停用分权"));
}
}
TaxAgentBasePO base = getBaseInfo();
Date now = new Date();
Integer devolutionStatus = saveBaseParam.getDevolutionStatus() ? SalaryOnOffEnum.ON.getValue() : SalaryOnOffEnum.OFF.getValue();
if (base == null) {
getTaxAgentBaseMapper().insertIgnoreNull(
TaxAgentBasePO.builder()
.id(IdGenerator.generate())
.devolutionStatus(devolutionStatus)
.createTime(now)
.updateTime(now)
.creator((long) user.getUID())
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build());
} else {
base.setUpdateTime(now);
base.setDevolutionStatus(devolutionStatus);
getTaxAgentBaseMapper().updateIgnoreNull(base);
}
return StringUtils.EMPTY;
}
@Override
public TaxAgentBasePO getConfig() {
Date now = new Date();
TaxAgentBasePO baseInfo = getBaseInfo();
if (baseInfo == null) {
baseInfo = TaxAgentBasePO.builder()
.id(IdGenerator.generate())
.devolutionStatus(0)
.createTime(now)
.updateTime(now)
.creator((long) user.getUID())
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build();
}
return baseInfo;
}
@Override
public UploadConfigResponse.Result parseConfig(TaxAgentBasePO config) {
UploadConfigResponse.Result result = UploadConfigResponse.Result.builder().message("分权配置加载完毕")
.success(new ArrayList<>())
.warning(new ArrayList<>())
.error(new ArrayList<>())
.build();
TaxAgentBasePO baseInfo = getBaseInfo();
if (baseInfo == null) {
config.setCreator((long) user.getUID());
getTaxAgentBaseMapper().insertIgnoreNull(config);
} else {
baseInfo.setDevolutionStatus(config.getDevolutionStatus());
getTaxAgentBaseMapper().updateIgnoreNull(baseInfo);
}
result.getSuccess().add("分权加载完毕,分权" + (config.getDevolutionStatus() == 1 ? "开启" : "关闭 "));
return result;
}
/**
* 检查是否有未归档数据
*
* @return
*/
private boolean checkUsedData() {
// 检查是否核算
// todo 1.社保福利档案是否有核算未归档
Boolean checkedValue = false;//= getSIAccountService(user).changeAdminUnfiledCheck();
// todo 2.薪资核算是否有核算未归档
List salaryAcctRecords = getSalaryAcctRecordService(user).listByStatus(SalaryAcctRecordStatusEnum.NOT_ARCHIVED);// getSalaryAcctRecordService(user).listByStatusAndEmployeeId(SalaryAcctRecordStatusEnum.NOT_ARCHIVED, currentTenantKey);
if (CollectionUtils.isNotEmpty(salaryAcctRecords) || checkedValue) {
return Boolean.TRUE;
}
return Boolean.FALSE;
}
}