package com.engine.salary.biz; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.AddUpDeduction; import com.engine.salary.entity.datacollection.dto.AddUpDeductionDTO; import com.engine.salary.entity.datacollection.dto.AddUpDeductionRecordDTO; import com.engine.salary.entity.datacollection.param.AddUpDeductionQueryParam; import com.engine.salary.mapper.datacollection.AddUpDeductionMapper; 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 AddUpDeductionBiz extends BaseBean { private final EncryptUtil encryptUtil = new EncryptUtil(); /** * 关联查询查询列表 * * @param param * @return */ public List list(AddUpDeductionQueryParam param) { SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { AddUpDeductionMapper mapper = sqlSession.getMapper(AddUpDeductionMapper.class); List list = mapper.list(param); list = encryptUtil.decryptList(list, AddUpDeductionDTO.class); return list; } finally { sqlSession.close(); } } /** * 条件查询 * * @param param * @return */ public List listSome(AddUpDeduction param) { SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { AddUpDeductionMapper mapper = sqlSession.getMapper(AddUpDeductionMapper.class); if (CollectionUtils.isNotEmpty(param.getEmployeeIds())) { List addUpDeductions = new ArrayList<>(); List> 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 addUpDeductions = mapper.listSome(param); return encryptUtil.decryptList(addUpDeductions, AddUpDeduction.class); } } finally { sqlSession.close(); } } /** * 根据id获取 * * @param id * @return */ public AddUpDeduction getById(Long id) { SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { AddUpDeductionMapper mapper = sqlSession.getMapper(AddUpDeductionMapper.class); AddUpDeduction byId = mapper.getById(id); return encryptUtil.decrypt(byId, AddUpDeduction.class); } finally { sqlSession.close(); } } /** * 详情列表 * * @param param * @return */ public List recordList(AddUpDeductionQueryParam param) { SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { AddUpDeductionMapper mapper = sqlSession.getMapper(AddUpDeductionMapper.class); List addUpDeductionRecordStrDTOS = mapper.recordList(param); return encryptUtil.decryptList(addUpDeductionRecordStrDTOS, AddUpDeductionRecordDTO.class); } finally { sqlSession.close(); } } /** * 批量插入 * * @param param * @return */ public void batchSave(List param) { if (CollectionUtils.isEmpty(param)) { return; } SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { AddUpDeductionMapper mapper = sqlSession.getMapper(AddUpDeductionMapper.class); encryptUtil.encryptList(param, AddUpDeduction.class); List> partition = Lists.partition(param, 100); partition.forEach(mapper::insertData); sqlSession.commit(); } finally { sqlSession.close(); } } /** * 批量插入 * * @param param * @return */ public void batchUpdate(List param) { if (CollectionUtils.isEmpty(param)) { return; } SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { AddUpDeductionMapper mapper = sqlSession.getMapper(AddUpDeductionMapper.class); encryptUtil.encryptList(param, AddUpDeduction.class); List> partition = Lists.partition(param, 100); partition.forEach(mapper::updateData); sqlSession.commit(); } finally { sqlSession.close(); } } /** * 处理导入数据 * * @param pos */ public void handleImportData(List pos) { if (CollectionUtils.isEmpty(pos)) { return; } AddUpDeduction po = pos.get(0); // 多条相同人的则以第一条为准,如果逆序排列(用于重复的则以最后一条为准)Collections.reverse(pos); // 去重(通过记录的唯一条件(申报月份,人员id,个税扣缴义务人id)拼接) List finalPos = pos.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getEmployeeId() + "-" + f.getTaxAgentId()))), ArrayList::new)); // 查询已有数据 List list = listSome(AddUpDeduction.builder().declareMonth(po.getDeclareMonth()).build()); // 待修改的 本地已存在则更新【交集】 List updateList = list.stream().map(m -> { Optional optional = finalPos.stream().filter(p -> (p.getEmployeeId() + "-" + p.getTaxAgentId()).equals(m.getEmployeeId() + "-" + m.getTaxAgentId())).findFirst(); AddUpDeduction temp = null; if (optional.isPresent()) { temp = optional.get(); // 换成本地库的id temp.setId(m.getId()); } return temp; }).filter(Objects::nonNull).collect(Collectors.toList()); // 待新增的 导入比本地多,则新增【差集(导入 - local)】 List saveList = finalPos.stream().map(m -> { Optional optional = list.stream().filter(p -> (p.getEmployeeId() + "-" + p.getTaxAgentId()).equals(m.getEmployeeId() + "-" + m.getTaxAgentId())).findFirst(); AddUpDeduction temp = null; if (!optional.isPresent()) { temp = m; } return temp; }).filter(Objects::nonNull).collect(Collectors.toList()); // 修改 if (CollectionUtils.isNotEmpty(updateList)) { batchUpdate(updateList); } // 保存 if (CollectionUtils.isNotEmpty(saveList)) { batchSave(saveList); } // 记录操作日志 // saveList.addAll(updateList); // // if (CollectionUtils.isNotEmpty(saveList)) { // LoggerContext loggerContext = new LoggerContext(); // loggerContext.setTargetName(SalaryI18nUtil.getI18nLabel(message.getTenantKey(), message.getUserId(), 100351, "导入累计专项附加扣除")); // loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); // loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(message.getTenantKey(), message.getUserId(), 100351, "导入累计专项附加扣除")); // loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(message.getTenantKey(), message.getUserId(), 100351, "导入累计专项附加扣除")); // loggerContext.setNewValueList(saveList); // loggerContext.setTenant_key(message.getTenantKey()); // loggerContext.setOperator(message.getUserId().toString()); // loggerContext.setOperatorName(message.getOpreator()); // loggerContext.setClientIp(message.getClientIp()); // addUpDeductionLoggerTemplate.write(loggerContext); // } } public void batchDeleteByIDS(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { AddUpDeductionMapper mapper = sqlSession.getMapper(AddUpDeductionMapper.class); List> partition = Lists.partition(ids, 100); partition.forEach(mapper::deleteData); sqlSession.commit(); } finally { sqlSession.close(); } } }