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

174 lines
7.0 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.engine.salary.biz;
import com.engine.salary.encrypt.EncryptUtil;
import com.engine.salary.entity.datacollection.dto.SpecialAddDeductionListDTO;
import com.engine.salary.entity.datacollection.dto.SpecialAddDeductionRecordDTO;
import com.engine.salary.entity.datacollection.param.SpecialAddDeductionQueryParam;
import com.engine.salary.entity.datacollection.po.SpecialAddDeductionPO;
import com.engine.salary.mapper.datacollection.SpecialAddDeductionMapper;
import com.engine.salary.util.db.MapperProxyFactory;
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;
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);
}
/**
* 根据id获取
*
* @param id
* @return
*/
public SpecialAddDeductionPO getById(Long id) {
try (SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession()) {
SpecialAddDeductionMapper mapper = sqlSession.getMapper(SpecialAddDeductionMapper.class);
SpecialAddDeductionPO byId = mapper.getById(id);
return encryptUtil.decrypt(byId, SpecialAddDeductionPO.class);
}
}
public List<SpecialAddDeductionRecordDTO> listDTOByParam(SpecialAddDeductionQueryParam param) {
List<SpecialAddDeductionRecordDTO> specialAddDeductionRecordDTOS = mapper().listDtoByParam(param);
return encryptUtil.decryptList(specialAddDeductionRecordDTOS, SpecialAddDeductionRecordDTO.class);
}
public List<SpecialAddDeductionListDTO> listByParam(SpecialAddDeductionQueryParam param) {
List<SpecialAddDeductionListDTO> specialAddDeductionListDTOS = mapper().listByParam(param);
return encryptUtil.decryptList(specialAddDeductionListDTOS, SpecialAddDeductionListDTO.class);
}
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);
}
}
/**
* 批量插入
*
* @param param
* @return
*/
public void batchSave(List<SpecialAddDeductionPO> param) {
if (CollectionUtils.isEmpty(param)) {
return;
}
try (SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession()) {
SpecialAddDeductionMapper mapper = sqlSession.getMapper(SpecialAddDeductionMapper.class);
encryptUtil.encryptList(param, SpecialAddDeductionPO.class);
List<List<SpecialAddDeductionPO>> partition = Lists.partition(param, 100);
partition.forEach(mapper::batchInsert);
sqlSession.commit();
}
}
/**
* 批量插入
*
* @param param
* @return
*/
public void batchUpdate(List<SpecialAddDeductionPO> param) {
if (CollectionUtils.isEmpty(param)) {
return;
}
SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession();
try {
SpecialAddDeductionMapper mapper = sqlSession.getMapper(SpecialAddDeductionMapper.class);
encryptUtil.encryptList(param, SpecialAddDeductionPO.class);
List<List<SpecialAddDeductionPO>> partition = Lists.partition(param, 100);
partition.forEach(mapper::updateBatchSelective);
sqlSession.commit();
} finally {
sqlSession.close();
}
}
/**
* 处理导入数据
*
* @param pos
*/
public void handleImportData(List<SpecialAddDeductionPO> pos) {
if (CollectionUtils.isEmpty(pos)) {
return;
}
SpecialAddDeductionPO po = pos.get(0);
// 多条相同人的则以第一条为准如果逆序排列用于重复的则以最后一条为准Collections.reverse(pos);
// 去重(通过记录的唯一条件(申报月份人员id个税扣缴义务人id)拼接)
List<SpecialAddDeductionPO> finalPos = pos.stream()
.collect(Collectors.collectingAndThen(
Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(f -> f.getEmployeeId() + "-" + f.getTaxAgentId()))),
ArrayList::new)
);
// 查询已有数据
List<SpecialAddDeductionPO> list = listByTaxAgentIds(null);
// 待修改的 本地已存在则更新【交集】
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());
// 待新增的 导入比本地多,则新增【差集(导入 - local)】
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());
// 修改
if (CollectionUtils.isNotEmpty(updateList)) {
batchUpdate(updateList);
}
// 保存
if (CollectionUtils.isNotEmpty(saveList)) {
batchSave(saveList);
}
}
/**
* @return void
* @description 批量删除
*/
public void batchDeleteByIds(List<Long> deleteIds) {
if (CollectionUtils.isEmpty(deleteIds)) {
return;
}
try (SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession()) {
SpecialAddDeductionMapper mapper = sqlSession.getMapper(SpecialAddDeductionMapper.class);
List<List<Long>> partition = Lists.partition(deleteIds, 100);
partition.forEach(mapper::deleteByIds);
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());
}
}