weaver-hrm-salary/src/com/engine/salary/biz/SpecialAddDeductionBiz.java

224 lines
9.5 KiB
Java
Raw Normal View History

2022-10-31 16:19:42 +08:00
package com.engine.salary.biz;
2024-02-21 18:19:02 +08:00
import com.engine.salary.config.SalaryElogConfig;
2024-03-12 14:34:44 +08:00
import com.engine.hrmelog.entity.dto.LoggerContext;
import com.engine.salary.encrypt.EncryptUtil;
import com.engine.salary.entity.datacollection.dto.SpecialAddDeductionListDTO;
2022-11-02 17:27:07 +08:00
import com.engine.salary.entity.datacollection.dto.SpecialAddDeductionRecordDTO;
import com.engine.salary.entity.datacollection.param.SpecialAddDeductionQueryParam;
2022-10-31 16:19:42 +08:00
import com.engine.salary.entity.datacollection.po.SpecialAddDeductionPO;
2024-02-21 18:19:02 +08:00
import com.engine.salary.enums.OperateTypeEnum;
2022-10-31 16:19:42 +08:00
import com.engine.salary.mapper.datacollection.SpecialAddDeductionMapper;
2024-02-21 18:19:02 +08:00
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.db.MapperProxyFactory;
2022-10-31 16:19:42 +08:00
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.ibatis.session.SqlSession;
import weaver.conn.mybatis.MyBatisFactory;
import weaver.general.BaseBean;
2024-02-21 18:19:02 +08:00
import weaver.hrm.User;
2022-10-31 16:19:42 +08:00
import java.util.*;
import java.util.stream.Collectors;
public class SpecialAddDeductionBiz extends BaseBean {
private EncryptUtil encryptUtil = new EncryptUtil();
private SpecialAddDeductionMapper mapper() {
return MapperProxyFactory.getProxy(SpecialAddDeductionMapper.class);
}
2022-10-31 16:19:42 +08:00
/**
2022-11-02 17:27:07 +08:00
* 根据id获取
2022-10-31 16:19:42 +08:00
*
2022-11-02 17:27:07 +08:00
* @param id
2022-10-31 16:19:42 +08:00
* @return
*/
2022-11-02 17:27:07 +08:00
public SpecialAddDeductionPO getById(Long id) {
try (SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession()) {
2022-10-31 16:19:42 +08:00
SpecialAddDeductionMapper mapper = sqlSession.getMapper(SpecialAddDeductionMapper.class);
2022-11-02 17:27:07 +08:00
SpecialAddDeductionPO byId = mapper.getById(id);
return encryptUtil.decrypt(byId, SpecialAddDeductionPO.class);
2022-10-31 16:19:42 +08:00
}
}
2022-11-02 17:27:07 +08:00
public List<SpecialAddDeductionRecordDTO> listDTOByParam(SpecialAddDeductionQueryParam param) {
List<SpecialAddDeductionRecordDTO> specialAddDeductionRecordDTOS = mapper().listDtoByParam(param);
return encryptUtil.decryptList(specialAddDeductionRecordDTOS, SpecialAddDeductionRecordDTO.class);
2022-10-31 16:19:42 +08:00
}
public List<SpecialAddDeductionListDTO> listByParam(SpecialAddDeductionQueryParam param) {
List<SpecialAddDeductionListDTO> specialAddDeductionListDTOS = mapper().listByParam(param);
2024-03-14 15:28:14 +08:00
encryptUtil.decryptList(specialAddDeductionListDTOS, SpecialAddDeductionListDTO.class);
return SalaryI18nUtil.i18nList(specialAddDeductionListDTOS);
}
public List<SpecialAddDeductionPO> listByTaxAgentIds(List<Long> taxAgentIds) {
try (SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession()) {
SpecialAddDeductionMapper mapper = sqlSession.getMapper(SpecialAddDeductionMapper.class);
List<SpecialAddDeductionPO> pos = mapper.listByTaxAgentIds(taxAgentIds);
return encryptUtil.decryptList(pos, SpecialAddDeductionPO.class);
2022-10-31 16:19:42 +08:00
}
}
2022-11-02 17:27:07 +08:00
2022-10-31 16:19:42 +08:00
/**
* 批量插入
*
* @param param
* @return
*/
2022-11-02 17:27:07 +08:00
public void batchSave(List<SpecialAddDeductionPO> param) {
if (CollectionUtils.isEmpty(param)) {
2022-10-31 16:19:42 +08:00
return;
}
2022-11-02 17:27:07 +08:00
try (SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession()) {
SpecialAddDeductionMapper mapper = sqlSession.getMapper(SpecialAddDeductionMapper.class);
encryptUtil.encryptList(param, SpecialAddDeductionPO.class);
2022-11-02 17:27:07 +08:00
List<List<SpecialAddDeductionPO>> partition = Lists.partition(param, 100);
partition.forEach(mapper::batchInsert);
2022-10-31 16:19:42 +08:00
sqlSession.commit();
}
}
/**
* 批量插入
*
* @param param
* @return
*/
2022-11-02 17:27:07 +08:00
public void batchUpdate(List<SpecialAddDeductionPO> param) {
if (CollectionUtils.isEmpty(param)) {
2022-10-31 16:19:42 +08:00
return;
}
SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession();
try {
2022-11-02 17:27:07 +08:00
SpecialAddDeductionMapper mapper = sqlSession.getMapper(SpecialAddDeductionMapper.class);
encryptUtil.encryptList(param, SpecialAddDeductionPO.class);
List<List<SpecialAddDeductionPO>> partition = Lists.partition(param, 50);
2022-11-02 17:27:07 +08:00
partition.forEach(mapper::updateBatchSelective);
2022-10-31 16:19:42 +08:00
sqlSession.commit();
} finally {
sqlSession.close();
}
}
2024-02-21 18:19:02 +08:00
/**
* 条件查询
*
* @param param
* @return
*/
public List<SpecialAddDeductionPO> listSome(SpecialAddDeductionPO param) {
SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession();
try {
SpecialAddDeductionMapper mapper = sqlSession.getMapper(SpecialAddDeductionMapper.class);
List<SpecialAddDeductionPO> specialAddDeductionPOS = mapper.listSome(param);
return encryptUtil.decryptList(specialAddDeductionPOS, SpecialAddDeductionPO.class);
} finally {
sqlSession.close();
}
}
2022-10-31 16:19:42 +08:00
/**
* 处理导入数据
*
* @param pos
*/
2024-02-21 18:19:02 +08:00
public void handleImportData(List<SpecialAddDeductionPO> pos, User user) {
2022-10-31 16:19:42 +08:00
if (CollectionUtils.isEmpty(pos)) {
return;
}
2022-11-02 17:27:07 +08:00
SpecialAddDeductionPO po = pos.get(0);
2022-10-31 16:19:42 +08:00
// 多条相同人的则以第一条为准如果逆序排列用于重复的则以最后一条为准Collections.reverse(pos);
// 去重(通过记录的唯一条件(申报月份人员id个税扣缴义务人id)拼接)
2022-11-02 17:27:07 +08:00
List<SpecialAddDeductionPO> finalPos = pos.stream()
.collect(Collectors.collectingAndThen(
Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(f -> f.getEmployeeId() + "-" + f.getTaxAgentId()))),
ArrayList::new)
2022-11-02 17:27:07 +08:00
);
2022-10-31 16:19:42 +08:00
// 查询已有数据
List<SpecialAddDeductionPO> list = listByTaxAgentIds(null);
2022-10-31 16:19:42 +08:00
// 待修改的 本地已存在则更新【交集】
2022-11-02 17:27:07 +08:00
List<SpecialAddDeductionPO> updateList = list.stream()
.map(m -> finalPos.stream()
.filter(p -> (p.getEmployeeId() + "-" + p.getTaxAgentId()).equals(m.getEmployeeId() + "-" + m.getTaxAgentId()))
.findFirst()
.map(t -> t.setId(m.getId()))
.orElse(null)
).filter(Objects::nonNull).collect(Collectors.toList());
2022-10-31 16:19:42 +08:00
// 待新增的 导入比本地多,则新增【差集(导入 - local)】
2022-11-02 17:27:07 +08:00
List<SpecialAddDeductionPO> saveList = finalPos.stream()
.filter(m -> list.stream().noneMatch(p -> (p.getEmployeeId() + "-" + p.getTaxAgentId()).equals(m.getEmployeeId() + "-" + m.getTaxAgentId()))
).filter(Objects::nonNull).collect(Collectors.toList());
2022-10-31 16:19:42 +08:00
// 修改
if (CollectionUtils.isNotEmpty(updateList)) {
batchUpdate(updateList);
}
// 保存
if (CollectionUtils.isNotEmpty(saveList)) {
batchSave(saveList);
}
2024-02-21 18:19:02 +08:00
// 记录操作日志
// 根据人员id查出保存的数据
List<Long> empIds = saveList.stream().map(SpecialAddDeductionPO::getEmployeeId).collect(Collectors.toList());
List<SpecialAddDeductionPO> insertLogList = listSome(SpecialAddDeductionPO.builder().employeeIds(empIds).build());
Map<String, SpecialAddDeductionPO> insertMap = SalaryEntityUtil.convert2Map(insertLogList, p -> p.getTaxAgentId() + "-" + p.getEmployeeId());
saveList.forEach(save -> {
SpecialAddDeductionPO specialAddDeductionPO = insertMap.get(save.getTaxAgentId() + "-" + save.getEmployeeId());
if (specialAddDeductionPO != null) {
updateList.add(specialAddDeductionPO);
}
});
if (CollectionUtils.isNotEmpty(updateList)) {
LoggerContext loggerContext = new LoggerContext();
loggerContext.setUser(user);
2024-02-23 15:11:56 +08:00
if(updateList.size() == 1) {
loggerContext.setTargetId(updateList.get(0).getId().toString());
}
2024-02-21 18:19:02 +08:00
loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel( 0, "专项附加扣除 "));
loggerContext.setOperateType(OperateTypeEnum.ADD.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "导入"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "导入专项附加扣除 "));
loggerContext.setNewValueList(updateList);
SalaryElogConfig.specialAddDeductionLoggerTemplate.write(loggerContext);
}
2022-10-31 16:19:42 +08:00
}
/**
* @return void
2022-11-02 17:27:07 +08:00
* @description 批量删除
2022-10-31 16:19:42 +08:00
*/
2022-11-02 17:27:07 +08:00
public void batchDeleteByIds(List<Long> deleteIds) {
2022-10-31 16:19:42 +08:00
if (CollectionUtils.isEmpty(deleteIds)) {
return;
}
2022-11-02 17:27:07 +08:00
try (SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession()) {
SpecialAddDeductionMapper mapper = sqlSession.getMapper(SpecialAddDeductionMapper.class);
2022-10-31 16:19:42 +08:00
List<List<Long>> partition = Lists.partition(deleteIds, 100);
2022-11-02 17:27:07 +08:00
partition.forEach(mapper::deleteByIds);
2022-10-31 16:19:42 +08:00
sqlSession.commit();
}
}
public List<SpecialAddDeductionPO> getByEmployeeId(List<Long> employeeIds, Long taxAgentId) {
if (CollectionUtils.isEmpty(employeeIds)) {
employeeIds = Collections.emptyList();
}
return mapper().getByEmployeeIds(employeeIds, taxAgentId)
.stream()
.filter(Objects::nonNull)
.filter(s -> s.getEmployeeId() != null)
.map(item -> encryptUtil.decrypt(item, SpecialAddDeductionPO.class))
.collect(Collectors.toList());
}
2022-10-31 16:19:42 +08:00
}