Merge branch 'release/个税版本' into custom/昂立

# Conflicts:
#	src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java
This commit is contained in:
Harryxzy 2023-10-23 11:16:17 +08:00
commit 742d8e7d5c
21 changed files with 432 additions and 32 deletions

View File

@ -32,7 +32,7 @@ public class AddUpDeductionBiz extends BaseBean {
AddUpDeductionMapper mapper = sqlSession.getMapper(AddUpDeductionMapper.class);
List<AddUpDeductionDTO> list = mapper.list(param);
list = encryptUtil.decryptList(list, AddUpDeductionDTO.class);
return list;
return list;
} finally {
sqlSession.close();
}
@ -48,8 +48,18 @@ public class AddUpDeductionBiz extends BaseBean {
SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession();
try {
AddUpDeductionMapper mapper = sqlSession.getMapper(AddUpDeductionMapper.class);
List<AddUpDeduction> addUpDeductions = mapper.listSome(param);
return encryptUtil.decryptList(addUpDeductions, AddUpDeduction.class);
if (CollectionUtils.isNotEmpty(param.getEmployeeIds())) {
List<AddUpDeduction> addUpDeductions = new ArrayList<>();
List<List<Long>> partition = Lists.partition(param.getEmployeeIds(), 500);
partition.forEach(l -> {
param.setEmployeeIds(l);
addUpDeductions.addAll(mapper.listSome(param));
});
return encryptUtil.decryptList(addUpDeductions, AddUpDeduction.class);
} else {
List<AddUpDeduction> addUpDeductions = mapper.listSome(param);
return encryptUtil.decryptList(addUpDeductions, AddUpDeduction.class);
}
} finally {
sqlSession.close();
}

View File

@ -46,8 +46,18 @@ public class AddUpSituationBiz extends BaseBean {
SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession();
try {
AddUpSituationMapper mapper = sqlSession.getMapper(AddUpSituationMapper.class);
List<AddUpSituation> addUpSituations = mapper.listSome(param);
if(CollectionUtils.isNotEmpty(param.getEmployeeIds())){
List<AddUpSituation> addUpSituations = new ArrayList<>();
List<List<Long>> partition = Lists.partition((List<Long>) param.getEmployeeIds(), 500);
partition.forEach(l->{
param.setEmployeeIds(l);
addUpSituations.addAll(mapper.listSome(param));
});
return encryptUtil.decryptList(addUpSituations, AddUpSituation.class);
}else {
List<AddUpSituation> addUpSituations = mapper.listSome(param);
return encryptUtil.decryptList(addUpSituations, AddUpSituation.class);
}
} finally {
sqlSession.close();
}

View File

@ -28,8 +28,18 @@ public class OtherDeductionBiz extends BaseBean {
SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession();
try {
OtherDeductionMapper mapper = sqlSession.getMapper(OtherDeductionMapper.class);
List<OtherDeductionPO> otherDeductionPOS = mapper.listSome(param);
return encryptUtil.decryptList(otherDeductionPOS, OtherDeductionPO.class);
if (CollectionUtils.isNotEmpty(param.getEmployeeIds())) {
List<List<Long>> partition = Lists.partition(param.getEmployeeIds(), 500);
List<OtherDeductionPO> otherDeductionPOS = new ArrayList<>();
partition.forEach(l -> {
param.setEmployeeIds(l);
otherDeductionPOS.addAll(mapper.listSome(param));
});
return encryptUtil.decryptList(otherDeductionPOS, OtherDeductionPO.class);
}else {
List<OtherDeductionPO> otherDeductionPOS = mapper.listSome(param);
return encryptUtil.decryptList(otherDeductionPOS, OtherDeductionPO.class);
}
} finally {
sqlSession.close();
}
@ -77,7 +87,7 @@ public class OtherDeductionBiz extends BaseBean {
* @return
*/
public void batchSave(List<OtherDeductionPO> param) {
if(CollectionUtils.isEmpty(param)){
if (CollectionUtils.isEmpty(param)) {
return;
}
SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession();
@ -99,7 +109,7 @@ public class OtherDeductionBiz extends BaseBean {
* @return
*/
public void batchUpdate(List<OtherDeductionPO> param) {
if(CollectionUtils.isEmpty(param)){
if (CollectionUtils.isEmpty(param)) {
return;
}
SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession();
@ -115,10 +125,6 @@ public class OtherDeductionBiz extends BaseBean {
}
/**
* 处理导入数据
*
@ -183,8 +189,8 @@ public class OtherDeductionBiz extends BaseBean {
/**
* @description 批量删除
* @return void
* @description 批量删除
* @author Harryxzy
* @date 2022/10/27 16:07
*/

View File

@ -34,8 +34,18 @@ public class SalaryArchiveItemBiz {
SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession();
try {
SalaryArchiveItemMapper mapper = sqlSession.getMapper(SalaryArchiveItemMapper.class);
List<SalaryArchiveItemPO> salaryArchiveItemPOS = mapper.listByParam(build);
return encryptUtil.decryptList(salaryArchiveItemPOS, SalaryArchiveItemPO.class);
if (CollectionUtils.isNotEmpty(build.getEmployeeIds())) {
List<SalaryArchiveItemPO> salaryArchiveItemPOS = new ArrayList<>();
List<List<Long>> partition = Lists.partition((List<Long>) build.getEmployeeIds(), 500);
partition.forEach(l -> {
build.setEmployeeIds(l);
salaryArchiveItemPOS.addAll(mapper.listByParam(build));
});
return encryptUtil.decryptList(salaryArchiveItemPOS, SalaryArchiveItemPO.class);
} else {
List<SalaryArchiveItemPO> salaryArchiveItemPOS = mapper.listByParam(build);
return encryptUtil.decryptList(salaryArchiveItemPOS, SalaryArchiveItemPO.class);
}
} finally {
sqlSession.close();
}

View File

@ -9,6 +9,7 @@ import lombok.NoArgsConstructor;
import java.util.Collection;
import java.util.Date;
import java.util.List;
/**
* 数据采集-累计专项附加扣除表
@ -113,7 +114,7 @@ public class AddUpDeduction {
*/
private String tenantKey;
Collection<Long> employeeIds;
List<Long> employeeIds;
Collection<Long> taxAgentIds;

View File

@ -60,7 +60,7 @@ public class SalaryFormulaEmployeeDTO {
private String dissmissdate;
//状态
@SalaryFormulaVar(defaultLabel = "状态", labelId = 98621, dataType = "string")
@SalaryFormulaVar(defaultLabel = "状态编码", labelId = 98621, dataType = "string")
private String status;
@SalaryFormulaVar(defaultLabel = "状态", labelId = 98622, dataType = "string")

View File

@ -0,0 +1,33 @@
package com.engine.salary.entity.salarysob.dto;
import com.engine.salary.entity.salaryformula.ExpressFormula;
import lombok.Data;
import java.util.List;
@Data
public class SalaryItemTopologyDTO {
/**
* 薪资项目id
*/
private Long salaryItemId;
/**
* 薪资项目名称
*/
private String salaryItemName;
/**
* 公式
*/
ExpressFormula formula;
/**
* 核算值
*/
private String result;
private List<SalaryItemTopologyDTO> children;
}

View File

@ -0,0 +1,38 @@
package com.engine.salary.entity.salarysob.param;
import com.engine.salary.util.valid.DataCheck;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 薪资项目拓扑查询参数
* <p>Copyright: Copyright (c) 2023</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SalaryItemTopologyQueryParam {
/**
* 薪资账套id
*/
@DataCheck(require = true, message = "薪资账套的ID不允许为空")
private Long salarySobId;
/**
* 薪资项目id
*/
private Long salaryItemId;
/**
* 薪资核算人员id
*/
private Long acctEmpId;
}

View File

@ -159,7 +159,9 @@ public class TaxDeclarationCommon implements TaxDeclarationStrategy {
.addUpOtherDeduction(valueMap.get("addUpOtherDeduction"))
.addUpTaxExemptIncome(valueMap.get("addUpTaxExemptIncome"))
.addUpAllowedDonation(valueMap.get("addUpAllowedDonation"))
.addUpTaxSavings(valueMap.get("addUpTaxSavings"))
.addUpAdvanceTax(valueMap.get("addUpAdvanceTax"))
.taxAdjustment(valueMap.get("taxAdjustment"))
.addUpTaxableIncome(valueMap.get("addUpTaxableIncome"))
// .modifier(taxDeclaration.getCreator())
.creator(taxDeclaration.getCreator())

View File

@ -8,24 +8,36 @@ import java.math.BigDecimal;
import java.util.List;
import java.util.function.Predicate;
public enum FilterEnum implements BaseEnum<String> {
public enum FilterEnum implements BaseEnum<String> {
BT("BT", "包含", 1) {
@Override
public Predicate<String> filter(List<String> params) {
return a -> a.contentEquals(params.get(0));
return a -> a.contains(params.get(0));
}
},
EQ("EQ", "等于", 1) {
@Override
public Predicate<String> filter(List<String> params) {
return a -> a.equals(params.get(0));
return a -> {
if (NumberUtils.isCreatable(a) && NumberUtils.isCreatable(params.get(0))) {
return new BigDecimal(a).compareTo(new BigDecimal(params.get(0))) == 0;
} else {
return a.equals(params.get(0));
}
};
}
},
NE("NE", "不等于", 1) {
@Override
public Predicate<String> filter(List<String> params) {
return a -> !a.equals(params.get(0));
return a -> {
if (NumberUtils.isCreatable(a) && NumberUtils.isCreatable(params.get(0))) {
return new BigDecimal(a).compareTo(new BigDecimal(params.get(0))) != 0;
} else {
return !a.equals(params.get(0));
}
};
}
},
GT("GT", "大于", 1) {

View File

@ -27,6 +27,9 @@ public interface SalaryFormulaService {
*/
List<ExpressFormula> listExpressFormula(Collection<Long> formulaIds);
List<ExpressFormula> listAllExpressFormula();
/**
* 根据公式id获取公式内容
*

View File

@ -1,8 +1,10 @@
package com.engine.salary.service;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.entity.salarysob.dto.SalaryItemTopologyDTO;
import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO;
import com.engine.salary.entity.salarysob.dto.SalarySobItemFormDTO;
import com.engine.salary.entity.salarysob.param.SalaryItemTopologyQueryParam;
import com.engine.salary.entity.salarysob.param.SalarySobItemSaveParam;
import com.engine.salary.entity.salarysob.po.SalarySobItemPO;
@ -127,5 +129,16 @@ public interface SalarySobItemService {
*/
SalarySobItemFormDTO getSalaryItemForm(SalarySobItemPO param);
/**
* 更新
* @param po
*/
void update(SalarySobItemPO po);
/**
* 拓扑图
* @param param
* @return
*/
SalaryItemTopologyDTO topology(SalaryItemTopologyQueryParam param);
}

View File

@ -897,7 +897,15 @@ public class SIAccountServiceImpl extends Service implements SIAccountService {
}
//20230707增加福利核算明细中的缴纳状态+合计的数据项
List<InsuranceAccountDetailPO> insuranceAccountDetailPOS = getInsuranceAccountDetailMapper().queryList(billMonth, taxAgentId, employeeIds);
// List<InsuranceAccountDetailPO> insuranceAccountDetailPOS = getInsuranceAccountDetailMapper().queryList(billMonth, taxAgentId, employeeIds);
List<InsuranceAccountDetailPO> insuranceAccountDetailPOS = new ArrayList<>();
List<List<Long>> empIdsPart = Lists.partition((List<Long>) employeeIds, 500);
for (List<Long> part : empIdsPart) {
insuranceAccountDetailPOS.addAll(
getInsuranceAccountDetailMapper().queryList(billMonth, taxAgentId, part));
}
//退差数据不参与薪资核算
insuranceAccountDetailPOS = insuranceAccountDetailPOS.stream()
.filter(f -> f.getPaymentStatus().equals(PaymentStatusEnum.COMMON.getValue())

View File

@ -1441,7 +1441,11 @@ public class SISchemeServiceImpl extends Service implements SISchemeService {
// List<List<Long>> employeeIdPartition = Lists.partition(baseInfoEmployeeIds, 100);
// employeeIdPartition.forEach(getInsuranceBaseInfoMapper()::batchDeleteByEmployeeIds);
//查询目标人员的剩余的福利档案基础信息社保公积金其他福利档案id
List<InsuranceArchivesBaseInfoPO> moreBaseInfoPOS = getInsuranceBaseInfoMapper().getInsuranceBaseInfoListByInsuranceDetail(baseInfoEmployeeIds);
// List<InsuranceArchivesBaseInfoPO> moreBaseInfoPOS = getInsuranceBaseInfoMapper().getInsuranceBaseInfoListByInsuranceDetail(baseInfoEmployeeIds);
List<InsuranceArchivesBaseInfoPO> moreBaseInfoPOS = new ArrayList<>();
List<List<Long>> partitionInfo = Lists.partition((List<Long>) baseInfoEmployeeIds, 1000);
partitionInfo.forEach(part -> moreBaseInfoPOS.addAll(
getInsuranceBaseInfoMapper().getInsuranceBaseInfoListByInsuranceDetail(part)));
List<InsuranceArchivesBaseInfoPO> newInsuranceArchivesBaseInfoList = new ArrayList<>();
//设置社保公积金其他福利档案id
for (InsuranceArchivesBaseInfoPO po : baseInfoPOS) {

View File

@ -179,7 +179,13 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct
if (CollectionUtils.isEmpty(salaryAcctRecordIds) || CollectionUtils.isEmpty(employeeIds)) {
return Collections.emptyList();
}
return getSalaryAcctEmployeeMapper().listSome(SalaryAcctEmployeePO.builder().salaryAcctRecordIds(salaryAcctRecordIds).employeeIds(employeeIds).build());
List<List<Long>> partition = Lists.partition((List<Long>) employeeIds, 500);
List<SalaryAcctEmployeePO> list = new ArrayList<>();
partition.forEach(l -> {
list.addAll(getSalaryAcctEmployeeMapper().listSome(SalaryAcctEmployeePO.builder().salaryAcctRecordIds(salaryAcctRecordIds).employeeIds(l).build()));
});
return list;
}
@Override

View File

@ -85,6 +85,19 @@ public class SalaryFormulaServiceImpl extends Service implements SalaryFormulaSe
}
}
@Override
public List<ExpressFormula> listAllExpressFormula() {
List<FormulaPO> expressFormulas = getFormulaMapper().listAll();
return expressFormulas.stream().filter(Objects::nonNull).map(m -> {
ExpressFormula expressFormula = new ExpressFormula();
BeanUtils.copyProperties(m, expressFormula);
List<FormulaVar> formulaVarPOS = getFormulaVarMapper().listSome(FormulaVar.builder().formulaId(m.getId()).build());
expressFormula.setParameters(formulaVarPOS);
return expressFormula;
}).collect(Collectors.toList());
}
@Override
public ExpressFormula getExpressFormula(Long formulaId) {
if (formulaId == null || formulaId <= 0) {

View File

@ -7,16 +7,22 @@ import com.engine.salary.biz.SalarySobItemBiz;
import com.engine.salary.biz.SalarySobItemGroupBiz;
import com.engine.salary.biz.SalarySobItemHideBiz;
import com.engine.salary.constant.SalaryDefaultTenantConstant;
import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO;
import com.engine.salary.entity.salaryformula.ExpressFormula;
import com.engine.salary.entity.salaryformula.po.FormulaVar;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.entity.salarysob.bo.SalarySobItemAggregateBO;
import com.engine.salary.entity.salarysob.bo.SalarySobItemBO;
import com.engine.salary.entity.salarysob.dto.SalaryItemTopologyDTO;
import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO;
import com.engine.salary.entity.salarysob.dto.SalarySobItemFormDTO;
import com.engine.salary.entity.salarysob.param.SalaryItemTopologyQueryParam;
import com.engine.salary.entity.salarysob.param.SalarySobItemSaveParam;
import com.engine.salary.entity.salarysob.po.*;
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
import com.engine.salary.enums.SalaryValueTypeEnum;
import com.engine.salary.enums.salaryformula.SalaryFormulaReferenceEnum;
import com.engine.salary.enums.salaryformula.SalarySQLReferenceEnum;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.mapper.salarysob.SalarySobDefaultItemMapper;
import com.engine.salary.mapper.salarysob.SalarySobEmpFieldMapper;
@ -27,6 +33,7 @@ import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.db.MapperProxyFactory;
import com.engine.salary.util.valid.ValidUtil;
import dm.jdbc.util.IdGenerator;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@ -99,6 +106,10 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
return MapperProxyFactory.getProxy(SalarySobDefaultItemMapper.class);
}
private SalaryAcctResultService getSalaryAcctResultService(User user) {
return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user);
}
// private LoggerTemplate salarySobLoggerTemplate;
@Override
@ -833,4 +844,187 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
return salarySobItemFormDTO;
}
/**
* 拓扑图
*
* @param param
* @return
*/
@Override
public SalaryItemTopologyDTO topology(SalaryItemTopologyQueryParam param) {
// 查询薪资账套
SalarySobPO salarySobPO = salarySobBiz.getById(param.getSalarySobId());
if (Objects.isNull(salarySobPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98379, "参数错误,薪资账套不存在或者已被删除"));
}
// 查询薪资项目
List<SalarySobItemPO> salarySobItemPOS = getSalarySobItemMapper().listSome(SalarySobItemPO.builder().salarySobId(param.getSalarySobId()).salaryItemId(param.getSalaryItemId()).build());
if (CollectionUtils.isEmpty(salarySobItemPOS)) {
throw new SalaryRunTimeException("账套中薪资项目不存在");
}
SalarySobItemPO salarySobItemPO = salarySobItemPOS.get(0);
//所有薪资项目
TopologyData topologyData = init(param);
SalaryItemPO salaryItemPO = topologyData.getSalaryItemPO();
// 获取薪资项目公式
ExpressFormula expressFormula = getSalaryFormulaService(user).getExpressFormula(salarySobItemPO.getFormulaId());
SalaryItemTopologyDTO salaryItemTopologyDTO = new SalaryItemTopologyDTO();
salaryItemTopologyDTO.setSalaryItemId(salaryItemPO.getId());
salaryItemTopologyDTO.setSalaryItemName(salaryItemPO.getName());
salaryItemTopologyDTO.setFormula(expressFormula);
salaryItemTopologyDTO.setResult(topologyData.getResultItemMap().getOrDefault(salaryItemPO.getId(), ""));
topology(salaryItemTopologyDTO, topologyData);
return salaryItemTopologyDTO;
}
/**
* 递归拓扑
*
* @param salaryItemTopologyDTO
* @param topologyData
*/
private void topology(SalaryItemTopologyDTO salaryItemTopologyDTO, TopologyData topologyData) {
Long salaryItemId = topologyData.getSalaryItemId();
Map<Long, SalaryItemPO> salaryItemIdMap = topologyData.getSalaryItemIdMap();
Map<String, SalaryItemPO> salaryItemCodeMap = topologyData.getSalaryItemCodeMap();
Map<String, SalarySobItemPO> salarySobItemCodeMap = topologyData.getSalarySobItemCodeMap();
Map<Long, ExpressFormula> expressFormulaIdMap = topologyData.getExpressFormulaIdMap();
ExpressFormula formula = salaryItemTopologyDTO.getFormula();
if (formula != null) {
List<FormulaVar> parameters = formula.getParameters();
if (CollectionUtils.isNotEmpty(parameters)) {
List<SalaryItemTopologyDTO> salaryItemTopologyDTOChildren = new ArrayList<>();
for (int i = 0; i < parameters.size(); i++) {
FormulaVar formulaVar = parameters.get(i);
String source = formulaVar.getSource();
String fieldId = formulaVar.getFieldId().replace(source + "_", "");
String name = formulaVar.getName();
String fieldName = formulaVar.getFieldName();
//是否是薪资项目
boolean isSalaryItemVar;
SalaryFormulaReferenceEnum salaryFormulaReferenceEnum = SalaryFormulaReferenceEnum.parseByValue(source);
if (salaryFormulaReferenceEnum == null) {
SalarySQLReferenceEnum referenceEnum = SalarySQLReferenceEnum.parseByValue(source);
if (referenceEnum == null) {
isSalaryItemVar = false;
} else {
isSalaryItemVar = referenceEnum == SalarySQLReferenceEnum.SALARY_ITEM;
}
} else {
isSalaryItemVar = salaryFormulaReferenceEnum == SalaryFormulaReferenceEnum.SALARY_ITEM;
}
ExpressFormula expressFormula;
if (salarySobItemCodeMap.containsKey(fieldId)) {
// 如果薪资账套下重新定义了薪资项目的公式则使用薪资账套下的公式否则使用薪资项目本身的公式
expressFormula = expressFormulaIdMap.get(salarySobItemCodeMap.get(fieldId).getFormulaId());
} else if (salaryItemCodeMap.containsKey(fieldId)) {
expressFormula = expressFormulaIdMap.get(salaryItemCodeMap.get(fieldId).getFormulaId());
} else {
expressFormula = null;
}
SalaryItemPO salaryItemChild = isSalaryItemVar ? salaryItemCodeMap.get(fieldId) : new SalaryItemPO();
SalaryItemTopologyDTO salaryItemTopologyChild = new SalaryItemTopologyDTO();
salaryItemTopologyChild.setSalaryItemId(isSalaryItemVar ? salaryItemChild.getId() : null);
salaryItemTopologyChild.setSalaryItemName(isSalaryItemVar ? salaryItemChild.getName() : fieldName);
salaryItemTopologyChild.setFormula(expressFormula);
salaryItemTopologyChild.setResult(isSalaryItemVar ? topologyData.getResultItemMap().getOrDefault(salaryItemChild.getId(), "") : "");
salaryItemTopologyDTOChildren.add(salaryItemTopologyChild);
if (isSalaryItemVar) {
SalaryItemPO salaryItemChildChild = salaryItemCodeMap.get(fieldId);
SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByValue(salaryItemChildChild.getValueType());
if (salaryValueTypeEnum != SalaryValueTypeEnum.INPUT) {
topologyData.setSalaryItemId(salaryItemChildChild.getId());
topology(salaryItemTopologyChild, topologyData);
}
}
}
salaryItemTopologyDTO.setChildren(salaryItemTopologyDTOChildren);
}
}
}
private TopologyData init(SalaryItemTopologyQueryParam param) {
TopologyData topologyData = new TopologyData();
//薪资项目
topologyData.setSalaryItemId(param.getSalaryItemId());
List<SalaryItemPO> salaryItems = getSalaryItemService(user).listAll();
Map<Long, SalaryItemPO> salaryItemIdMap = SalaryEntityUtil.convert2Map(salaryItems, SalaryItemPO::getId);
topologyData.setSalaryItemIdMap(salaryItemIdMap);
Map<String, SalaryItemPO> salaryItemCodeMap = SalaryEntityUtil.convert2Map(salaryItems, SalaryItemPO::getCode);
topologyData.setSalaryItemCodeMap(salaryItemCodeMap);
SalaryItemPO salaryItemPO = salaryItemIdMap.get(topologyData.salaryItemId);
topologyData.setSalaryItemPO(salaryItemPO);
//账套项目
List<SalarySobItemPO> salarySobItems = listBySalarySobId(param.getSalarySobId());
Map<String, SalarySobItemPO> salarySobItemCodeMap = SalaryEntityUtil.convert2Map(salarySobItems, SalarySobItemPO::getSalaryItemCode);
topologyData.setSalarySobItemCodeMap(salarySobItemCodeMap);
//公式
List<ExpressFormula> expressFormulas = getSalaryFormulaService(user).listAllExpressFormula();
Map<Long, ExpressFormula> expressFormulaIdMap = SalaryEntityUtil.convert2Map(expressFormulas, ExpressFormula::getId);
topologyData.setExpressFormulaIdMap(expressFormulaIdMap);
//薪资结果
Long acctEmpId = param.getAcctEmpId();
if (acctEmpId != null) {
List<SalaryAcctResultPO> results = getSalaryAcctResultService(user).listBySalaryAcctEmployeeId(acctEmpId);
Map<Long, String> resultItemMap = SalaryEntityUtil.convert2Map(results, SalaryAcctResultPO::getSalaryItemId, SalaryAcctResultPO::getResultValue);
topologyData.setResultItemMap(resultItemMap);
} else {
topologyData.setResultItemMap(new HashMap<>());
}
return topologyData;
}
@Data
class TopologyData {
/**
* 薪资项目id
*/
Long salaryItemId;
/**
* 薪资项目
*/
Map<Long, SalaryItemPO> salaryItemIdMap;
Map<String, SalaryItemPO> salaryItemCodeMap;
/**
* 账套项目
*/
SalaryItemPO salaryItemPO;
Map<String, SalarySobItemPO> salarySobItemCodeMap;
/**
* 公式
*/
Map<Long, ExpressFormula> expressFormulaIdMap;
/**
* 核算结果
*/
Map<Long, String> resultItemMap;
}
}

View File

@ -122,6 +122,14 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
return ServiceUtil.getService(TaxAgentManageRangeServiceImpl.class, user);
}
private SalarySobItemService getSalarySobItemService(User user) {
return ServiceUtil.getService(SalarySobItemServiceImpl.class, user);
}
private SalaryFormulaService getSalaryFormulaService(User user) {
return ServiceUtil.getService(SalaryFormulaServiceImpl.class, user);
}
private SalarySobBackItemService getSalarySobBackItemService(User user) {
return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user);
}
@ -150,6 +158,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
return ServiceUtil.getService(SalarySobTaxReportRuleServiceImpl.class, user);
}
@Override
public SalarySobPO getById(Long id) {
return salarySobMapper.getById(id);

View File

@ -393,6 +393,21 @@ public class SalarySobController {
return new ResponseResult<SalarySobItemPO, SalarySobItemFormDTO>(user).run(getSalarySobItemWrapper(user)::getSalaryItemForm, param);
}
/**
* 账套项目拓扑图
*
* @param request
* @param response
* @param param
* @return
*/
@POST
@Path("/item/topology")
@Produces(MediaType.APPLICATION_JSON)
public String getSalaryItemForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryItemTopologyQueryParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalaryItemTopologyQueryParam, SalaryItemTopologyDTO>(user).run(getSalarySobItemWrapper(user)::topology, param);
}
/**********************************薪资账套的薪资项目 end*********************************/
@ -471,7 +486,7 @@ public class SalarySobController {
@Produces(MediaType.APPLICATION_JSON)
public String saveSalarySobAddUp(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySobAddUpRuleSaveParam saveParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalarySobAddUpRuleSaveParam,String>(user).run(getSalarySobAddUpRuleWrapper(user)::save, saveParam);
return new ResponseResult<SalarySobAddUpRuleSaveParam, String>(user).run(getSalarySobAddUpRuleWrapper(user)::save, saveParam);
}
/**********************************薪资账套的累计字段对应关系 end*********************************/

View File

@ -10,8 +10,10 @@ import com.engine.salary.entity.salaryitem.dto.SalaryItemSobListDTO;
import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.entity.salaryitem.po.SysSalaryItemPO;
import com.engine.salary.entity.salarysob.dto.SalaryItemTopologyDTO;
import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO;
import com.engine.salary.entity.salarysob.dto.SalarySobItemFormDTO;
import com.engine.salary.entity.salarysob.param.SalaryItemTopologyQueryParam;
import com.engine.salary.entity.salarysob.param.SalarySobItemSaveParam;
import com.engine.salary.entity.salarysob.po.SalarySobItemGroupPO;
import com.engine.salary.entity.salarysob.po.SalarySobItemPO;
@ -177,4 +179,15 @@ public class SalarySobItemWrapper extends Service {
public SalarySobItemFormDTO getSalaryItemForm(SalarySobItemPO param) {
return getSalarySobItemService(user).getSalaryItemForm(param);
}
/**
* 拓扑图
* @param param
* @return
*/
public SalaryItemTopologyDTO topology(SalaryItemTopologyQueryParam param) {
return getSalarySobItemService(user).topology(param);
}
}

View File

@ -83,7 +83,7 @@ public class SalarySobWrapper extends Service {
List<TaxAgentPO> taxAgentPOS = getTaxAgentService(user).listAll();
Map<Long, String> taxAgentIdTONameMap = SalaryEntityUtil.convert2Map(taxAgentPOS, TaxAgentPO::getId, TaxAgentPO::getName);
List<SalarySobListDTO> salarySobListDTOS = SalarySobBO.convert2ListDTO(page.getList(),taxAgentIdTONameMap);
List<SalarySobListDTO> salarySobListDTOS = SalarySobBO.convert2ListDTO(page.getList(), taxAgentIdTONameMap);
PageInfo<SalarySobListDTO> dtoPage = new PageInfo<>(salarySobListDTOS, SalarySobListDTO.class);
dtoPage.setTotal(page.getTotal());
dtoPage.setPageNum(page.getPageNum());
@ -97,10 +97,10 @@ public class SalarySobWrapper extends Service {
private void handleSalarySobBackItemHistory(SalarySobListQueryParam queryParam) {
queryParam.setPageSize(100000);
List<SalarySobPO> list = getSalarySobService(user).listPageByParam(queryParam).getList();
if(list != null && list.size()>0){
if (list != null && list.size() > 0) {
List<Long> salarySobIds = list.stream().map(SalarySobPO::getId).collect(Collectors.toList());
Long count = getSalarySobBackItemService(user).getCountBySalarySobIdIn(salarySobIds);
if(count.equals(0L)){
if (count.equals(0L)) {
// 薪资账套的默认的回算薪资项目
Set<Long> SalarySobBackItemIds = SalaryEntityUtil.properties(SalarySobBackItemBO.getDefault(), SalarySobDefaultBackItemPO::getSysSalaryItemId);
// 获取薪资项目中是否已经添加回算薪资项目
@ -118,7 +118,7 @@ public class SalarySobWrapper extends Service {
List<SalarySobBackItemPO> salarySobBackItems = new ArrayList<>();
// 获取默认添加后的回算薪资项目
List<SalaryItemPO> salaryBackItemPOS = getSalaryItemService(user).listBySysSalaryItemIds(SalarySobBackItemIds);
for(Long id : salarySobIds){
for (Long id : salarySobIds) {
for (SalarySobDefaultBackItemPO salarySobDefaultBackItemPO : SalarySobBackItemBO.getDefault()) {
Date now = new Date();
Map<Long, SalaryItemPO> sysSalaryItemMap = SalaryEntityUtil.convert2Map(salaryBackItemPOS, SalaryItemPO::getSysSalaryItemId);
@ -134,7 +134,7 @@ public class SalarySobWrapper extends Service {
.valueType(salaryItemPO.getValueType())
.formulaId(salarySobDefaultBackItemPO.getFormulaId())
.backCalcType(salarySobDefaultBackItemPO.getBackCalcType())
.creator((long)user.getUID())
.creator((long) user.getUID())
.createTime(now)
.updateTime(now)
.deleteType(DeleteTypeEnum.NOT_DELETED.getValue())
@ -174,7 +174,7 @@ public class SalarySobWrapper extends Service {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98379, "参数错误,薪资账套不存在或者已被删除"));
}
// 薪资装套po转换成薪资账套详情dto
basicForm = SalarySobBO.convert2FormDTO(basicForm,salarySobPO);
basicForm = SalarySobBO.convert2FormDTO(basicForm, salarySobPO);
}
// 转换成前端所需的数据格式
data.put("basicForm", basicForm);
@ -251,7 +251,7 @@ public class SalarySobWrapper extends Service {
Collection<TaxAgentPO> taxAgentPOS = getTaxAgentService(user).listAllTaxAgentsAsAdmin(employeeId);
Set<Long> taxAgentIds = SalaryEntityUtil.properties(taxAgentPOS, TaxAgentPO::getId);
return taxAgentIds.contains(salarySobPO.getTaxAgentId())||Objects.isNull(salarySobPO.getTaxAgentId());
return taxAgentIds.contains(salarySobPO.getTaxAgentId()) || Objects.isNull(salarySobPO.getTaxAgentId());
}
/**