diff --git a/src/com/engine/salary/biz/SalaryArchiveBiz.java b/src/com/engine/salary/biz/SalaryArchiveBiz.java index 2d2ea877b..e02dd4662 100644 --- a/src/com/engine/salary/biz/SalaryArchiveBiz.java +++ b/src/com/engine/salary/biz/SalaryArchiveBiz.java @@ -1,10 +1,16 @@ package com.engine.salary.biz; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveQueryParam; import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; import com.engine.salary.mapper.archive.SalaryArchiveMapper; +import com.engine.salary.util.page.PageInfo; +import com.engine.salary.util.page.PageUtil; import org.apache.ibatis.session.SqlSession; import weaver.conn.mybatis.MyBatisFactory; +import java.util.List; + public class SalaryArchiveBiz { public SalaryArchivePO getById(Long salaryArchiveId) { @@ -17,4 +23,16 @@ public class SalaryArchiveBiz { } } + public PageInfo listPage(SalaryArchiveQueryParam param) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SalaryArchiveMapper mapper = sqlSession.getMapper(SalaryArchiveMapper.class); + PageUtil.start(param.getCurrent(), param.getPageSize()); + List list = mapper.list(param); + PageInfo pageInfo = new PageInfo(list,SalaryArchiveListDTO.class); + return pageInfo; + } finally { + sqlSession.close(); + } + } } diff --git a/src/com/engine/salary/biz/SalaryArchiveDimissionBiz.java b/src/com/engine/salary/biz/SalaryArchiveDimissionBiz.java new file mode 100644 index 000000000..3e1a623f5 --- /dev/null +++ b/src/com/engine/salary/biz/SalaryArchiveDimissionBiz.java @@ -0,0 +1,42 @@ +package com.engine.salary.biz; + +import com.engine.salary.entity.salaryarchive.po.SalaryArchiveDimissionPO; +import com.engine.salary.mapper.archive.SalaryArchiveDimissionMapper; +import org.apache.ibatis.session.SqlSession; +import weaver.conn.mybatis.MyBatisFactory; + +import java.util.List; + +public class SalaryArchiveDimissionBiz { + public List dimissionSets() { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SalaryArchiveDimissionMapper mapper = sqlSession.getMapper(SalaryArchiveDimissionMapper.class); + return mapper.listAll(); + } finally { + sqlSession.close(); + } + } + + public void updateById(SalaryArchiveDimissionPO po) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SalaryArchiveDimissionMapper mapper = sqlSession.getMapper(SalaryArchiveDimissionMapper.class); + mapper.updateIgnoreNull(po); + sqlSession.commit(); + } finally { + sqlSession.close(); + } + } + + public void insert(SalaryArchiveDimissionPO build) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SalaryArchiveDimissionMapper mapper = sqlSession.getMapper(SalaryArchiveDimissionMapper.class); + mapper.insertIgnoreNull(build); + sqlSession.commit(); + } finally { + sqlSession.close(); + } + } +} diff --git a/src/com/engine/salary/biz/SalaryArchiveItemBiz.java b/src/com/engine/salary/biz/SalaryArchiveItemBiz.java index 8ac29b1eb..feeef6f0a 100644 --- a/src/com/engine/salary/biz/SalaryArchiveItemBiz.java +++ b/src/com/engine/salary/biz/SalaryArchiveItemBiz.java @@ -19,4 +19,14 @@ public class SalaryArchiveItemBiz { sqlSession.close(); } } + + public List listByParam(SalaryArchiveItemQueryParam build) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SalaryArchiveItemMapper mapper = sqlSession.getMapper(SalaryArchiveItemMapper.class); + return mapper.listByParam(build); + } finally { + sqlSession.close(); + } + } } diff --git a/src/com/engine/salary/biz/TaxRateBiz.java b/src/com/engine/salary/biz/TaxRateBiz.java index d4acef878..d8d567e5b 100644 --- a/src/com/engine/salary/biz/TaxRateBiz.java +++ b/src/com/engine/salary/biz/TaxRateBiz.java @@ -45,7 +45,6 @@ public class TaxRateBiz extends BaseBean { if (Objects.isNull(taxRateBase)) { SysTaxRateBase sysTaxRateBase = sysTaxRateBaseMapper.getById(id); taxRateBase = new TaxRateBase(); - //fixme 逻辑可能有问题,自定义和系统的id保持一致? if (sysTaxRateBase != null) { BeanUtils.copyProperties(sysTaxRateBase, taxRateBase); } diff --git a/src/com/engine/salary/common/LocalDateRange.java b/src/com/engine/salary/common/LocalDateRange.java index e4b3d459f..28c2359d3 100644 --- a/src/com/engine/salary/common/LocalDateRange.java +++ b/src/com/engine/salary/common/LocalDateRange.java @@ -6,7 +6,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -import java.time.LocalDate; +import java.util.Date; /** * 日期范围 @@ -24,10 +24,10 @@ import java.time.LocalDate; public class LocalDateRange { //"开始日期 - private LocalDate fromDate; + private Date fromDate; //结束日期 - private LocalDate endDate; + private Date endDate; } diff --git a/src/com/engine/salary/constant/SalaryItemConstant.java b/src/com/engine/salary/constant/SalaryItemConstant.java index de5fdb8ab..07e9a7bbc 100644 --- a/src/com/engine/salary/constant/SalaryItemConstant.java +++ b/src/com/engine/salary/constant/SalaryItemConstant.java @@ -1,10 +1,13 @@ package com.engine.salary.constant; /** - * @Description: 薪资项目常量 - * @Author: wangxiangzhong - * @Date: 2021/12/30 13:32 - */ + * 薪资项目常量 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public class SalaryItemConstant { /** diff --git a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java index 3d8c3c474..f382a7e11 100644 --- a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java +++ b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java @@ -1,5 +1,17 @@ package com.engine.salary.entity.salaryarchive.bo; +import com.engine.salary.common.LocalDateRange; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveItemDataDTO; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveTaxAgentDataDTO; +import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; +import com.engine.salary.entity.salaryarchive.po.SalaryArchiveTaxAgentPO; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + /** * @Description: 薪资档案 * @Author: wangxiangzhong @@ -88,76 +100,76 @@ public class SalaryArchiveBO { * @param isOnlyTaxAgent * @return */ -// public static List buildSalaryArchiveData(List salaryArchiveTaxAgentList, -// List salaryArchiveItemDataList, -// LocalDateRange localDateRange, -// List allEmployeeIds, -// boolean isOnlyTaxAgent) { -// // 开始日期 -// LocalDate start = localDateRange.getFromDate(); -// // 结束日期 -// LocalDate end = localDateRange.getEndDate(); -// -// List list = new ArrayList<>(); -// allEmployeeIds.forEach(e->{ -// // 同一个人的个税扣缴义务人调整历史数据 -// List salaryArchiveTaxAgents = salaryArchiveTaxAgentList.stream().filter(f->f.getEmployeeId().equals(e)).collect(Collectors.toList()); -// // 同一个人的薪资项目调整历史数据 -// List salaryArchiveItems = salaryArchiveItemDataList.stream().filter(d->d.getEmployeeId().equals(e)).collect(Collectors.toList()); -// List salaryArchiveItemIds = salaryArchiveItems.stream().map(SalaryArchiveItemPO::getSalaryItemId).distinct().collect(Collectors.toList()); -// -// SalaryArchiveDataDTO salaryArchiveData = new SalaryArchiveDataDTO(); -// salaryArchiveData.setEmployeeId(e); -// List taxAgents = new ArrayList<>(); -// // 按个税扣缴义务人生效日期时间段切割 -// LocalDate endTemp = end; -// for (SalaryArchiveTaxAgentPO salaryArchiveTaxAgent : salaryArchiveTaxAgents) { -// Date fromDate = salaryArchiveTaxAgent.getEffectiveTime(); -// if (fromDate.isAfter(endTemp) || !endTemp.isAfter(start)) { -// continue; -// } -// SalaryArchiveTaxAgentDataDTO taxAgent = new SalaryArchiveTaxAgentDataDTO(); -// taxAgent.setTaxAgentId(salaryArchiveTaxAgent.getTaxAgentId()); -// taxAgent.setEffectiveDateRange(LocalDateRange.builder().fromDate((fromDate.isBefore(start)?start:fromDate)).endDate(endTemp).build()); -// -// // 薪资项目数据按个税扣缴义务人切割 -// if (!isOnlyTaxAgent) { -// // 开始日期 -// LocalDate startItem = taxAgent.getEffectiveDateRange().getFromDate(); -// // 结束日期 -// LocalDate endItem = taxAgent.getEffectiveDateRange().getEndDate(); -// LocalDate endTempItem = endItem; -// List salaryItemValues = new ArrayList<>(); -// -// for (Long salaryArchiveItemId : salaryArchiveItemIds) { -// for (SalaryArchiveItemPO salaryArchiveItem : salaryArchiveItems) { -// if (!salaryArchiveItemId.equals(salaryArchiveItem.getSalaryItemId())) { -// continue; -// } -// LocalDate fromDateItem = salaryArchiveItem.getEffectiveTime(); -// if (fromDateItem.isAfter(endTempItem) || !endTempItem.isAfter(startItem)) { -// continue; -// } -// SalaryArchiveItemDataDTO salaryArchiveItemData = new SalaryArchiveItemDataDTO(); -// salaryArchiveItemData.setEffectiveDateRange(LocalDateRange.builder().fromDate((fromDateItem.isBefore(startItem)?startItem:fromDateItem)).endDate(endTempItem).build()); -// salaryArchiveItemData.setSalaryItemId(salaryArchiveItem.getSalaryItemId()); -// salaryArchiveItemData.setValue(salaryArchiveItem.getItemValue()); -// salaryItemValues.add(salaryArchiveItemData); -// endTempItem = fromDateItem; -// } -// endTempItem = endItem; -// } -// -// taxAgent.setSalaryItemValues(salaryItemValues); -// } -// -// taxAgents.add(taxAgent); -// endTemp = fromDate; -// } -// salaryArchiveData.setTaxAgents(taxAgents); -// list.add(salaryArchiveData); -// }); -// -// return list; -// } + public static List buildSalaryArchiveData(List salaryArchiveTaxAgentList, + List salaryArchiveItemDataList, + LocalDateRange localDateRange, + List allEmployeeIds, + boolean isOnlyTaxAgent) { + // 开始日期 + Date start = localDateRange.getFromDate(); + // 结束日期 + Date end = localDateRange.getEndDate(); + + List list = new ArrayList<>(); + allEmployeeIds.forEach(e->{ + // 同一个人的个税扣缴义务人调整历史数据 + List salaryArchiveTaxAgents = salaryArchiveTaxAgentList.stream().filter(f->f.getEmployeeId().equals(e)).collect(Collectors.toList()); + // 同一个人的薪资项目调整历史数据 + List salaryArchiveItems = salaryArchiveItemDataList.stream().filter(d->d.getEmployeeId().equals(e)).collect(Collectors.toList()); + List salaryArchiveItemIds = salaryArchiveItems.stream().map(SalaryArchiveItemPO::getSalaryItemId).distinct().collect(Collectors.toList()); + + SalaryArchiveDataDTO salaryArchiveData = new SalaryArchiveDataDTO(); + salaryArchiveData.setEmployeeId(e); + List taxAgents = new ArrayList<>(); + // 按个税扣缴义务人生效日期时间段切割 + Date endTemp = end; + for (SalaryArchiveTaxAgentPO salaryArchiveTaxAgent : salaryArchiveTaxAgents) { + Date fromDate = salaryArchiveTaxAgent.getEffectiveTime(); + if (fromDate.after(endTemp) || !endTemp.after(start)) { + continue; + } + SalaryArchiveTaxAgentDataDTO taxAgent = new SalaryArchiveTaxAgentDataDTO(); + taxAgent.setTaxAgentId(salaryArchiveTaxAgent.getTaxAgentId()); + taxAgent.setEffectiveDateRange(LocalDateRange.builder().fromDate((fromDate.before(start)?start:fromDate)).endDate(endTemp).build()); + + // 薪资项目数据按个税扣缴义务人切割 + if (!isOnlyTaxAgent) { + // 开始日期 + Date startItem = taxAgent.getEffectiveDateRange().getFromDate(); + // 结束日期 + Date endItem = taxAgent.getEffectiveDateRange().getEndDate(); + Date endTempItem = endItem; + List salaryItemValues = new ArrayList<>(); + + for (Long salaryArchiveItemId : salaryArchiveItemIds) { + for (SalaryArchiveItemPO salaryArchiveItem : salaryArchiveItems) { + if (!salaryArchiveItemId.equals(salaryArchiveItem.getSalaryItemId())) { + continue; + } + Date fromDateItem = salaryArchiveItem.getEffectiveTime(); + if (fromDateItem.after(endTempItem) || !endTempItem.after(startItem)) { + continue; + } + SalaryArchiveItemDataDTO salaryArchiveItemData = new SalaryArchiveItemDataDTO(); + salaryArchiveItemData.setEffectiveDateRange(LocalDateRange.builder().fromDate((fromDateItem.before(startItem)?startItem:fromDateItem)).endDate(endTempItem).build()); + salaryArchiveItemData.setSalaryItemId(salaryArchiveItem.getSalaryItemId()); + salaryArchiveItemData.setValue(salaryArchiveItem.getItemValue()); + salaryItemValues.add(salaryArchiveItemData); + endTempItem = fromDateItem; + } + endTempItem = endItem; + } + + taxAgent.setSalaryItemValues(salaryItemValues); + } + + taxAgents.add(taxAgent); + endTemp = fromDate; + } + salaryArchiveData.setTaxAgents(taxAgents); + list.add(salaryArchiveData); + }); + + return list; + } } diff --git a/src/com/engine/salary/entity/salaryarchive/dto/SalaryArchiveFormDTO.java b/src/com/engine/salary/entity/salaryarchive/dto/SalaryArchiveFormDTO.java index 77fbc5441..caefe0b10 100644 --- a/src/com/engine/salary/entity/salaryarchive/dto/SalaryArchiveFormDTO.java +++ b/src/com/engine/salary/entity/salaryarchive/dto/SalaryArchiveFormDTO.java @@ -5,6 +5,9 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.List; +import java.util.Map; + /** * 薪资档案 *

Copyright: Copyright (c) 2022

@@ -17,22 +20,19 @@ import lombok.NoArgsConstructor; @Builder @NoArgsConstructor @AllArgsConstructor -//员工薪资档案") +//员工薪资档案 public class SalaryArchiveFormDTO { - //主键id") + //主键id private Long id; - //人员信息表的主键id") + //人员信息表的主键id private Long employeeId; - //基本信息") -// private WeaForm baseInfo; -// -// //薪资档案") -// private WeaForm adjustSalaryItems; -// -// //薪资项目调整记录的高级搜索") -// private WeaSearchCondition salaryItemAdjustRecordSearchCondition; + //基本信息 + private Map baseInfo; + + //薪资档案 + private List> adjustSalaryItems; } diff --git a/src/com/engine/salary/entity/salaryarchive/dto/SalaryArchiveListDTO.java b/src/com/engine/salary/entity/salaryarchive/dto/SalaryArchiveListDTO.java index e20701f74..6187eeb84 100644 --- a/src/com/engine/salary/entity/salaryarchive/dto/SalaryArchiveListDTO.java +++ b/src/com/engine/salary/entity/salaryarchive/dto/SalaryArchiveListDTO.java @@ -3,6 +3,7 @@ package com.engine.salary.entity.salaryarchive.dto; import com.cloudstore.eccom.pc.table.WeaTableType; import com.engine.salary.annotation.SalaryTable; import com.engine.salary.annotation.SalaryTableOperate; +import com.engine.salary.annotation.TableTitle; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -26,37 +27,44 @@ import lombok.NoArgsConstructor; }) public class SalaryArchiveListDTO { + @TableTitle(title = "id", dataIndex = "id", key = "id") private Long id; -// @WeaFormat( + // @WeaFormat( // label = "人员信息表的主键id", // tableColumn = @TableColumn(width = "20%") // ) + @TableTitle(title = "人员信息表的主键id", dataIndex = "employeeId", key = "employeeId") private Long employeeId; /** * 姓名 */ + @TableTitle(title = "姓名", dataIndex = "username", key = "username") private String username; /** * 个税扣缴义务人 */ + @TableTitle(title = "个税扣缴义务人", dataIndex = "taxAgentName", key = "taxAgentName") private String taxAgentName; /** * 部门 */ + @TableTitle(title = "部门", dataIndex = "departmentName", key = "departmentName") private String departmentName; /** * 电话 */ + @TableTitle(title = "电话", dataIndex = "mobile", key = "mobile") private String mobile; /** * 员工状态 */ + @TableTitle(title = "员工状态", dataIndex = "employeeStatus", key = "employeeStatus") private String employeeStatus; // // /** diff --git a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemQueryParam.java b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemQueryParam.java index 60a4a8368..bb9f2a321 100644 --- a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemQueryParam.java +++ b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemQueryParam.java @@ -22,4 +22,6 @@ public class SalaryArchiveItemQueryParam { Collection salaryItemIds; Collection salaryArchivesIds; + + Collection employeeIds; } diff --git a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveQueryParam.java b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveQueryParam.java index 3b4944451..8dfc3c8e5 100644 --- a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveQueryParam.java +++ b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveQueryParam.java @@ -11,37 +11,40 @@ import java.util.Collection; import java.util.List; /** - * @Description: 薪资档案 - * @Author: wangxiangzhong - * @Date: 2021-11-03 10:51 - */ + * 薪资档案 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @NoArgsConstructor @AllArgsConstructor -//薪资档案查询参数") +//薪资档案查询参数 public class SalaryArchiveQueryParam extends BaseQueryParam { private Collection ids; - //姓名") + //姓名 private String username; - //个税扣缴义务人id") + //个税扣缴义务人id private Long taxAgentId; - //部门id") + //部门id private List departmentIds; - //岗位id") + //岗位id private List positionIds; - //状态") + //状态 private String userstatus; - //入职日期") + //入职日期 private List hiredate; - //导入类型") + //导入类型 private String importType; } diff --git a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveTaxAgentQueryParam.java b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveTaxAgentQueryParam.java index 4054cf1f1..902f3c9a0 100644 --- a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveTaxAgentQueryParam.java +++ b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveTaxAgentQueryParam.java @@ -20,4 +20,6 @@ public class SalaryArchiveTaxAgentQueryParam { private Date effectiveTime; Collection salaryArchivesIds; + + Collection employeeIds; } diff --git a/src/com/engine/salary/entity/salarysob/bo/SalarySobCycleBO.java b/src/com/engine/salary/entity/salarysob/bo/SalarySobCycleBO.java index baec64caf..5269e0d90 100644 --- a/src/com/engine/salary/entity/salarysob/bo/SalarySobCycleBO.java +++ b/src/com/engine/salary/entity/salarysob/bo/SalarySobCycleBO.java @@ -5,9 +5,8 @@ import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.enums.SalaryCycleTypeEnum; -import java.time.LocalDate; -import java.time.Period; -import java.time.YearMonth; +import java.time.*; +import java.util.Date; import java.util.Objects; /** @@ -77,14 +76,20 @@ public class SalarySobCycleBO { if (result == null) { return null; } + ZoneId zone = ZoneId.systemDefault(); LocalDate fromDate = result.atEndOfMonth(); if (fromDate.getDayOfMonth() > fromDay) { fromDate = result.atDay(fromDay); } + Instant fromInstant = fromDate.atStartOfDay().atZone(zone).toInstant(); + LocalDate endDate = fromDate.plusMonths(1).plusDays(-1); + Instant endInstant = endDate.atStartOfDay().atZone(zone).toInstant(); + + return LocalDateRange.builder() - .fromDate(fromDate) - .endDate(endDate) + .fromDate(Date.from(fromInstant)) + .endDate(Date.from(endInstant)) .build(); } } diff --git a/src/com/engine/salary/enums/SalaryUserStatusEnum.java b/src/com/engine/salary/enums/SalaryUserStatusEnum.java new file mode 100644 index 000000000..74102bef9 --- /dev/null +++ b/src/com/engine/salary/enums/SalaryUserStatusEnum.java @@ -0,0 +1,51 @@ +package com.engine.salary.enums; + +import com.engine.salary.util.SalaryI18nUtil; + +import java.util.Arrays; +import java.util.Optional; + +/** + * @Description: 薪资-员工状态 + * @Author: wangxiangzhong + * @Date: 2021/11/1 16:06 + */ +public enum SalaryUserStatusEnum { + + normal("normal", "在职", 100120), + unavailable("unavailable", "离职", 85902), + locked("locked", "锁定", 102825), + unactive("unactive", "未激活", 102826), + detached("detached", "无公司", 102827), + temp("temp", "临时账号", 102828), + invited("invited", "已邀请", 102829); + + private String value; + + private String defaultLabel; + + private int labelId; + + SalaryUserStatusEnum(String value, String defaultLabel, int labelId) { + this.value = value; + this.defaultLabel = defaultLabel; + this.labelId = labelId; + } + + public String getValue() { + return value; + } + + public String getDefaultLabel() { + return defaultLabel; + } + + public int getLabelId() { + return labelId; + } + + public static String getDefaultLabelByValue(String value) { + Optional optional = Arrays.stream(SalaryUserStatusEnum.values()).filter(r -> r.getValue().equals(value)).findFirst(); + return optional.isPresent() ? SalaryI18nUtil.getI18nLabel(optional.get().getLabelId(), optional.get().getDefaultLabel()) : ""; + } +} diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveDimissionMapper.java b/src/com/engine/salary/mapper/archive/SalaryArchiveDimissionMapper.java new file mode 100644 index 000000000..68fb4a171 --- /dev/null +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveDimissionMapper.java @@ -0,0 +1,64 @@ +package com.engine.salary.mapper.archive; + +import com.engine.salary.entity.salaryarchive.po.SalaryArchiveDimissionPO; + +import java.util.List; + +public interface SalaryArchiveDimissionMapper { + + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(SalaryArchiveDimissionPO salaryArchiveDimission); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + SalaryArchiveDimissionPO getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param salaryArchiveDimission 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(SalaryArchiveDimissionPO salaryArchiveDimission); + + /** + * 修改,修改所有字段 + * + * @param salaryArchiveDimission 修改的记录 + * @return 返回影响行数 + */ + int update(SalaryArchiveDimissionPO salaryArchiveDimission); + + /** + * 修改,忽略null字段 + * + * @param salaryArchiveDimission 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(SalaryArchiveDimissionPO salaryArchiveDimission); + + /** + * 删除记录 + * + * @param salaryArchiveDimission 待删除的记录 + * @return 返回影响行数 + */ + int delete(SalaryArchiveDimissionPO salaryArchiveDimission); + +} \ No newline at end of file diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveDimissionMapper.xml b/src/com/engine/salary/mapper/archive/SalaryArchiveDimissionMapper.xml new file mode 100644 index 000000000..cefb4240a --- /dev/null +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveDimissionMapper.xml @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + t + . + id + , t.dimission_time_interval + , t.create_time + , t.update_time + , t.creator + , t.delete_type + , t.tenant_key + + + + + + + + + + + + + + + INSERT INTO hrsa_salary_archive_dimission + + + + id, + + + dimission_time_interval, + + + create_time, + + + update_time, + + + creator, + + + delete_type, + + + tenant_key, + + + + + #{id}, + + + #{dimissionTimeInterval}, + + + #{createTime}, + + + #{updateTime}, + + + #{creator}, + + + #{deleteType}, + + + #{tenantKey}, + + + + + + + UPDATE hrsa_salary_archive_dimission + + dimission_time_interval=#{dimissionTimeInterval}, + create_time=#{createTime}, + update_time=#{updateTime}, + creator=#{creator}, + delete_type=#{deleteType}, + tenant_key=#{tenantKey}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_salary_archive_dimission + + + dimission_time_interval=#{dimissionTimeInterval}, + + + create_time=#{createTime}, + + + update_time=#{updateTime}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + tenant_key=#{tenantKey}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_salary_archive_dimission + SET delete_type=1 + WHERE id = #{id} + AND delete_type = 0 + + + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveItemMapper.xml b/src/com/engine/salary/mapper/archive/SalaryArchiveItemMapper.xml index 78ae994f8..068740266 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveItemMapper.xml +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveItemMapper.xml @@ -886,18 +886,24 @@ FROM hrsa_salary_archive_item t WHERE delete_type = 0 - AND t.effective_time <= #{effectiveTime} + AND t.effective_time <= #{param.effectiveTime} AND t.salary_item_id IN - #{salaryItemId} + #{param.salaryItemId} AND t.salary_archive_id IN - #{salaryArchiveId} + #{param.salaryArchiveId} + + + + AND t.employee_id IN + + #{param.employeeId} ORDER BY t.effective_time DESC diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java index 39d541148..534644db4 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java @@ -70,10 +70,9 @@ public interface SalaryArchiveMapper { /** * 查询薪资档案列表 * @param param - * @param tenantKey * @return */ - List list(@Param("param") SalaryArchiveQueryParam param, @Param("tenantKey") String tenantKey); + List list(@Param("param") SalaryArchiveQueryParam param); /** * 分页查询薪资档案列表 diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveTaxAgentMapper.xml b/src/com/engine/salary/mapper/archive/SalaryArchiveTaxAgentMapper.xml index 13a5b54b2..0990c5d85 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveTaxAgentMapper.xml +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveTaxAgentMapper.xml @@ -305,6 +305,13 @@ #{salaryArchiveId} + + + AND t.employee_id IN + + #{employeeId} + + ORDER BY t.effective_time DESC diff --git a/src/com/engine/salary/service/SalaryArchiveItemService.java b/src/com/engine/salary/service/SalaryArchiveItemService.java new file mode 100644 index 000000000..c20440c1d --- /dev/null +++ b/src/com/engine/salary/service/SalaryArchiveItemService.java @@ -0,0 +1,97 @@ +package com.engine.salary.service; + +import com.engine.salary.entity.salaryarchive.dto.SalaryItemAdjustRecordListDTO; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveItemSaveParam; +import com.engine.salary.entity.salaryarchive.param.SalaryItemAdjustBeforeParam; +import com.engine.salary.entity.salaryarchive.param.SalaryItemAdjustRecordQueryParam; +import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; + +import java.util.List; +import java.util.Map; + +/** + * 薪资档案-薪资项目 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public interface SalaryArchiveItemService { + + /** + * 获取单个薪资档案项目调整记录 + * + * @param salaryArchiveItemId + * @return + */ + SalaryArchiveItemPO getById(Long salaryArchiveItemId); + + /** + * 获取可以调整的薪资项目 + * + */ + List getCanAdjustSalaryItems(); + + /** + * 获取薪资项目调整前的值 + * + * @param adjustBeforeParam + */ + String getSalaryItemAdjustBeforeValue(SalaryItemAdjustBeforeParam adjustBeforeParam); + + /** + * 获取当前已生效 + * + * @param salaryArchiveId + * @param salaryItemPageIds + */ + List getEffectiveSalaryItems(Long salaryArchiveId, List salaryItemPageIds); + + /** + * 保存薪资项目调整 + * + * @param saveParam + * @return + */ + String saveSalaryItem(SalaryArchiveItemSaveParam saveParam); + + /** + * 删除薪资项目调整 + * + * @param salaryArchiveItemId + * @return + */ + String deleteSalaryItem(Long salaryArchiveItemId); + + /** + * 薪资调整记录列表(分页) + * + * @param page + * @param queryParam + * @param salaryItemIds + * @param tenantKey + * @return + */ +// Page salaryItemAdjustRecordListPage(Page page, SalaryItemAdjustRecordQueryParam queryParam, List salaryItemIds, String tenantKey); + + /** + * 薪资调整记录列表 + * + * @param queryParam + * @param salaryItemIds + * @return + */ + List salaryItemAdjustRecordList(SalaryItemAdjustRecordQueryParam queryParam, List salaryItemIds); + + /** + * 导出薪资项目的调整记录列表 + * + * @param map + * @param username + * @param eteamsId + * @param queryParam + */ + void exportAdjustRecordList(Map map, String username, String eteamsId, SalaryItemAdjustRecordQueryParam queryParam); +} diff --git a/src/com/engine/salary/service/SalaryArchiveService.java b/src/com/engine/salary/service/SalaryArchiveService.java index 9a17e98f7..ca8a4b214 100644 --- a/src/com/engine/salary/service/SalaryArchiveService.java +++ b/src/com/engine/salary/service/SalaryArchiveService.java @@ -1,130 +1,128 @@ -//package com.engine.salary.service; -// -//import com.engine.salary.common.LocalDateRange; -//import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO; -//import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; -//import com.engine.salary.entity.salaryarchive.dto.TaxAgentListDTO; -//import com.engine.salary.entity.salaryarchive.param.SalaryArchiveDimissionSaveParam; -//import com.engine.salary.entity.salaryarchive.param.SalaryArchiveQueryParam; -//import com.engine.salary.entity.salaryarchive.po.SalaryArchiveDimissionPO; -//import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; -//import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; -//import com.engine.salary.entity.salaryarchive.po.SalaryArchiveTaxAgentPO; -//import com.engine.salary.entity.salaryitem.po.SalaryItemPO; -//import com.engine.salary.enums.salaryarchive.SalaryArchiveImportTypeEnum; -// -//import java.util.Collection; -//import java.util.List; -//import java.util.Map; -// -///** -// * 薪资档案 -// *

Copyright: Copyright (c) 2022

-// *

Company: 泛微软件

-// * -// * @author qiantao -// * @version 1.0 -// **/ -//public interface SalaryArchiveService { -// -// /** -// * 获取薪资档案单条主记录 -// * -// * @param salaryArchiveId -// * @return -// */ -// SalaryArchivePO getById(Long salaryArchiveId); -// -// /** -// * 薪资档案列表(分页) -// * -// * @param page -// * @param queryParam -// * @param tenantKey -// * @return -// */ -//// Page listPage(Page page, SalaryArchiveQueryParam queryParam, String tenantKey); -// -// /** -// * 构建薪资档案数据 -// * -// * @param salaryArchives -// * @param taxAgentLists -// * @param salaryItems -// * @param isPage -// * @return -// */ -// List> buildSalaryArchiveData(Collection salaryArchives, Collection taxAgentLists, List salaryItems, Boolean isPage); -// -// /** -// * 获取薪资档案对应的当前生效的薪资项目 -// * -// * @param salaryArchivesIds -// * @return -// */ -// List getCurrentEffectiveItemList(Collection salaryArchivesIds, Collection salaryItemIds); -// -// /** -// * 获取薪资档案对应的当前生效的个税扣缴义务人 -// * -// * @param salaryArchivesIds -// * @return -// */ -// List getCurrentEffectiveTaxAgentList(Collection salaryArchivesIds); -// -// /** -// * 导出薪资档案列表 -// * -// * @param map -// * @param username -// * @param eteamsId -// * @param queryParam -// * @throws Exception -// */ -// void exportList(Map map, String username, String eteamsId, SalaryArchiveQueryParam queryParam); -// -// /** -// * 下载导入模板 -// * -// * @param map -// * @param username -// * @param eteamsId -// * @param salaryArchiveImportTypeEnum -// * @param queryParam -// * @return -// */ -// void downloadTemplate(Map map, String username, String eteamsId, SalaryArchiveImportTypeEnum salaryArchiveImportTypeEnum, SalaryArchiveQueryParam queryParam); -// -// /** -// * 获取离职时段设置 -// * -// */ -// List dimissionSets(); -// -// /** -// * 保存离职时段设置 -// * -// * @param saveParam -// * @return -// */ -// String saveDimissionSet(SalaryArchiveDimissionSaveParam saveParam); -// -// /** -// * 根据日期范围与人员id获取薪资档案-薪资项目数据 -// * -// * @param localDateRange -// * @param employeeIds 为空则返回所有人的 -// * @return -// */ -// List getSalaryArchiveData(LocalDateRange localDateRange, Collection employeeIds); -// -// /** -// * 根据日期范围与人员id获取薪资档案-个税扣缴义务人数据 -// * -// * @param localDateRange -// * @param employeeIds 为空则返回所有人的 -// * @param tenantKey -// * @return -// */ -// List getSalaryArchiveTaxAgentData(LocalDateRange localDateRange, Collection employeeIds, String tenantKey); -//} +package com.engine.salary.service; + +import com.engine.salary.common.LocalDateRange; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveDimissionSaveParam; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveQueryParam; +import com.engine.salary.entity.salaryarchive.po.SalaryArchiveDimissionPO; +import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; +import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; +import com.engine.salary.entity.salaryarchive.po.SalaryArchiveTaxAgentPO; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.entity.taxrate.TaxAgent; +import com.engine.salary.enums.salaryarchive.SalaryArchiveImportTypeEnum; +import com.engine.salary.util.page.PageInfo; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 薪资档案 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public interface SalaryArchiveService { + + /** + * 获取薪资档案单条主记录 + * + * @param salaryArchiveId + * @return + */ + SalaryArchivePO getById(Long salaryArchiveId); + + /** + * 薪资档案列表(分页) + * + * @param queryParam + * @return + */ + PageInfo listPage(SalaryArchiveQueryParam queryParam); + + /** + * 构建薪资档案数据 + * + * @param salaryArchives + * @param taxAgentLists + * @param salaryItems + * @param isPage + * @return + */ + List> buildSalaryArchiveData(Collection salaryArchives, Collection taxAgentLists, List salaryItems, Boolean isPage); + + /** + * 获取薪资档案对应的当前生效的薪资项目 + * + * @param salaryArchivesIds + * @return + */ + List getCurrentEffectiveItemList(Collection salaryArchivesIds, Collection salaryItemIds); + + /** + * 获取薪资档案对应的当前生效的个税扣缴义务人 + * + * @param salaryArchivesIds + * @return + */ + List getCurrentEffectiveTaxAgentList(Collection salaryArchivesIds); + + /** + * 导出薪资档案列表 + * + * @param map + * @param username + * @param eteamsId + * @param queryParam + * @throws Exception + */ + void exportList(Map map, String username, String eteamsId, SalaryArchiveQueryParam queryParam); + + /** + * 下载导入模板 + * + * @param map + * @param username + * @param eteamsId + * @param salaryArchiveImportTypeEnum + * @param queryParam + * @return + */ + void downloadTemplate(Map map, String username, String eteamsId, SalaryArchiveImportTypeEnum salaryArchiveImportTypeEnum, SalaryArchiveQueryParam queryParam); + + /** + * 获取离职时段设置 + * + */ + List dimissionSets(); + + /** + * 保存离职时段设置 + * + * @param saveParam + * @return + */ + String saveDimissionSet(SalaryArchiveDimissionSaveParam saveParam); + + /** + * 根据日期范围与人员id获取薪资档案-薪资项目数据 + * + * @param localDateRange + * @param employeeIds 为空则返回所有人的 + * @return + */ + List getSalaryArchiveData(LocalDateRange localDateRange, Collection employeeIds); + + /** + * 根据日期范围与人员id获取薪资档案-个税扣缴义务人数据 + * + * @param localDateRange + * @param employeeIds 为空则返回所有人的 + * @return + */ + List getSalaryArchiveTaxAgentData(LocalDateRange localDateRange, Collection employeeIds); +} diff --git a/src/com/engine/salary/service/TaxAgentService.java b/src/com/engine/salary/service/TaxAgentService.java index 32c752d11..f32c49a52 100644 --- a/src/com/engine/salary/service/TaxAgentService.java +++ b/src/com/engine/salary/service/TaxAgentService.java @@ -1,8 +1,8 @@ package com.engine.salary.service; -import com.cloudstore.eccom.pc.table.WeaTable; -import weaver.hrm.User; +import com.engine.salary.entity.taxrate.TaxAgent; +import java.util.Collection; import java.util.Map; public interface TaxAgentService { @@ -18,4 +18,7 @@ public interface TaxAgentService { Map delete(Map params); Map selectList(Map params); + + Collection findAll(); + } diff --git a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java new file mode 100644 index 000000000..ef2662d88 --- /dev/null +++ b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java @@ -0,0 +1,390 @@ +//package com.engine.salary.service.impl; +// +//import com.alibaba.fastjson.JSONObject; +//import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +//import com.engine.core.impl.Service; +//import com.engine.salary.service.SalaryArchiveItemService; +//import com.google.common.collect.Lists; +//import com.weaver.common.base.entity.result.WeaResult; +//import com.weaver.common.base.enumeration.result.WeaResultCodeEnum; +//import com.weaver.common.batch.context.BatchExportContext; +//import com.weaver.common.batch.entity.BatchCallbackMessage; +//import com.weaver.common.batch.handler.BatchExportHandler; +//import com.weaver.common.component.table.page.Page; +//import com.weaver.common.distribution.genid.IdGenerator; +//import com.weaver.hrm.salary.common.excel.ExcelSheetData; +//import com.weaver.hrm.salary.common.excel.ExportExcelInfo; +//import com.weaver.hrm.salary.dao.SalaryArchiveItemMapper; +//import com.weaver.hrm.salary.dao.SalaryArchiveMapper; +//import com.weaver.hrm.salary.dao.SalaryItemMapper; +//import com.weaver.hrm.salary.entity.salaryarchive.dto.*; +//import com.weaver.hrm.salary.entity.salaryarchive.param.*; +//import com.weaver.hrm.salary.entity.salaryarchive.po.SalaryArchiveItemPO; +//import com.weaver.hrm.salary.entity.salaryarchive.po.SalaryArchivePO; +//import com.weaver.hrm.salary.entity.salaryitem.po.SalaryItemPO; +//import com.weaver.hrm.salary.enums.SalaryOnOffEnum; +//import com.weaver.hrm.salary.enums.SalaryUserStatusEnum; +//import com.weaver.hrm.salary.enums.salaryarchive.SalaryArchiveItemAdjustReasonEnum; +//import com.weaver.hrm.salary.exception.SalaryRunTimeException; +//import com.weaver.hrm.salary.service.SalaryBatchService; +//import com.weaver.hrm.salary.util.SalaryDateUtil; +//import com.weaver.hrm.salary.util.SalaryI18nUtil; +//import org.apache.commons.collections4.CollectionUtils; +//import org.apache.commons.lang3.StringUtils; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.transaction.annotation.Transactional; +// +//import javax.annotation.Resource; +//import java.text.SimpleDateFormat; +//import java.time.LocalDate; +//import java.time.LocalDateTime; +//import java.util.*; +//import java.util.stream.Collectors; +// +///** +// * 薪资档案薪资项目 +// *

Copyright: Copyright (c) 2022

+// *

Company: 泛微软件

+// * +// * @author qiantao +// * @version 1.0 +// **/ +//public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchiveItemService { +// private static final Logger log = LoggerFactory.getLogger(SalaryArchiveItemServiceImpl.class); +// @Resource +// private SalaryArchiveMapper salaryArchiveMapper; +// @Resource +// private SalaryItemMapper salaryItemMapper; +// @Resource +// private SalaryArchiveItemMapper salaryArchiveItemMapper; +// @Resource +// private SalaryBatchService salaryBatchService; +// +// @Override +// public SalaryArchiveItemPO getById(Long salaryArchiveItemId, String tenantKey) { +// return salaryArchiveItemMapper.getById(salaryArchiveItemId, tenantKey); +// } +// +// /** +// * 获取未生效 +// * +// * @param salaryArchiveId +// * @param salaryItemIds +// * @param tenantKey +// * @return +// */ +// private List getIneffectiveSalaryItems(Long salaryArchiveId, List salaryItemIds, String tenantKey) { +// // 没有薪资项目时,给个不存在的,否则加载所有不合理 +// salaryItemIds = CollectionUtils.isEmpty(salaryItemIds)?Collections.singletonList(0L):salaryItemIds; +// return new LambdaQueryChainWrapper<>(salaryArchiveItemMapper) +// .eq(SalaryArchiveItemPO::getDeleteType, 0) +// .eq(SalaryArchiveItemPO::getTenantKey, tenantKey) +// .eq(SalaryArchiveItemPO::getSalaryArchiveId, salaryArchiveId) +// .in(SalaryArchiveItemPO::getSalaryItemId, salaryItemIds) +// .gt(SalaryArchiveItemPO::getEffectiveTime, LocalDate.now()) +// .list(); +// } +// +// /** +// * 获取当前已生效 +// * +// * @param salaryArchiveId +// * @param salaryItemIds +// * @param tenantKey +// * @return +// */ +// @Override +// public List getEffectiveSalaryItems(Long salaryArchiveId, List salaryItemIds, String tenantKey) { +// // 没有薪资项目时,给个不存在的,否则加载所有不合理 +// salaryItemIds = CollectionUtils.isEmpty(salaryItemIds)?Collections.singletonList(0L):salaryItemIds; +// return new LambdaQueryChainWrapper<>(salaryArchiveItemMapper) +// .eq(SalaryArchiveItemPO::getDeleteType, 0) +// .eq(SalaryArchiveItemPO::getTenantKey, tenantKey) +// .eq(SalaryArchiveItemPO::getSalaryArchiveId, salaryArchiveId) +// .in(SalaryArchiveItemPO::getSalaryItemId, salaryItemIds) +// .le(SalaryArchiveItemPO::getEffectiveTime, LocalDate.now()) +// .orderByDesc(SalaryArchiveItemPO::getEffectiveTime) +// .list(); +// } +// +// @Override +// public String getSalaryItemAdjustBeforeValue(SalaryItemAdjustBeforeParam adjustBeforeParam, Long currentEmployeeId, String currentTenantKey) { +// WeaResult checkResult = SalaryItemAdjustBeforeParam.checkParam(adjustBeforeParam, currentEmployeeId, currentTenantKey); +// if (checkResult.getCode() == WeaResultCodeEnum.ERROR.getCode()) { +// return checkResult.getData(); +// } +// List archiveItemList; +// if (adjustBeforeParam.getSalaryArchiveItemId()==null) { +// archiveItemList = getEffectiveSalaryItems(adjustBeforeParam.getSalaryArchiveId(), Collections.singletonList(adjustBeforeParam.getSalaryItemId()), currentTenantKey); +// } else { +// SalaryArchiveItemPO salaryArchiveItem = salaryArchiveItemMapper.getById(adjustBeforeParam.getSalaryArchiveItemId(), currentTenantKey); +// if (salaryArchiveItem == null) { +// return ""; +// } +// // 如果不是当前记录的 +// if (!salaryArchiveItem.getSalaryItemId().equals(adjustBeforeParam.getSalaryItemId())) { +// archiveItemList = getEffectiveSalaryItems(adjustBeforeParam.getSalaryArchiveId(), Collections.singletonList(adjustBeforeParam.getSalaryItemId()), currentTenantKey); +// } else { +// archiveItemList = new LambdaQueryChainWrapper<>(salaryArchiveItemMapper) +// .eq(SalaryArchiveItemPO::getDeleteType, 0) +// .eq(SalaryArchiveItemPO::getTenantKey, currentTenantKey) +// .eq(SalaryArchiveItemPO::getSalaryArchiveId, adjustBeforeParam.getSalaryArchiveId()) +// .eq(SalaryArchiveItemPO::getSalaryItemId, salaryArchiveItem.getSalaryItemId()) +// .lt(SalaryArchiveItemPO::getEffectiveTime, salaryArchiveItem.getEffectiveTime()) +// .orderByDesc(SalaryArchiveItemPO::getEffectiveTime) +// .list(); +// } +// } +// +// return CollectionUtils.isNotEmpty(archiveItemList)?archiveItemList.get(0).getItemValue():""; +// } +// +// @Override +// @Transactional(rollbackFor = Exception.class) +// public String saveSalaryItem(SalaryArchiveItemSaveParam saveParam, Long employeeId, String tenantKey) { +// // 检查参数 +// SalaryArchiveItemSaveParam.checkParam(saveParam, employeeId, tenantKey); +// +// Long salaryArchiveId = saveParam.getSalaryArchiveId(); +// // 获取所有可被引用的薪资项目 +// List salaryItems = getCanAdjustSalaryItems(tenantKey); +// // 待处理薪资项目 +// List salaryArchiveItems = saveParam.getSalaryArchiveItems().stream().filter(e -> { +// Optional optional = salaryItems.stream().filter(i -> i.getId().equals(e.getSalaryItemId())).findFirst(); +// return optional.isPresent(); +// }).collect(Collectors.toList()); +// List salaryItemIds = salaryArchiveItems.stream().map(SalaryArchiveItemDetailSaveParam::getSalaryItemId).collect(Collectors.toList()); +// +// // 薪资档案 +// SalaryArchivePO salaryArchive = salaryArchiveMapper.getById(salaryArchiveId, tenantKey); +// // 获取当前已生效数据 +// List effectiveSalaryItems = getEffectiveSalaryItems(salaryArchiveId, salaryItemIds, tenantKey); +// +// // 获取未生效数据 +// List ineffectiveSalaryItems = getIneffectiveSalaryItems(salaryArchiveId, salaryItemIds, tenantKey); +// // 待保存生效时间 +// LocalDate saveEffectiveTime = saveParam.getEffectiveTime(); +// // 当天 +// LocalDate today = LocalDate.now(); +// // 当前时间 +// LocalDateTime nowTime = LocalDateTime.now(); +// +// List effectiveSalaryItemDels = Lists.newArrayList(); +// List salaryArchiveItemNews = Lists.newArrayList(); +// salaryArchiveItems.forEach(e -> { +// // 已生效 +// List effectiveList = effectiveSalaryItems.stream().filter(i -> i.getSalaryItemId().equals(e.getSalaryItemId())).collect(Collectors.toList()); +// // 当前已生效 +// SalaryArchiveItemPO effectiveSalaryItem = CollectionUtils.isNotEmpty(effectiveList)&&effectiveList.size()>0?effectiveList.get(0):null; +// // 当前已生效的前一次调整 +// SalaryArchiveItemPO effectiveBeforeSalaryItem = CollectionUtils.isNotEmpty(effectiveList)&&effectiveList.size()>1?effectiveList.get(1):null; +// // 未生效 +// Optional optionalIneffective = ineffectiveSalaryItems.stream().filter(i -> i.getSalaryItemId().equals(e.getSalaryItemId())).findFirst(); +// SalaryArchiveItemPO ineffectiveSalaryItem = optionalIneffective.orElse(null); +// +// // 1.检验是否可以调整 +// if (effectiveSalaryItem != null) { +// // 当前已经生效的时间 +// LocalDate effectiveTime = effectiveSalaryItem.getEffectiveTime(); +// // 1.1 如果早于<当前已生效 +// if (saveEffectiveTime.isBefore(effectiveTime)) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100429, "生效日期不可早于当前已生效的调整日期")); +// // 1.2 如果等于当前已生效 +// } else if (saveEffectiveTime.isEqual(effectiveTime)) { +// if (effectiveBeforeSalaryItem !=null && effectiveBeforeSalaryItem.getItemValue().equals(e.getAdjustValue())) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100432, "调整前后不可相同")); +// } +// if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(e.getAdjustValue())) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100434, "与未生效的调整后不可相同")); +// } +// // 1.3 如果>已经生效且<=今天 +// } else if (saveEffectiveTime.isAfter(effectiveTime) && !saveEffectiveTime.isAfter(today)) { +// if (effectiveSalaryItem.getItemValue().equals(e.getAdjustValue())) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100432, "调整前后不可相同")); +// } +// if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(e.getAdjustValue())) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100434, "与未生效的调整后不可相同")); +// } +// // 1.4 如果>今天 +// } else if (saveEffectiveTime.isAfter(today) && effectiveSalaryItem.getItemValue().equals(e.getAdjustValue())) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100432, "调整前后不可相同")); +// } +// } else if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(e.getAdjustValue())) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100434, "与未生效的调整后不可相同")); +// } +// // 2.数据处理 +// if (effectiveSalaryItem != null && saveEffectiveTime.isEqual(effectiveSalaryItem.getEffectiveTime())) { +// effectiveSalaryItemDels.add(effectiveSalaryItem.getId()); +// } +// if (ineffectiveSalaryItem != null && saveEffectiveTime.isAfter(today)) { +// effectiveSalaryItemDels.add(ineffectiveSalaryItem.getId()); +// } +// salaryArchiveItemNews.add(buildInsert(salaryArchive, e.getSalaryItemId(), e.getAdjustValue(), saveParam, nowTime, employeeId, tenantKey)); +// }); +// +// // 落库处理 +// if (CollectionUtils.isNotEmpty(effectiveSalaryItemDels)) { +// salaryArchiveItemMapper.deleteBatchIds(effectiveSalaryItemDels); +// } +// if (CollectionUtils.isNotEmpty(salaryArchiveItemNews)) { +// salaryArchiveItemMapper.batchInsert(salaryArchiveItemNews); +// } +// +// return StringUtils.EMPTY; +// } +// +// /** +// * 插入 +// * +// * @param salaryArchive +// * @param saveParam +// * @param nowTime +// * @param employeeId +// * @param tenantKey +// */ +// private SalaryArchiveItemPO buildInsert(SalaryArchivePO salaryArchive, Long salaryItemId, String adjustValue, SalaryArchiveItemSaveParam saveParam, LocalDateTime nowTime, Long employeeId, String tenantKey) { +// return SalaryArchiveItemPO.builder() +// .id(IdGenerator.generate()) +// .salaryArchiveId(saveParam.getSalaryArchiveId()) +// .employeeId(salaryArchive.getEmployeeId()) +// .effectiveTime(saveParam.getEffectiveTime()) +// .adjustReason(saveParam.getAdjustReason().getValue()) +// .description(saveParam.getDescription()) +// .salaryItemId(salaryItemId) +// // 调整后 +// .itemValue(adjustValue) +// .operator(employeeId) +// .operateTime(nowTime) +// .createTime(LocalDateTime.now()) +// .updateTime(LocalDateTime.now()) +// .creator(employeeId) +// .tenantKey(tenantKey) +// .build(); +// } +// +// @Override +// @Transactional(rollbackFor = Exception.class) +// public String deleteSalaryItem(Long salaryArchiveItemId, Long currentEmployeeId, String currentTenantKey) { +// SalaryArchiveItemPO salaryArchiveItem = salaryArchiveItemMapper.getById(salaryArchiveItemId, currentTenantKey); +// if (salaryArchiveItem == null) { +// return StringUtils.EMPTY; +// } +// if (salaryArchiveItem.getEffectiveTime().isAfter(LocalDate.now())) { +// salaryArchiveItem.setDeleteType(1); +// // 删除未生效数据 +// salaryArchiveItemMapper.updateById(salaryArchiveItem); +// } +// return StringUtils.EMPTY; +// } +// +// /** +// * 获取所有可被引用的薪资项目 +// * +// * @param tenantKey +// * @return +// */ +// @Override +// public List getCanAdjustSalaryItems(String tenantKey) { +// return new LambdaQueryChainWrapper<>(salaryItemMapper) +// .eq(SalaryItemPO::getDeleteType, 0) +// .eq(SalaryItemPO::getTenantKey, tenantKey) +// .eq(SalaryItemPO::getUseInEmployeeSalary, SalaryOnOffEnum.ON.getValue()) +// .list(); +// } +// +// +// +// @Override +// public Page salaryItemAdjustRecordListPage(Page page, SalaryItemAdjustRecordQueryParam queryParam, List salaryItemIds, String tenantKey) { +// salaryArchiveItemMapper.salaryItemAdjustRecordList(page, queryParam, salaryItemIds, tenantKey); +// return page; +// } +// +// @Override +// public List salaryItemAdjustRecordList(SalaryItemAdjustRecordQueryParam queryParam, List salaryItemIds, String tenantKey) { +// return salaryArchiveItemMapper.salaryItemAdjustRecordList(queryParam, salaryItemIds, tenantKey); +// } +// +// @Override +// public void exportAdjustRecordList(Map map, String username, String eteamsId, SalaryItemAdjustRecordQueryParam queryParam, Long currentEmployeeId, String currentTenantKey) { +// List sheetList = new ArrayList<>(); +// +// ExcelSheetData excelSheetData = new ExcelSheetData(); +// // 1.工作簿名称 +// String nameI18n = SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 100438, "薪资项目调整记录"); +// excelSheetData.setSheetName(nameI18n); +// String[] header = { +// SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 85429, "姓名"), +// SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 86187, "员工状态"), +// SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 86185, "部门"), +// SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 84960, "薪资项目"), +// SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 85433, "调整前"), +// SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 85434, "调整后"), +// SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 85431, "调整原因"), +// SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 85904, "生效日期"), +// SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 85435, "操作人"), +// SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 85436, "操作时间"), +// SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 84961, "备注") +// }; +// // 2.表头 +// excelSheetData.setHeaders(Collections.singletonList(header)); +// // 获取所有可被引用的薪资项目 +// List salaryItemList = getCanAdjustSalaryItems(currentTenantKey); +// List salaryItemIds = salaryItemList.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); +// // 获取记录 +// List list = salaryArchiveItemMapper.salaryItemAdjustRecordList(queryParam, salaryItemIds, currentTenantKey); +// List listAll = salaryArchiveItemMapper.salaryItemAdjustRecordList(SalaryItemAdjustRecordQueryParam.builder().build(), salaryItemIds, currentTenantKey); +// // 人员信息赋值 +// list.forEach(m->{ +// if (!org.springframework.util.CollectionUtils.isEmpty(listAll)) { +// listAll.removeIf(a-> a.getId().equals(m.getId())); +// } +// Optional optional = listAll.stream().filter(f->f.getSalaryArchiveId().equals(m.getSalaryArchiveId()) && f.getSalaryItemId().equals(m.getSalaryItemId())).findFirst(); +// m.setAdjustBefore(optional.isPresent()?optional.get().getAdjustAfter():""); +// +// m.setEmployeeStatus(SalaryUserStatusEnum.getDefaultLabelByValue(m.getEmployeeStatus(), currentEmployeeId, currentTenantKey)); +// m.setAdjustReason(SalaryArchiveItemAdjustReasonEnum.getDefaultLabelByValue(m.getAdjustReason(), currentEmployeeId, currentTenantKey)); +// }); +// SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); +// List> rows = new ArrayList<>(); +// for (SalaryItemAdjustRecordListDTO dto : list) { +// List row = new ArrayList<>(); +// row.add(dto.getUsername()); +// row.add(dto.getEmployeeStatus()); +// row.add(dto.getDepartmentName()); +// row.add(dto.getAdjustItem()); +// row.add(dto.getAdjustBefore()); +// row.add(dto.getAdjustAfter()); +// row.add(dto.getAdjustReason()); +// row.add(dto.getEffectiveTime()+""); +// row.add(dto.getOperator()); +// row.add(format.format(dto.getOperateTime())); +// row.add(dto.getDescription()); +// rows.add(row); +// } +// // 3.表数据 +// excelSheetData.setRows(rows); +// +// sheetList.add(excelSheetData); +// +// salaryBatchService.simpleExportExcel(ExportExcelInfo.builder() +// .bizId(map.get("biz").toString()) +// .flag(true) +// .userId(currentEmployeeId) +// .eteamsId(eteamsId) +// .tenantKey(currentTenantKey) +// .operator(username) +// .module(map.get("module").toString()) +// .fileName(nameI18n + SalaryDateUtil.getFormatLocalDateTime(LocalDateTime.now())) +// .handlerName(map.get("function").toString()) +// .dataType(nameI18n) +// .function(map.get("function").toString()).build(), sheetList); +// } +// +// @BatchExportHandler("exportSalaryArchiveItemAdjustRecord") +// public void exportSalaryArchiveItemAdjustRecordHandler() { +// BatchCallbackMessage message = BatchExportContext.getBatchCallbackMessage(); +// log.info("接受到薪资项目操作记录导出的结果:{}", JSONObject.toJSONString(message)); +// } +//} diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index d45d29b90..7766cfa69 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -1,195 +1,171 @@ -//package com.engine.salary.service.impl; -// -//import com.alibaba.fastjson.JSONObject; -//import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; -//import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; -//import com.engine.salary.biz.SalaryArchiveBiz; -//import com.engine.salary.biz.SalaryArchiveItemBiz; -//import com.engine.salary.biz.SalaryArchiveTaxAgentBiz; -//import com.engine.salary.entity.salaryarchive.param.SalaryArchiveItemQueryParam; -//import com.engine.salary.entity.salaryarchive.param.SalaryArchiveTaxAgentQueryParam; -//import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; -//import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; -//import com.engine.salary.entity.salaryarchive.po.SalaryArchiveTaxAgentPO; -//import com.engine.salary.service.SalaryArchiveService; -//import com.google.common.base.Joiner; -//import com.google.common.collect.Lists; -//import com.google.common.collect.Maps; -//import com.weaver.common.batch.context.BatchExportContext; -//import com.weaver.common.batch.context.BatchImportContext; -//import com.weaver.common.batch.entity.BatchCallbackMessage; -//import com.weaver.common.batch.entity.BatchDocumentMessage; -//import com.weaver.common.batch.entity.ExcelComment; -//import com.weaver.common.batch.entity.ExcelSheet; -//import com.weaver.common.batch.handler.BatchExportHandler; -//import com.weaver.common.batch.handler.BatchImportHandler; -//import com.weaver.common.distribution.genid.IdGenerator; -//import com.weaver.datasecurity.interceptor.DSTenantKeyThreadVar; -//import com.weaver.hrm.salary.common.LocalDateRange; -//import com.weaver.hrm.salary.common.excel.ExcelSheetData; -//import com.weaver.hrm.salary.common.excel.ExportExcelInfo; -//import com.weaver.hrm.salary.constant.SalaryItemConstant; -//import com.weaver.hrm.salary.dao.*; -//import com.weaver.hrm.salary.entity.salaryarchive.bo.SalaryArchiveBO; -//import com.weaver.hrm.salary.entity.salaryarchive.dto.*; -//import com.weaver.hrm.salary.entity.salaryarchive.param.SalaryArchiveDimissionSaveParam; -//import com.weaver.hrm.salary.entity.salaryarchive.param.SalaryArchiveImportHandleParam; -//import com.weaver.hrm.salary.entity.salaryarchive.param.SalaryArchiveQueryParam; -//import com.weaver.hrm.salary.entity.salaryarchive.po.*; -//import com.weaver.hrm.salary.entity.salaryitem.po.SalaryItemPO; -//import com.weaver.hrm.salary.enums.SalaryUserStatusEnum; -//import com.weaver.hrm.salary.enums.salaryarchive.SalaryArchiveImportTypeEnum; -//import com.weaver.hrm.salary.enums.salaryarchive.SalaryArchiveItemAdjustReasonEnum; -//import com.weaver.hrm.salary.enums.salaryarchive.SalaryArchiveTaxAgentAdjustReasonEnum; -//import com.weaver.hrm.salary.service.SalaryArchiveItemService; -//import com.weaver.hrm.salary.service.SalaryBatchService; -//import com.weaver.hrm.salary.service.TaxAgentService; -//import com.weaver.hrm.salary.util.SalaryDateUtil; -//import com.weaver.hrm.salary.util.SalaryI18nUtil; -//import com.weaver.teams.util.StringUtils; -//import org.apache.commons.collections4.CollectionUtils; -//import org.springframework.transaction.annotation.Transactional; -// -//import java.time.LocalDate; -//import java.time.LocalDateTime; -//import java.util.*; -//import java.util.concurrent.ExecutorService; -//import java.util.concurrent.atomic.AtomicInteger; -//import java.util.stream.Collectors; -// -///** -// * 薪资档案 -// *

Copyright: Copyright (c) 2022

-// *

Company: 泛微软件

-// * -// * @author qiantao -// * @version 1.0 -// **/ -//public class SalaryArchiveServiceImpl implements SalaryArchiveService { -// -// private SalaryArchiveBiz mapper = new SalaryArchiveBiz(); -// private SalaryArchiveItemBiz salaryArchiveItemMapper; -// private SalaryArchiveTaxAgentBiz salaryArchiveTaxAgentMapper; -// private SalaryArchiveDimissionMapper salaryArchiveDimissionMapper; -// private SalaryArchiveItemService salaryArchiveItemService; +package com.engine.salary.service.impl; + +import com.engine.core.impl.Service; +import com.engine.salary.biz.SalaryArchiveBiz; +import com.engine.salary.biz.SalaryArchiveDimissionBiz; +import com.engine.salary.biz.SalaryArchiveItemBiz; +import com.engine.salary.biz.SalaryArchiveTaxAgentBiz; +import com.engine.salary.common.LocalDateRange; +import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.constant.SalaryItemConstant; +import com.engine.salary.entity.salaryarchive.bo.SalaryArchiveBO; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveDimissionSaveParam; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveItemQueryParam; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveQueryParam; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveTaxAgentQueryParam; +import com.engine.salary.entity.salaryarchive.po.SalaryArchiveDimissionPO; +import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; +import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; +import com.engine.salary.entity.salaryarchive.po.SalaryArchiveTaxAgentPO; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.entity.taxrate.TaxAgent; +import com.engine.salary.enums.SalaryUserStatusEnum; +import com.engine.salary.enums.salaryarchive.SalaryArchiveImportTypeEnum; +import com.engine.salary.service.SalaryArchiveItemService; +import com.engine.salary.service.SalaryArchiveService; +import com.engine.salary.util.page.PageInfo; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; + +import java.time.LocalDateTime; +import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.stream.Collectors; + +/** + * 薪资档案 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveService { + + private SalaryArchiveBiz mapper = new SalaryArchiveBiz(); + private SalaryArchiveItemBiz salaryArchiveItemMapper = new SalaryArchiveItemBiz(); + private SalaryArchiveTaxAgentBiz salaryArchiveTaxAgentMapper = new SalaryArchiveTaxAgentBiz(); + private SalaryArchiveDimissionBiz salaryArchiveDimissionMapper = new SalaryArchiveDimissionBiz(); + private SalaryArchiveItemService salaryArchiveItemService; // private SalaryBatchService salaryBatchService; // private TaxAgentService taxAgentService; -// private ExecutorService taskExecutor; -// -// @Override -// public SalaryArchivePO getById(Long salaryArchiveId) { -// return mapper.getById(salaryArchiveId); -// } -// -//// @Override -//// public Page listPage(Page page, SalaryArchiveQueryParam queryParam, String tenantKey) { -//// mapper.list(page, queryParam, tenantKey); -//// return page; -//// } -// -// /** -// * 获取薪资档案对应的当前生效的薪资项目 -// * -// * @param salaryArchivesIds -// * @return -// */ -// @Override -// public List getCurrentEffectiveItemList(Collection salaryArchivesIds, Collection salaryItemIds) { -// // 没有薪资项目时,给个不存在的,否则加载所有不合理 fixme -// salaryItemIds = CollectionUtils.isEmpty(salaryItemIds)?Collections.singletonList(0L):salaryItemIds; -// List salaryArchiveItems = salaryArchiveItemMapper.getCurrentEffectiveItemList(SalaryArchiveItemQueryParam.builder().salaryArchivesIds(salaryArchivesIds).salaryItemIds(salaryItemIds).effectiveTime(new Date()).build()); -// return salaryArchiveItems.stream() -// .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getSalaryArchiveId()+"-"+f.getSalaryItemId()))), ArrayList::new)); -// } -// -// /** -// * 获取薪资档案对应的当前生效的个税扣缴义务人 -// * -// * @param salaryArchivesIds -// * @return -// */ -// @Override -// public List getCurrentEffectiveTaxAgentList(Collection salaryArchivesIds) { -// -// List salaryArchiveTaxAgents = salaryArchiveTaxAgentMapper.listByParam(SalaryArchiveTaxAgentQueryParam.builder().salaryArchivesIds(salaryArchivesIds).effectiveTime(new Date()).build()); -// -// return salaryArchiveTaxAgents.stream() -// .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SalaryArchiveTaxAgentPO::getSalaryArchiveId))), ArrayList::new)); -// } -// -// /** -// * 构建薪资档案数据 -// * @param salaryArchives -// * @param taxAgentLists -// * @param salaryItems -// * @param tenantKey -// * @param isPage -// * @return -// */ -// @Override -// public List> buildSalaryArchiveData(Collection salaryArchives, -// Collection taxAgentLists, -// List salaryItems, -// Long currentEmployeeId, -// String tenantKey, -// Boolean isPage) { -// // 分页用于表格展示,否则用于导出 -// Collection ids = isPage?salaryArchives.stream().map(SalaryArchiveListDTO::getId).collect(Collectors.toList()):CollectionUtils.emptyCollection(); -// -// List salaryItemIds = salaryItems.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); -// // 1.获取薪资档案所对应的当前生效的薪资项目数据 -// List salaryArchiveItemList = getCurrentEffectiveItemList(ids, salaryItemIds, tenantKey); -// List> salaryArchiveItemData = salaryArchives.stream().map(m->{ -// Map map = Maps.newHashMap(); -// map.put("salaryArchiveId", m.getId()); -// List salaryArchiveItemValuelList = salaryArchiveItemList.stream().filter(i->i.getSalaryArchiveId().equals(m.getId())).collect(Collectors.toList()); -// salaryArchiveItemValuelList.forEach(i->{ -// map.put(i.getSalaryItemId() + SalaryItemConstant.DYNAMIC_SUFFIX, i.getItemValue()); -// }); -// return map; -// }).collect(Collectors.toList()); -// //2.获取薪资档案所对应的当前生效的个税扣缴义务人列表 -// List taxAgentList = getCurrentEffectiveTaxAgentList(ids, tenantKey); -// List> taxAgentData = taxAgentList.stream().map(m->{ -// Map map = Maps.newHashMap(); -// map.put("salaryArchiveId", m.getSalaryArchiveId()); -// map.put("taxAgentId", m.getTaxAgentId()); -// Optional optional = taxAgentLists.stream().filter(f->f.getId().equals(m.getTaxAgentId())).findFirst(); -// map.put("taxAgentName", optional.isPresent()?optional.get().getName():""); -// map.put("taxAgentEffectiveTime", m.getEffectiveTime() + ""); -// return map; -// }).collect(Collectors.toList()); -// // 3.组装数据 -// List> listMaps = new ArrayList<>(); -// salaryArchives.forEach(e->{ -// e.setEmployeeStatus(SalaryUserStatusEnum.getDefaultLabelByValue(e.getEmployeeStatus(), currentEmployeeId, tenantKey)); -// -// Map map = new LinkedHashMap<>(); -// map.put("id", e.getId()); -// map.put("username", e.getUsername()); -// map.put("employeeId", e.getEmployeeId()); -// -// Optional> optionalTaxAgent = taxAgentData.stream().filter(f->f.get("salaryArchiveId").toString().equals(e.getId().toString())).findFirst(); -// map.put("taxAgentName", optionalTaxAgent.isPresent()?optionalTaxAgent.get().get("taxAgentName").toString():""); -// map.put("taxAgentId", optionalTaxAgent.isPresent()?optionalTaxAgent.get().get("taxAgentId").toString():""); -// map.put("taxAgentEffectiveTime", optionalTaxAgent.isPresent()?optionalTaxAgent.get().get("taxAgentEffectiveTime").toString():""); -// -// map.put("departmentName", e.getDepartmentName()); -// map.put("mobile", e.getMobile()); -// map.put("employeeStatus", e.getEmployeeStatus()); -// -// // 薪资项目动态 -// Optional> optionalItem = salaryArchiveItemData.stream().filter(f->f.get("salaryArchiveId").toString().equals(e.getId().toString())).findFirst(); -// optionalItem.ifPresent(map::putAll); -// -// listMaps.add(map); -// }); -// return listMaps; -// } -// -// @Override -// public void exportList(Map map, String username, String eteamsId, SalaryArchiveQueryParam queryParam, Long employeeId, String tenantKey) { -// String nameI18n = SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 85368, "薪资档案"); + private ExecutorService taskExecutor; + + @Override + public SalaryArchivePO getById(Long salaryArchiveId) { + return mapper.getById(salaryArchiveId); + } + + @Override + public PageInfo listPage(SalaryArchiveQueryParam queryParam) { + return mapper.listPage(queryParam); + } + + /** + * 获取薪资档案对应的当前生效的薪资项目 + * + * @param salaryArchivesIds + * @return + */ + @Override + public List getCurrentEffectiveItemList(Collection salaryArchivesIds, Collection salaryItemIds) { + // 没有薪资项目时,给个不存在的,否则加载所有不合理 fixme + salaryItemIds = CollectionUtils.isEmpty(salaryItemIds) ? Collections.singletonList(0L) : salaryItemIds; + List salaryArchiveItems = salaryArchiveItemMapper.getCurrentEffectiveItemList(SalaryArchiveItemQueryParam.builder().salaryArchivesIds(salaryArchivesIds).salaryItemIds(salaryItemIds).effectiveTime(new Date()).build()); + return salaryArchiveItems.stream() + .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getSalaryArchiveId() + "-" + f.getSalaryItemId()))), ArrayList::new)); + } + + /** + * 获取薪资档案对应的当前生效的个税扣缴义务人 + * + * @param salaryArchivesIds + * @return + */ + @Override + public List getCurrentEffectiveTaxAgentList(Collection salaryArchivesIds) { + + List salaryArchiveTaxAgents = salaryArchiveTaxAgentMapper.listByParam(SalaryArchiveTaxAgentQueryParam.builder().salaryArchivesIds(salaryArchivesIds).effectiveTime(new Date()).build()); + + return salaryArchiveTaxAgents.stream() + .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SalaryArchiveTaxAgentPO::getSalaryArchiveId))), ArrayList::new)); + } + + /** + * 构建薪资档案数据 + * + * @param salaryArchives + * @param taxAgentLists + * @param salaryItems + * @param isPage + * @return + */ + @Override + public List> buildSalaryArchiveData(Collection salaryArchives, + Collection taxAgentLists, + List salaryItems, + Boolean isPage) { + // 分页用于表格展示,否则用于导出 + Collection ids = isPage ? salaryArchives.stream().map(SalaryArchiveListDTO::getId).collect(Collectors.toList()) : CollectionUtils.emptyCollection(); + + List salaryItemIds = salaryItems.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); + // 1.获取薪资档案所对应的当前生效的薪资项目数据 + List salaryArchiveItemList = getCurrentEffectiveItemList(ids, salaryItemIds); + List> salaryArchiveItemData = salaryArchives.stream().map(m -> { + Map map = Maps.newHashMap(); + map.put("salaryArchiveId", m.getId()); + List salaryArchiveItemValuelList = salaryArchiveItemList.stream().filter(i -> i.getSalaryArchiveId().equals(m.getId())).collect(Collectors.toList()); + salaryArchiveItemValuelList.forEach(i -> { + map.put(i.getSalaryItemId() + SalaryItemConstant.DYNAMIC_SUFFIX, i.getItemValue()); + }); + return map; + }).collect(Collectors.toList()); + //2.获取薪资档案所对应的当前生效的个税扣缴义务人列表 + List taxAgentList = getCurrentEffectiveTaxAgentList(ids); + List> taxAgentData = taxAgentList.stream().map(m -> { + Map map = Maps.newHashMap(); + map.put("salaryArchiveId", m.getSalaryArchiveId()); + map.put("taxAgentId", m.getTaxAgentId()); + Optional optional = taxAgentLists.stream().filter(f -> f.getId().equals(m.getTaxAgentId())).findFirst(); + map.put("taxAgentName", optional.isPresent() ? optional.get().getName() : ""); + map.put("taxAgentEffectiveTime", m.getEffectiveTime() + ""); + return map; + }).collect(Collectors.toList()); + // 3.组装数据 + List> listMaps = new ArrayList<>(); + salaryArchives.forEach(e -> { + e.setEmployeeStatus(SalaryUserStatusEnum.getDefaultLabelByValue(e.getEmployeeStatus())); + + Map map = new LinkedHashMap<>(); + map.put("id", e.getId()); + map.put("username", e.getUsername()); + map.put("employeeId", e.getEmployeeId()); + + Optional> optionalTaxAgent = taxAgentData.stream().filter(f -> f.get("salaryArchiveId").toString().equals(e.getId().toString())).findFirst(); + map.put("taxAgentName", optionalTaxAgent.isPresent() ? optionalTaxAgent.get().get("taxAgentName").toString() : ""); + map.put("taxAgentId", optionalTaxAgent.isPresent() ? optionalTaxAgent.get().get("taxAgentId").toString() : ""); + map.put("taxAgentEffectiveTime", optionalTaxAgent.isPresent() ? optionalTaxAgent.get().get("taxAgentEffectiveTime").toString() : ""); + + map.put("departmentName", e.getDepartmentName()); + map.put("mobile", e.getMobile()); + map.put("employeeStatus", e.getEmployeeStatus()); + + // 薪资项目动态 + Optional> optionalItem = salaryArchiveItemData.stream().filter(f -> f.get("salaryArchiveId").toString().equals(e.getId().toString())).findFirst(); + optionalItem.ifPresent(map::putAll); + + listMaps.add(map); + }); + return listMaps; + } + + @Override + public void exportList(Map map, String username, String eteamsId, SalaryArchiveQueryParam queryParam) { +// String nameI18n = SalaryI18nUtil.getI18nLabel(85368, "薪资档案"); // List sheetList = new ArrayList<>(); // // ExcelSheetData excelSheetData = new ExcelSheetData(); @@ -216,16 +192,16 @@ // List> listMaps = buildSalaryArchiveData(salaryArchives, taxAgentList, salaryItems, employeeId, tenantKey, Boolean.FALSE); // // 组装数据 // List> rows = new ArrayList<>(); -// listMaps.forEach(e->{ +// listMaps.forEach(e -> { // List row = new ArrayList<>(); // row.add(e.get("username").toString()); // row.add(e.get("taxAgentName").toString()); // row.add(e.get("departmentName").toString()); -// row.add(e.get("mobile")==null?"":e.get("mobile").toString()); +// row.add(e.get("mobile") == null ? "" : e.get("mobile").toString()); // row.add(e.get("employeeStatus").toString()); // // 薪资项目数据 // for (SalaryItemPO salaryItem : salaryItems) { -// row.add(e.containsKey(salaryItem.getId()+SalaryItemConstant.DYNAMIC_SUFFIX)?(e.get(salaryItem.getId()+SalaryItemConstant.DYNAMIC_SUFFIX)==null?"":e.get(salaryItem.getId()+SalaryItemConstant.DYNAMIC_SUFFIX).toString()):""); +// row.add(e.containsKey(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX) ? (e.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX) == null ? "" : e.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX).toString()) : ""); // } // rows.add(row); // }); @@ -246,10 +222,10 @@ // .handlerName("exportSalaryArchive") // .dataType(nameI18n) // .function("exportSalaryArchive").build(), sheetList); -// } -// -// @Override -// public void downloadTemplate(Map map, String username, String eteamsId, SalaryArchiveImportTypeEnum salaryArchiveImportTypeEnum, SalaryArchiveQueryParam queryParam, Long employeeId, String tenantKey) { + } + + @Override + public void downloadTemplate(Map map, String username, String eteamsId, SalaryArchiveImportTypeEnum salaryArchiveImportTypeEnum, SalaryArchiveQueryParam queryParam) { // boolean isInit = salaryArchiveImportTypeEnum.getValue().equals(SalaryArchiveImportTypeEnum.INIT.getValue()); // boolean isTaxAgentAdjust = salaryArchiveImportTypeEnum.getValue().equals(SalaryArchiveImportTypeEnum.TAXAGENTADJUST.getValue()); // boolean isSalaryItemAdjust = salaryArchiveImportTypeEnum.getValue().equals(SalaryArchiveImportTypeEnum.SALARYITEMADJUST.getValue()); @@ -257,13 +233,13 @@ // String nameI18n = SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 101601, "薪资档案导入模板"); // // 初始化 // if (isInit) { -// nameI18n+="-"+SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, SalaryArchiveImportTypeEnum.INIT.getLabelId(), SalaryArchiveImportTypeEnum.INIT.getDefaultLabel()); +// nameI18n += "-" + SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, SalaryArchiveImportTypeEnum.INIT.getLabelId(), SalaryArchiveImportTypeEnum.INIT.getDefaultLabel()); // // 调整个税扣缴义务人 // } else if (isTaxAgentAdjust) { -// nameI18n+="-"+SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, SalaryArchiveImportTypeEnum.TAXAGENTADJUST.getLabelId(), SalaryArchiveImportTypeEnum.TAXAGENTADJUST.getDefaultLabel()); +// nameI18n += "-" + SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, SalaryArchiveImportTypeEnum.TAXAGENTADJUST.getLabelId(), SalaryArchiveImportTypeEnum.TAXAGENTADJUST.getDefaultLabel()); // // 调薪 // } else if (isSalaryItemAdjust) { -// nameI18n+="-"+SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, SalaryArchiveImportTypeEnum.SALARYITEMADJUST.getLabelId(), SalaryArchiveImportTypeEnum.SALARYITEMADJUST.getDefaultLabel()); +// nameI18n += "-" + SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, SalaryArchiveImportTypeEnum.SALARYITEMADJUST.getLabelId(), SalaryArchiveImportTypeEnum.SALARYITEMADJUST.getDefaultLabel()); // } // String finalNameI18n = nameI18n; // @@ -297,22 +273,22 @@ // List> listMaps = buildSalaryArchiveData(salaryArchives, taxAgentList, salaryItems, employeeId, tenantKey, Boolean.FALSE); // // 组装数据 // List> rows = new ArrayList<>(); -// listMaps.forEach(e->{ +// listMaps.forEach(e -> { // List row = new ArrayList<>(); // row.add(e.get("username").toString()); // row.add(e.get("taxAgentName").toString()); // if (isTaxAgentAdjust || isSalaryItemAdjust) { -// row.add(isTaxAgentAdjust?e.get("taxAgentEffectiveTime").toString():""); +// row.add(isTaxAgentAdjust ? e.get("taxAgentEffectiveTime").toString() : ""); // } // row.add(""); // row.add(e.get("departmentName").toString()); -// row.add(e.get("mobile")==null?"":e.get("mobile").toString()); +// row.add(e.get("mobile") == null ? "" : e.get("mobile").toString()); // row.add(e.get("employeeStatus").toString()); // // 调薪 // if (isInit || isSalaryItemAdjust) { // // 薪资项目数据 // for (SalaryItemPO salaryItem : salaryItems) { -// row.add(e.containsKey(salaryItem.getId()+SalaryItemConstant.DYNAMIC_SUFFIX)?(e.get(salaryItem.getId()+SalaryItemConstant.DYNAMIC_SUFFIX)==null?"":e.get(salaryItem.getId()+SalaryItemConstant.DYNAMIC_SUFFIX).toString()):""); +// row.add(e.containsKey(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX) ? (e.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX) == null ? "" : e.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX).toString()) : ""); // } // } // rows.add(row); @@ -326,12 +302,12 @@ // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100344, "必填"), 0, 0, 1, 1); // } // -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100458,"必填,格式样例为'2022-01-01'、'2022/1/1'"), 0, 0, 2, 2); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100458, "必填,格式样例为'2022-01-01'、'2022/1/1'"), 0, 0, 2, 2); // // // 调整个税扣缴义务人 // if (isTaxAgentAdjust) { // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100952, "必填,可填写如:调动,变更,入职,离职,其他,初始化"), 0, 0, 3, 3); -// // 调薪 +// // 调薪 // } else if (isSalaryItemAdjust) { // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100953, "必填,可填写如:入职,转正,调薪,调岗调薪,离职,其他,初始化"), 0, 0, 3, 3); // } @@ -352,96 +328,84 @@ // .handlerName("exportSalaryArchive") // .dataType(finalNameI18n + "-") // .function("exportSalaryArchive").build(), sheetList); -// } -// + } + // @BatchExportHandler("exportSalaryArchive") // public void exportSalaryArchiveHandler() { // BatchCallbackMessage message = BatchExportContext.getBatchCallbackMessage(); // log.info("接受到薪资档案导出的结果:{}", JSONObject.toJSONString(message)); // } -// -// @Override -// public List dimissionSets(String tenantKey) { -// return new LambdaQueryChainWrapper<>(salaryArchiveDimissionMapper) -// .eq(SalaryArchiveDimissionPO::getDeleteType, 0) -// .eq(SalaryArchiveDimissionPO::getTenantKey, tenantKey).list(); -// } -// -// @Override -// public String saveDimissionSet(SalaryArchiveDimissionSaveParam saveParam, Long employeeId, String tenantKey) { -// List dimissionSets = new LambdaQueryChainWrapper<>(salaryArchiveDimissionMapper) -// .eq(SalaryArchiveDimissionPO::getDeleteType, 0) -// .eq(SalaryArchiveDimissionPO::getTenantKey, tenantKey).list(); -// if (CollectionUtils.isNotEmpty(dimissionSets)) { -// SalaryArchiveDimissionPO po = dimissionSets.get(0); -// po.setDimissionTimeInterval(saveParam.getDimissionTimeInterval().getValue()); -// po.setUpdateTime(LocalDateTime.now()); -// salaryArchiveDimissionMapper.updateById(po); -// } else { -// salaryArchiveDimissionMapper.insert(SalaryArchiveDimissionPO -// .builder() + + @Override + public List dimissionSets() { + return salaryArchiveDimissionMapper.dimissionSets(); + } + + @Override + public String saveDimissionSet(SalaryArchiveDimissionSaveParam saveParam) { + List dimissionSets = dimissionSets(); + if (CollectionUtils.isNotEmpty(dimissionSets)) { + SalaryArchiveDimissionPO po = dimissionSets.get(0); + po.setDimissionTimeInterval(saveParam.getDimissionTimeInterval().getValue()); + po.setUpdateTime(LocalDateTime.now()); + salaryArchiveDimissionMapper.updateById(po); + } else { + salaryArchiveDimissionMapper.insert(SalaryArchiveDimissionPO + .builder() // .id(IdGenerator.generate()) -// .dimissionTimeInterval(saveParam.getDimissionTimeInterval().getValue()) -// .createTime(LocalDateTime.now()) -// .updateTime(LocalDateTime.now()) -// .creator(employeeId) -// .tenantKey(tenantKey) -// .build() -// ); -// } -// return StringUtils.EMPTY; -// } -// -// @Override -// public List getSalaryArchiveData(LocalDateRange localDateRange, Collection employeeIds, String tenantKey) { -// return getSalaryArchiveData(localDateRange, employeeIds, Boolean.FALSE, tenantKey); -// } -// -// @Override -// public List getSalaryArchiveTaxAgentData(LocalDateRange localDateRange, Collection employeeIds, String tenantKey) { -// return getSalaryArchiveData(localDateRange, employeeIds, Boolean.TRUE, tenantKey); -// } -// -// /** -// * 根据日期范围和人员获取薪资档案数据 -// * @param localDateRange -// * @param employeeIds -// * @param isOnlyTaxAgent -// * @param tenantKey -// * @return -// */ -// private List getSalaryArchiveData(LocalDateRange localDateRange, Collection employeeIds, boolean isOnlyTaxAgent, String tenantKey) { -// // 获取个税扣缴义务人调整数据 -// List salaryArchiveTaxAgentList = new LambdaQueryChainWrapper<>(salaryArchiveTaxAgentMapper) -// .eq(SalaryArchiveTaxAgentPO::getDeleteType, 0) -// .eq(SalaryArchiveTaxAgentPO::getTenantKey, tenantKey) -// .in(CollectionUtils.isNotEmpty(employeeIds), SalaryArchiveTaxAgentPO::getEmployeeId, employeeIds) -// .le(SalaryArchiveTaxAgentPO::getEffectiveTime, localDateRange.getEndDate()) -// .orderByDesc(SalaryArchiveTaxAgentPO::getEffectiveTime) -// .list(); -// List allEmployeeIds = salaryArchiveTaxAgentList.stream().map(SalaryArchiveTaxAgentPO::getEmployeeId).distinct().collect(Collectors.toList()); -// // 获取所有可被引用的薪资项目 -// List salaryItems = salaryArchiveItemService.getCanAdjustSalaryItems(tenantKey); -// Collection salaryItemIds = salaryItems.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); -// // 获取薪资项目调整数据,isOnlyTaxAgent为true时不需要薪资项目数据 -// List salaryArchiveItemDataList = isOnlyTaxAgent || CollectionUtils.isEmpty(salaryItemIds)?Lists.newArrayList():new LambdaQueryChainWrapper<>(salaryArchiveItemMapper) -// .eq(SalaryArchiveItemPO::getDeleteType, 0) -// .eq(SalaryArchiveItemPO::getTenantKey, tenantKey) -// .in(CollectionUtils.isNotEmpty(employeeIds), SalaryArchiveItemPO::getEmployeeId, employeeIds) -// .in(SalaryArchiveItemPO::getSalaryItemId, salaryItemIds) -// .le(SalaryArchiveItemPO::getEffectiveTime, localDateRange.getEndDate()) -// .orderByDesc(SalaryArchiveItemPO::getEffectiveTime) -// .list(); -// return SalaryArchiveBO.buildSalaryArchiveData(salaryArchiveTaxAgentList, -// salaryArchiveItemDataList, -// localDateRange, -// allEmployeeIds, -// isOnlyTaxAgent); -// } -// -// /** -// * 导入薪资档案 -// */ + .dimissionTimeInterval(saveParam.getDimissionTimeInterval().getValue()) + .createTime(LocalDateTime.now()) + .updateTime(LocalDateTime.now()) + .creator((long)user.getUID()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build() + ); + } + return StringUtils.EMPTY; + } + + @Override + public List getSalaryArchiveData(LocalDateRange localDateRange, Collection employeeIds) { + return getSalaryArchiveData(localDateRange, employeeIds, Boolean.FALSE); + } + + @Override + public List getSalaryArchiveTaxAgentData(LocalDateRange localDateRange, Collection employeeIds) { + return getSalaryArchiveData(localDateRange, employeeIds, Boolean.TRUE); + } + + /** + * 根据日期范围和人员获取薪资档案数据 + * + * @param localDateRange + * @param employeeIds + * @param isOnlyTaxAgent + * @return + */ + private List getSalaryArchiveData(LocalDateRange localDateRange, Collection employeeIds, boolean isOnlyTaxAgent) { + // 获取个税扣缴义务人调整数据 + List salaryArchiveTaxAgentList = salaryArchiveTaxAgentMapper.listByParam(SalaryArchiveTaxAgentQueryParam.builder().employeeIds(employeeIds).effectiveTime(localDateRange.getEndDate()).build()); + List allEmployeeIds = salaryArchiveTaxAgentList.stream().map(SalaryArchiveTaxAgentPO::getEmployeeId).distinct().collect(Collectors.toList()); + // 获取所有可被引用的薪资项目 + List salaryItems = salaryArchiveItemService.getCanAdjustSalaryItems(); + Collection salaryItemIds = salaryItems.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); + // 获取薪资项目调整数据,isOnlyTaxAgent为true时不需要薪资项目数据 + List salaryArchiveItemDataList; + if(isOnlyTaxAgent || CollectionUtils.isEmpty(salaryItemIds)){ + salaryArchiveItemDataList = Lists.newArrayList(); + }else{ + salaryArchiveItemDataList = salaryArchiveItemMapper.listByParam(SalaryArchiveItemQueryParam.builder().salaryItemIds(salaryItemIds).employeeIds(employeeIds).effectiveTime(new Date()).build()); + } + return SalaryArchiveBO.buildSalaryArchiveData(salaryArchiveTaxAgentList, + salaryArchiveItemDataList, + localDateRange, + allEmployeeIds, + isOnlyTaxAgent); + } + + /** + * 导入薪资档案 + */ // @BatchImportHandler("importSalaryArchive") // public void importSalaryArchive() { // BatchDocumentMessage message = BatchImportContext.getBatchDocumentMessage(); @@ -461,11 +425,12 @@ // DSTenantKeyThreadVar.tenantKey.remove(); // } // } -// -// /** -// * 导入的数据插入到数据库中 -// * @param message -// */ + + /** + * 导入的数据插入到数据库中 + * + * @param message + */ // @Transactional(rollbackFor = Exception.class) // public void batchImportEbatch(BatchDocumentMessage message) { // List excelSheets = message.getBatchFile().getExcelSheets(); @@ -522,7 +487,7 @@ // } // } // // 错误sheet数据 -// List> errorData = new ArrayList<>(); +// List> errorData = new ArrayList<>(); // // 错误提示 // List excelComments = new ArrayList<>(); // @@ -566,12 +531,13 @@ // // 发送导入回调信息 // salaryBatchService.sendImportCallBackInfo(message, successCount, errorCount, errorExcelSheets); // } -// -// /** -// * 构建导入处理参数 -// * @param tenantKey -// * @return -// */ + + /** + * 构建导入处理参数 + * + * @param tenantKey + * @return + */ // private SalaryArchiveImportHandleParam buildImportHandleParam(String tenantKey) { // // 获取所有可被引用的薪资项目 // List salaryItems = salaryArchiveItemService.getCanAdjustSalaryItems(tenantKey); @@ -611,10 +577,11 @@ // .salaryArchiveItemDelSalaryItemIds(Lists.newArrayList()) // .build(); // } -// + // /** // * 初始化导入数据校验 // * 说明:如果一个人的多条记录中有一个错那么就全部弄到错误文档中 +// * // * @param isError // * @param rowNo // * @param map @@ -627,7 +594,7 @@ // * @param tenantKey // * @param importHandleParam // */ -// private Map validInitImportData(boolean isError, int rowNo, Map map, List excelComments, int errorCount, int successCount, List> errorData, List initImportData, Long currentEmployeeId, String tenantKey, SalaryArchiveImportHandleParam importHandleParam) { +// private Map validInitImportData(boolean isError, int rowNo, Map map, List excelComments, int errorCount, int successCount, List> errorData, List initImportData, Long currentEmployeeId, String tenantKey, SalaryArchiveImportHandleParam importHandleParam) { // Long employeeId = Long.valueOf(Optional.ofNullable(map.get("employeeId")).orElse("0").toString()); // Optional optionalInitImport = initImportData.stream().filter(f -> f.getEmployeeId().equals(employeeId)).findFirst(); // @@ -651,32 +618,32 @@ // Optional optionalSame = sames.stream().filter(SalaryArchiveInitImportSameDTO::isError).findFirst(); // // 只要是其中一行有错误 // if (optionalSame.isPresent()) { -// sames.forEach(e->{ +// sames.forEach(e -> { // if (!e.isError()) { // e.setError(Boolean.TRUE); -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 101723, "该员工的薪资档案记录有误,请检查"), finalErrorCount.get() +1, finalErrorCount.get() +1, 0, 0); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 101723, "该员工的薪资档案记录有误,请检查"), finalErrorCount.get() + 1, finalErrorCount.get() + 1, 0, 0); // finalErrorCount.addAndGet(1); // errorData.add(e.getRow()); // finalSuccessCount.addAndGet(-1); // } // }); -// // 如果到目前为止都没错的话,则相互之间检验调整记录 +// // 如果到目前为止都没错的话,则相互之间检验调整记录 // } else { // int nums = sames.size(); // // 1.生效时间不可重复 -// List effectiveTimeList = sames.stream().map(m->Optional.ofNullable(m.getRow().get("effectiveTime")).orElse("").toString()).distinct().collect(Collectors.toList()); +// List effectiveTimeList = sames.stream().map(m -> Optional.ofNullable(m.getRow().get("effectiveTime")).orElse("").toString()).distinct().collect(Collectors.toList()); // // 2.个税扣缴义务人和薪资项目共同决定是否重复 -// List rowSameList = sames.stream().map(m->{ +// List rowSameList = sames.stream().map(m -> { // Map row = m.getRow(); // String taxAgent = Optional.ofNullable(row.get("taxAgent")).orElse("").toString(); // String salaryItem = Optional.ofNullable(row.get("salaryItemVal")).orElse("").toString(); -// return taxAgent+salaryItem; +// return taxAgent + salaryItem; // }).distinct().collect(Collectors.toList()); -// if (effectiveTimeList.size()!=nums || rowSameList.size()!=nums) { -// sames.forEach(e->{ +// if (effectiveTimeList.size() != nums || rowSameList.size() != nums) { +// sames.forEach(e -> { // if (!e.isError()) { // e.setError(Boolean.TRUE); -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 101723, "该员工的薪资档案记录有误,请检查"), finalErrorCount.get() +1, finalErrorCount.get() +1, 0, 0); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 101723, "该员工的薪资档案记录有误,请检查"), finalErrorCount.get() + 1, finalErrorCount.get() + 1, 0, 0); // finalErrorCount.addAndGet(1); // errorData.add(e.getRow()); // finalSuccessCount.addAndGet(-1); @@ -698,19 +665,20 @@ // initImportData.add(initImport); // } // // 如果出现错误 -// if (isError || errorCount!=finalErrorCount.get() || successCount!=finalSuccessCount.get()) { +// if (isError || errorCount != finalErrorCount.get() || successCount != finalSuccessCount.get()) { // validMap.put("errorCount", finalErrorCount.get()); // validMap.put("successCount", finalSuccessCount.get()); // // 将前面添加好的数据给过滤掉 -// importHandleParam.setSalaryArchiveSaves(importHandleParam.getSalaryArchiveSaves().stream().filter(f->!f.getEmployeeId().equals(employeeId)).collect(Collectors.toList())); -// importHandleParam.setSalaryArchiveTaxAgentSaves(importHandleParam.getSalaryArchiveTaxAgentSaves().stream().filter(f->!f.getEmployeeId().equals(employeeId)).collect(Collectors.toList())); -// importHandleParam.setSalaryArchiveItemSaves(importHandleParam.getSalaryArchiveItemSaves().stream().filter(f->!f.getEmployeeId().equals(employeeId)).collect(Collectors.toList())); +// importHandleParam.setSalaryArchiveSaves(importHandleParam.getSalaryArchiveSaves().stream().filter(f -> !f.getEmployeeId().equals(employeeId)).collect(Collectors.toList())); +// importHandleParam.setSalaryArchiveTaxAgentSaves(importHandleParam.getSalaryArchiveTaxAgentSaves().stream().filter(f -> !f.getEmployeeId().equals(employeeId)).collect(Collectors.toList())); +// importHandleParam.setSalaryArchiveItemSaves(importHandleParam.getSalaryArchiveItemSaves().stream().filter(f -> !f.getEmployeeId().equals(employeeId)).collect(Collectors.toList())); // } // return validMap; // } // // /** // * 校验单行数据 +// * // * @param importType // * @param allEmployeeIds // * @param map @@ -739,7 +707,7 @@ // List employeeSameIds = importHandleParam.getEmployees().stream().filter(e -> (StringUtils.isBlank(userName) || Objects.equals(e.getUsername(), userName)) // && (StringUtils.isBlank(deparmentName) || Objects.equals(e.getDeparmentName(), deparmentName))).map(SalaryArchiveEmployeePO::getEmployeeId) // .collect(Collectors.toList()); -// Long employeeId = CollectionUtils.isNotEmpty(employeeSameIds) && employeeSameIds.size() == 1 && employeeSameIds.get(0)>0?employeeSameIds.get(0):null; +// Long employeeId = CollectionUtils.isNotEmpty(employeeSameIds) && employeeSameIds.size() == 1 && employeeSameIds.get(0) > 0 ? employeeSameIds.get(0) : null; // // 调薪和调整个税扣缴义务人的存在相同的取第一条 // if (employeeId != null && allEmployeeIds.contains(employeeId) && (isTaxAgentAdjust || isSalaryItemAdjust)) { // return isError; @@ -755,7 +723,7 @@ // // 免得失败后,会追加 00:00:00 // map.put(effectiveTimeI18n, effectiveTimeCellVal); // map.put("effectiveTime", effectiveTimeCellVal); -// LocalDate effectiveTime = SalaryDateUtil.checkDay(effectiveTimeCellVal)?dateStrToLocalDate(effectiveTimeCellVal):null; +// LocalDate effectiveTime = SalaryDateUtil.checkDay(effectiveTimeCellVal) ? dateStrToLocalDate(effectiveTimeCellVal) : null; // // 3.个税扣缴义务人 // String taxAgentCellVal = Optional.ofNullable(map.get(taxAgentI18n)).orElse("").toString(); // // 用于初始化导入的同一个人的记录校验 @@ -791,41 +759,41 @@ // || (adjustReasonI18n.equals(key.toString()) && (isTaxAgentAdjust || isSalaryItemAdjust))); // // 判空 // if (isEmpty) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100577, "不能为空"), errorCount+1, errorCount+1, j, j); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100577, "不能为空"), errorCount + 1, errorCount + 1, j, j); // isError = true; // } // // 1.姓名列处理 // if (!isEmpty && userNameI18n.equals(key.toString())) { // if (CollectionUtils.isEmpty(employeeSameIds) || employeeSameIds.size() > 1) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100578, "员工信息不能为空且不可重复(姓名与部门同时确认唯一)"), errorCount+1, errorCount+1, j, j); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100578, "员工信息不能为空且不可重复(姓名与部门同时确认唯一)"), errorCount + 1, errorCount + 1, j, j); // isError = true; // } else if (employeeId == null) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100579, "姓名错误,系统内不存在该姓名"), errorCount+1, errorCount+1, j, j); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100579, "姓名错误,系统内不存在该姓名"), errorCount + 1, errorCount + 1, j, j); // isError = true; -// // (调薪或调整个税扣缴义务人) +// // (调薪或调整个税扣缴义务人) // } else if (finalSalaryArchive == null && (isTaxAgentAdjust || isSalaryItemAdjust)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 101653, "该人员的薪资档案不存在,请先初始化"), errorCount+1, errorCount+1, j, j); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 101653, "该人员的薪资档案不存在,请先初始化"), errorCount + 1, errorCount + 1, j, j); // isError = true; // } -// // 2.个税扣缴义务人列处理(初始化导入或调整个税扣缴义务人) +// // 2.个税扣缴义务人列处理(初始化导入或调整个税扣缴义务人) // } else if (!isEmpty && taxAgentI18n.equals(key.toString()) && (isInit || isTaxAgentAdjust)) { // isError = handleTaxAgent(isError, isInit, effectiveTimeIndex, excelComments, errorCount, j, currentEmployeeId, tenantKey, // taxAgentId, effectiveTime, finalSalaryArchive, adjustReason, importHandleParam); -// // 3.生效时间处理 +// // 3.生效时间处理 // } else if (!isEmpty && effectiveTimeI18n.equals(key.toString()) && effectiveTime == null) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 102497, "生效日期错误或格式不正确,正确格式示例为'2022-01-01'、'2022/1/1'"), errorCount+1, errorCount+1, j, j); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 102497, "生效日期错误或格式不正确,正确格式示例为'2022-01-01'、'2022/1/1'"), errorCount + 1, errorCount + 1, j, j); // isError = true; -// // 4.调整原因列处理(调薪或调整个税扣缴义务人) +// // 4.调整原因列处理(调薪或调整个税扣缴义务人) // } else if (!isEmpty && adjustReasonI18n.equals(key.toString()) && (isTaxAgentAdjust || isSalaryItemAdjust) && StringUtils.isEmpty(adjustReason)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100591, "调整原因不存在"), errorCount+1, errorCount+1, j, j); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100591, "调整原因不存在"), errorCount + 1, errorCount + 1, j, j); // isError = true; -// // 5.薪资项目列处理(初始化导入或调薪) +// // 5.薪资项目列处理(初始化导入或调薪) // } else { // // 薪资项目数据 // if (effectiveTime == null || finalSalaryArchive == null || !(isInit || isSalaryItemAdjust)) { // continue; // } -// isError = handleSalaryItem(isError, isInit, effectiveTimeIndex, excelComments, errorCount, j, currentEmployeeId, tenantKey, +// isError = handleSalaryItem(isError, isInit, effectiveTimeIndex, excelComments, errorCount, j, currentEmployeeId, tenantKey, // effectiveTime, finalSalaryArchive, adjustReason, importHandleParam, key.toString(), cellVal, map); // // } @@ -834,7 +802,7 @@ // } // // private SalaryArchivePO buildSalaryArchive(boolean isInit, Long currentEmployeeId, String tenantKey, Long employeeId, SalaryArchiveImportHandleParam importHandleParam) { -// Optional optionalSA = importHandleParam.getSalaryArchives().stream().filter(p->p.getEmployeeId().toString().equals(employeeId!=null?employeeId.toString():"")).findFirst(); +// Optional optionalSA = importHandleParam.getSalaryArchives().stream().filter(p -> p.getEmployeeId().toString().equals(employeeId != null ? employeeId.toString() : "")).findFirst(); // SalaryArchivePO salaryArchive = null; // if (optionalSA.isPresent()) { // // 修改档案 @@ -842,7 +810,7 @@ // salaryArchive = new SalaryArchivePO(); // salaryArchive.setId(sa.getId()); // salaryArchive.setEmployeeId(sa.getEmployeeId()); -// } else if (employeeId!=null && isInit) { +// } else if (employeeId != null && isInit) { // // 新增档案 // salaryArchive = SalaryArchivePO.builder() // .id(IdGenerator.generate()) @@ -859,6 +827,7 @@ // // /** // * 个税扣缴义务人处理 +// * // * @param isError // * @param excelComments // * @param errorCount @@ -872,11 +841,11 @@ // * @param importHandleParam // * @return // */ -// private boolean handleTaxAgent(boolean isError, boolean isInit , int effectiveTimeIndex, +// private boolean handleTaxAgent(boolean isError, boolean isInit, int effectiveTimeIndex, // List excelComments, int errorCount, int j, Long currentEmployeeId, String tenantKey, -// Long taxAgentId, LocalDate effectiveTime,SalaryArchivePO finalSalaryArchive, String taxAgentAdjustReason, SalaryArchiveImportHandleParam importHandleParam) { +// Long taxAgentId, LocalDate effectiveTime, SalaryArchivePO finalSalaryArchive, String taxAgentAdjustReason, SalaryArchiveImportHandleParam importHandleParam) { // if (taxAgentId == null) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100545, "个税扣缴义务人不存在"), errorCount+1, errorCount+1, j, j); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100545, "个税扣缴义务人不存在"), errorCount + 1, errorCount + 1, j, j); // isError = true; // } else if (effectiveTime != null && finalSalaryArchive != null) { // boolean isBeforeError = false; @@ -885,9 +854,9 @@ // // 已生效 // List effectiveList = importHandleParam.getEffectiveTaxAgentList().stream().filter(i -> finalSalaryArchive.getId().equals(i.getSalaryArchiveId())).collect(Collectors.toList()); // // 当前已生效 -// SalaryArchiveTaxAgentPO effectiveTaxAgent = CollectionUtils.isNotEmpty(effectiveList)&&effectiveList.size()>0?effectiveList.get(0):null; +// SalaryArchiveTaxAgentPO effectiveTaxAgent = CollectionUtils.isNotEmpty(effectiveList) && effectiveList.size() > 0 ? effectiveList.get(0) : null; // // 当前已生效的前一次调整 -// SalaryArchiveTaxAgentPO effectiveBeforeTaxAgent = CollectionUtils.isNotEmpty(effectiveList)&&effectiveList.size()>1?effectiveList.get(1):null; +// SalaryArchiveTaxAgentPO effectiveBeforeTaxAgent = CollectionUtils.isNotEmpty(effectiveList) && effectiveList.size() > 1 ? effectiveList.get(1) : null; // // 未生效 // Optional optionalIneffective = importHandleParam.getIneffectiveTaxAgentList().stream().filter(i -> finalSalaryArchive.getId().equals(i.getSalaryArchiveId())).findFirst(); // SalaryArchiveTaxAgentPO ineffectiveTaxAgent = optionalIneffective.orElse(null); @@ -897,36 +866,36 @@ // LocalDate currentEffectiveTime = effectiveTaxAgent.getEffectiveTime(); // // 1.1 如果早于<当前已生效 // if (effectiveTime.isBefore(currentEffectiveTime)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100429, "生效日期不可早于当前已生效的调整日期"), errorCount+1, errorCount+1, effectiveTimeIndex, effectiveTimeIndex); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100429, "生效日期不可早于当前已生效的调整日期"), errorCount + 1, errorCount + 1, effectiveTimeIndex, effectiveTimeIndex); // isError = true; // isBeforeError = true; // // 1.2 如果等于当前已生效 // } else if (effectiveTime.isEqual(currentEffectiveTime)) { // if (effectiveBeforeTaxAgent != null && effectiveBeforeTaxAgent.getTaxAgentId().equals(taxAgentId)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100432, "调整前后不可相同"), errorCount+1, errorCount+1, j, j); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); // isError = true; // } // if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100434, "与未生效的调整后不可相同"), errorCount+1, errorCount+1, j, j); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); // isError = true; // } // // 1.3 如果>已经生效且<=今天 // } else if (effectiveTime.isAfter(currentEffectiveTime) && !effectiveTime.isAfter(importHandleParam.getToday())) { // if (effectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100432, "调整前后不可相同"), errorCount+1, errorCount+1, j, j); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); // isError = true; // } // if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100434, "与未生效的调整后不可相同"), errorCount+1, errorCount+1, j, j); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); // isError = true; // } // // 1.4 如果>今天 // } else if (effectiveTime.isAfter(importHandleParam.getToday()) && effectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100432, "调整前后不可相同"), errorCount+1, errorCount+1, j, j); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); // isError = true; // } // } else if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100434, "与未生效的调整后不可相同"), errorCount+1, errorCount+1, j, j); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); // isError = true; // } // // 2.数据处理,有的就先删后增 @@ -944,7 +913,7 @@ // .employeeId(finalSalaryArchive.getEmployeeId()) // .taxAgentId(taxAgentId) // .effectiveTime(effectiveTime) -// .adjustReason(StringUtils.isEmpty(taxAgentAdjustReason)?SalaryArchiveTaxAgentAdjustReasonEnum.INIT.getValue():taxAgentAdjustReason) +// .adjustReason(StringUtils.isEmpty(taxAgentAdjustReason) ? SalaryArchiveTaxAgentAdjustReasonEnum.INIT.getValue() : taxAgentAdjustReason) // .operator(currentEmployeeId) // .operateTime(importHandleParam.getNowTime()) // .createTime(importHandleParam.getNowTime()) @@ -959,6 +928,7 @@ // // /** // * 薪资项目处理 +// * // * @param isError // * @param excelComments // * @param errorCount @@ -974,9 +944,9 @@ // */ // private boolean handleSalaryItem(boolean isError, boolean isInit, int effectiveTimeIndex, // List excelComments, int errorCount, int j, Long currentEmployeeId, String tenantKey, -// LocalDate effectiveTime,SalaryArchivePO finalSalaryArchive, String salaryItemAdjustReason, SalaryArchiveImportHandleParam importHandleParam, +// LocalDate effectiveTime, SalaryArchivePO finalSalaryArchive, String salaryItemAdjustReason, SalaryArchiveImportHandleParam importHandleParam, // String key, String cellVal, Map map) { -// Optional optionalSalaryItem = importHandleParam.getSalaryItems().stream().filter(e->e.getName().equals(key)).findFirst(); +// Optional optionalSalaryItem = importHandleParam.getSalaryItems().stream().filter(e -> e.getName().equals(key)).findFirst(); // if (optionalSalaryItem.isPresent()) { // Long salaryItemId = optionalSalaryItem.get().getId(); // boolean isBeforeError = false; @@ -984,9 +954,9 @@ // // 已生效 // List effectiveList = importHandleParam.getEffectiveItemList().stream().filter(i -> finalSalaryArchive.getId().equals(i.getSalaryArchiveId()) && i.getSalaryItemId().equals(salaryItemId)).collect(Collectors.toList()); // // 当前已生效 -// SalaryArchiveItemPO effectiveSalaryItem = CollectionUtils.isNotEmpty(effectiveList)&&effectiveList.size()>0?effectiveList.get(0):null; +// SalaryArchiveItemPO effectiveSalaryItem = CollectionUtils.isNotEmpty(effectiveList) && effectiveList.size() > 0 ? effectiveList.get(0) : null; // // 当前已生效的前一次调整 -// SalaryArchiveItemPO effectiveBeforeSalaryItem = CollectionUtils.isNotEmpty(effectiveList)&&effectiveList.size()>1?effectiveList.get(1):null; +// SalaryArchiveItemPO effectiveBeforeSalaryItem = CollectionUtils.isNotEmpty(effectiveList) && effectiveList.size() > 1 ? effectiveList.get(1) : null; // // 未生效 // Optional optionalIneffective = importHandleParam.getIneffectiveItemList().stream().filter(i -> finalSalaryArchive.getId().equals(i.getSalaryArchiveId()) && i.getSalaryItemId().equals(salaryItemId)).findFirst(); // SalaryArchiveItemPO ineffectiveSalaryItem = optionalIneffective.orElse(null); @@ -997,36 +967,36 @@ // LocalDate currentEffectiveTime = effectiveSalaryItem.getEffectiveTime(); // // 1.1 如果早于<当前已生效 // if (effectiveTime.isBefore(currentEffectiveTime)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100429, "生效日期不可早于当前已生效的调整日期"), errorCount+1, errorCount+1, effectiveTimeIndex, effectiveTimeIndex); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100429, "生效日期不可早于当前已生效的调整日期"), errorCount + 1, errorCount + 1, effectiveTimeIndex, effectiveTimeIndex); // isError = true; // isBeforeError = true; // // 1.2 如果等于当前已生效 // } else if (effectiveTime.isEqual(currentEffectiveTime)) { -// if (effectiveBeforeSalaryItem !=null && effectiveBeforeSalaryItem.getItemValue().equals(cellVal)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100432, "调整前后不可相同"), errorCount+1, errorCount+1, j, j); +// if (effectiveBeforeSalaryItem != null && effectiveBeforeSalaryItem.getItemValue().equals(cellVal)) { +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); // isError = true; // } // if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(cellVal)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100434, "与未生效的调整后不可相同"), errorCount+1, errorCount+1, j, j); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); // isError = true; // } // // 1.3 如果>已经生效且<=今天 // } else if (effectiveTime.isAfter(currentEffectiveTime) && !effectiveTime.isAfter(importHandleParam.getToday())) { // if (effectiveSalaryItem.getItemValue().equals(cellVal)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100432, "调整前后不可相同"), errorCount+1, errorCount+1, j, j); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); // isError = true; // } // if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(cellVal)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100434, "与未生效的调整后不可相同"), errorCount+1, errorCount+1, j, j); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); // isError = true; // } // // 1.4 如果>今天 // } else if (effectiveTime.isAfter(importHandleParam.getToday()) && effectiveSalaryItem.getItemValue().equals(cellVal)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100432, "调整前后不可相同"), errorCount+1, errorCount+1, j, j); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); // isError = true; // } // } else if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(cellVal)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100434, "与未生效的调整后不可相同"), errorCount+1, errorCount+1, j, j); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); // isError = true; // } // // 2.数据处理 @@ -1056,7 +1026,7 @@ // .build()); // } // // 用于初始化导入,同一个人的多行记录之间的薪资项目是否调整 -// map.put("salaryItemVal", Optional.ofNullable(map.get("salaryItemVal")).orElse("").toString()+salaryItemId+cellVal); +// map.put("salaryItemVal", Optional.ofNullable(map.get("salaryItemVal")).orElse("").toString() + salaryItemId + cellVal); // } // return isError; // } @@ -1064,6 +1034,7 @@ // /** // * 字符串转日期 // * 兼容/和- +// * // * @param effectiveTime // * @return // */ @@ -1087,7 +1058,7 @@ // // private List getEffectiveItemList(Collection salaryItemIds, String tenantKey) { // // 没有薪资项目时,给个不存在的,否则加载所有不合理 -// salaryItemIds = CollectionUtils.isEmpty(salaryItemIds)?Collections.singletonList(0L):salaryItemIds; +// salaryItemIds = CollectionUtils.isEmpty(salaryItemIds) ? Collections.singletonList(0L) : salaryItemIds; // return new LambdaQueryChainWrapper<>(salaryArchiveItemMapper) // .eq(SalaryArchiveItemPO::getDeleteType, 0) // .eq(SalaryArchiveItemPO::getTenantKey, tenantKey) @@ -1099,7 +1070,7 @@ // // private List getIneffectiveItemList(Collection salaryItemIds, String tenantKey) { // // 没有薪资项目时,给个不存在的,否则加载所有不合理 -// salaryItemIds = CollectionUtils.isEmpty(salaryItemIds)?Collections.singletonList(0L):salaryItemIds; +// salaryItemIds = CollectionUtils.isEmpty(salaryItemIds) ? Collections.singletonList(0L) : salaryItemIds; // return new LambdaQueryChainWrapper<>(salaryArchiveItemMapper) // .eq(SalaryArchiveItemPO::getDeleteType, 0) // .eq(SalaryArchiveItemPO::getTenantKey, tenantKey) @@ -1127,6 +1098,7 @@ // // /** // * 检查参数 +// * // * @param message // * @param params // * @return @@ -1141,11 +1113,11 @@ // || params.get("importType") == null) { // errorMsg = SalaryI18nUtil.getI18nLabel(message.getTenantKey(), message.getUserId(), 100592, "导入类型必传"); // } else { -// Optional optional = Arrays.stream(SalaryArchiveImportTypeEnum.values()).filter(e->e.getValue().equals(params.get("importType").toString())).findFirst(); +// Optional optional = Arrays.stream(SalaryArchiveImportTypeEnum.values()).filter(e -> e.getValue().equals(params.get("importType").toString())).findFirst(); // if (!optional.isPresent()) { // errorMsg = SalaryI18nUtil.getI18nLabel(message.getTenantKey(), message.getUserId(), 100593, "导入类型不正确"); // } else { -// message.setDataType(message.getDataType()+"-"+SalaryI18nUtil.getI18nLabel(message.getTenantKey(), message.getUserId(), optional.get().getLabelId(), optional.get().getDefaultLabel())); +// message.setDataType(message.getDataType() + "-" + SalaryI18nUtil.getI18nLabel(message.getTenantKey(), message.getUserId(), optional.get().getLabelId(), optional.get().getDefaultLabel())); // } // } // } @@ -1160,6 +1132,7 @@ // // /** // * 检查列头 +// * // * @param importType // * @param message // * @param headers @@ -1178,7 +1151,7 @@ // String effectiveTimeI18n = SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 85904, "生效日期"); // String adjustReasonI18n = SalaryI18nUtil.getI18nLabel(tenantKey, currentEmployeeId, 85431, "调整原因"); // -// List headerList = headers.stream().map(m->Optional.ofNullable(m.get("key")).orElse("").toString()).collect(Collectors.toList()); +// List headerList = headers.stream().map(m -> Optional.ofNullable(m.get("key")).orElse("").toString()).collect(Collectors.toList()); // // List mustHeaders = Lists.newArrayList(); // if (isInit) { @@ -1215,6 +1188,7 @@ // // /** // * 数据落库处理 +// * // * @param importHandleParam // */ // private void handleImportData(boolean isInit, String tenantKey, SalaryArchiveImportHandleParam importHandleParam) { @@ -1269,4 +1243,4 @@ // salaryArchiveItemMapper.batchInsert(salaryArchiveItemSaves); // } // } -//} +} diff --git a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java index 1e7c7833f..7ac809592 100644 --- a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java @@ -1,9 +1,12 @@ package com.engine.salary.service.impl; import com.engine.core.impl.Service; +import com.engine.salary.biz.TaxAgentBiz; import com.engine.salary.cmd.TaxAgent.*; +import com.engine.salary.entity.taxrate.TaxAgent; import com.engine.salary.service.TaxAgentService; +import java.util.Collection; import java.util.Map; public class TaxAgentServiceImpl extends Service implements TaxAgentService { @@ -37,4 +40,9 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { public Map selectList(Map params) { return commandExecutor.execute(new TaxAgentSelectListCmd(params,user)); } + + @Override + public Collection findAll() { + return new TaxAgentBiz().listAll(); + } } diff --git a/src/com/engine/salary/web/SalaryArchiveController.java b/src/com/engine/salary/web/SalaryArchiveController.java index 76464b360..cc6d1a295 100644 --- a/src/com/engine/salary/web/SalaryArchiveController.java +++ b/src/com/engine/salary/web/SalaryArchiveController.java @@ -1,5 +1,26 @@ package com.engine.salary.web; +import com.engine.common.util.ServiceUtil; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveDimissionSaveParam; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveQueryParam; +import com.engine.salary.util.ResponseResult; +import com.engine.salary.wrapper.SalaryArchiveWrapper; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.apache.commons.lang3.StringUtils; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.List; +import java.util.Map; + /** * 薪资档案 *

Copyright: Copyright (c) 2022

@@ -9,13 +30,17 @@ package com.engine.salary.web; * @version 1.0 **/ public class SalaryArchiveController { + private SalaryArchiveWrapper getSalaryArchiveWrapper(User user) { + return ServiceUtil.getService(SalaryArchiveWrapper.class, user); + } // // @Autowired // private SalaryArchiveWrapper salaryArchiveWrapper; // @Autowired // private SalaryArchiveItemWrapper salaryArchiveItemWrapper; -// @Autowired // private SalaryArchiveTaxAgentWrapper salaryArchiveTaxAgentWrapper; + + // /******** 薪资档案主表 start ***********************************************************************************************/ // /** // * 薪资档案列表的高级搜索 @@ -28,20 +53,25 @@ public class SalaryArchiveController { // public WeaResult getSearchCondition() { // return WeaResult.success(salaryArchiveWrapper.getSearchCondition(UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); // } -// -// /** -// * 薪资档案列表 -// * -// * @param queryParam -// * @return -// */ -// @PostMapping("/list") -// @ApiOperation("薪资档案列表") -// @WeaPermission -// public WeaResult> list(@RequestBody SalaryArchiveQueryParam queryParam) { -// return WeaResult.success(salaryArchiveWrapper.list(queryParam, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); -// } -// + + + + + /** + * 薪资档案列表 + * + * @param queryParam + * @return + */ + @POST + @Path("/list") + @Produces(MediaType.APPLICATION_JSON) + public String list(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryArchiveQueryParam queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>().run(getSalaryArchiveWrapper(user)::list, queryParam); + } + + // /** // * 导出薪资档案 // * @@ -54,62 +84,65 @@ public class SalaryArchiveController { // public WeaResult> exportList(@RequestBody SalaryArchiveQueryParam queryParam) throws Exception { // return WeaResult.success(salaryArchiveWrapper.exportList(queryParam, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); // } -// -// /** -// * 获取薪资档案详情表单 -// * -// * @param salaryArchiveId -// * @return -// */ -// @GetMapping("/getForm") -// @ApiOperation("获取薪资档案详情表单") -// @WeaPermission -// public WeaResult getFrom(@RequestParam Long salaryArchiveId) { -// return WeaResult.success(salaryArchiveWrapper.getFrom(salaryArchiveId, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); -// } -// -// /** -// * 获取离职时段设置表单 -// * -// * @return -// */ -// @GetMapping("/getDimissionSetForm") -// @ApiOperation("获取离职时段设置表单") -// @WeaPermission -// public WeaResult getDimissionSetForm() { -// return WeaResult.success(salaryArchiveWrapper.getDimissionSetForm(TenantContext.getCurrentTenantKey())); -// } -// -// /** -// * 保存离职时段设置 -// * -// * @return -// */ -// @PostMapping("/saveDimissionSet") -// @ApiOperation("保存离职时段设置") -// @WeaPermission -// public WeaResult saveDimissionSet(@RequestBody SalaryArchiveDimissionSaveParam saveParam) { -// return WeaResult.success(salaryArchiveWrapper.saveDimissionSet(saveParam, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); -// } -// -// /** -// * 获取导入类型 -// * -// * @return -// */ -// @GetMapping("/getImportTypes") -// @ApiOperation("获取导入类型") -// @WeaPermission(publicPermission = true) -// public WeaResult>> getImportTypes() { -// List> importTypes = Arrays.stream(SalaryArchiveImportTypeEnum.values()).map(m -> { -// Map map = new HashMap<>(2); -// map.put("id", String.valueOf(m.getValue())); -// map.put("content", SalaryI18nUtil.getI18nLabel(TenantContext.getCurrentTenantKey(), UserContext.getCurrentEmployeeId(), m.getLabelId(), m.getDefaultLabel())); -// return map; -// }).collect(Collectors.toList()); -// return WeaResult.success(importTypes); -// } -// + + /** + * 获取薪资档案详情表单 + * + * @return + */ + @GET + @Path("/getForm") + @Produces(MediaType.APPLICATION_JSON) + public String getFrom(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + String salaryArchiveIdStr = request.getParameter("salaryArchiveId"); + Long salaryArchiveId = null; + if (StringUtils.isNotBlank(salaryArchiveIdStr)) { + salaryArchiveId = Long.valueOf(salaryArchiveIdStr); + } + return new ResponseResult>().run(getSalaryArchiveWrapper(user)::getFrom, salaryArchiveId); + } + + + /** + * 获取离职时段设置表单 + * + * @return + */ + @GET + @Path("/getDimissionSetForm") + @Produces(MediaType.APPLICATION_JSON) + public String getDimissionSetForm(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>().run(getSalaryArchiveWrapper(user)::getDimissionSetForm); + } + + /** + * 保存离职时段设置 + * + * @return + */ + @POST + @Path("/saveDimissionSet") + @Produces(MediaType.APPLICATION_JSON) + public String saveDimissionSet(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryArchiveDimissionSaveParam saveParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult().run(getSalaryArchiveWrapper(user)::saveDimissionSet, saveParam); + } + + /** + * 获取导入类型 + * + * @return + */ + @GET + @Path("/getImportTypes") + @Produces(MediaType.APPLICATION_JSON) + public String getImportTypes(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>>().run(getSalaryArchiveWrapper(user)::getImportTypes); + } + // /** // * 下载导入模板 // * diff --git a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java index 309fa4170..875a76964 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java @@ -1,5 +1,36 @@ package com.engine.salary.wrapper; +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.biz.EmployBiz; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveBaseInfoFormDTO; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveFormDTO; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveDimissionSaveParam; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveQueryParam; +import com.engine.salary.entity.salaryarchive.po.SalaryArchiveDimissionPO; +import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; +import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; +import com.engine.salary.entity.salaryarchive.po.SalaryArchiveTaxAgentPO; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.entity.taxrate.TaxAgent; +import com.engine.salary.enums.salaryarchive.SalaryArchiveImportTypeEnum; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.service.SalaryArchiveItemService; +import com.engine.salary.service.SalaryArchiveService; +import com.engine.salary.service.TaxAgentService; +import com.engine.salary.service.impl.SalaryArchiveServiceImpl; +import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.page.PageInfo; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; +import weaver.hrm.User; + +import java.util.*; +import java.util.stream.Collectors; + /** * 薪资档案 *

Copyright: Copyright (c) 2022

@@ -8,248 +39,147 @@ package com.engine.salary.wrapper; * @author qiantao * @version 1.0 **/ -public class SalaryArchiveWrapper { -// private SalaryArchiveService salaryArchiveService; -// private SalaryArchiveItemService salaryArchiveItemService; -// private HrmCommonEmployeeService employeeService; -// private TaxAgentService taxAgentService; +public class SalaryArchiveWrapper extends Service { + + private SalaryArchiveService getSalaryArchiveService(User user) { + return (SalaryArchiveService) ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); + } + + private SalaryArchiveService salaryArchiveService; + private SalaryArchiveItemService salaryArchiveItemService; + private EmployBiz employeeService = new EmployBiz(); + private TaxAgentService taxAgentService; // private SalaryBatchService salaryBatchService; // private ExecutorService taskExecutor; -// -// /** -// * 薪资档案列表-高级搜索 -// * -// * @param employeeId -// * @param tenantKey -// * @return -// */ -// public WeaSearchCondition getSearchCondition(Long employeeId, String tenantKey) { -// List taxAgentList = new ArrayList<>(); -// // 获取所有个税扣缴义务人 -// Collection taxAgentLists = taxAgentService.findAll(tenantKey); -// taxAgentLists.forEach(e-> taxAgentList.add(new WeaSearchConditionOption(e.getId().toString(), e.getName()))); -// -// WeaSearchCondition weaSearchCondition = SalaryFormatUtil.getInstance() -// .buildCondition(SalaryArchiveSearchConditionDTO.class, -// SalaryArchiveSearchConditionDTO.builder().taxAgentOptions(taxAgentList).build(), -// "salaryArchive"); -// // 入职日期-添加范围 -// SalaryArchiveBO.addDatePickerRangeOtherParams(weaSearchCondition, "hiredate", employeeId, tenantKey); -// // 只保留常用条件 -// weaSearchCondition.setGroups(weaSearchCondition.getGroups().stream().filter(e-> "commonGroup".equals(e.getId())).collect(Collectors.toList())); -// -// return weaSearchCondition; -// } -// -// /** -// * 薪资档案列表(分页) -// * -// * @param queryParam -// * @param employeeId -// * @param tenantKey -// * @return -// */ -// public WeaTable list(SalaryArchiveQueryParam queryParam, Long employeeId, String tenantKey) { -// Collection taxAgentLists = taxAgentService.findAll(tenantKey); -// -// Page page = new Page<>(queryParam.getCurrent(), queryParam.getPageSize(), true); -// page = salaryArchiveService.listPage(page, queryParam, tenantKey); -// -// Collection salaryArchives = page.getRecords(); -// // 获取所有可被引用的薪资项目 -// List salaryItems = salaryArchiveItemService.getCanAdjustSalaryItems(tenantKey); -// List> listMaps = salaryArchiveService.buildSalaryArchiveData(salaryArchives, taxAgentLists, salaryItems, employeeId, tenantKey, Boolean.TRUE); -// -// Page> listPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal(), page.isSearchCount()); -// listPage.setRecords(listMaps); -// -// WeaTable weaTable = FormatManager.getInstance() -// .genTable(LinkedHashMap.class, listPage); -// weaTable.setPageUid("salaryArchive"); -// weaTable.setModule("hrmsalary"); -// //动态列组装 -// SalaryArchiveBO.buildSalaryArchiveTable(weaTable, salaryItems, employeeId, tenantKey, listMaps.size()); -// // 在外展示操作按钮 -// weaTable.getOperates().get(0).setOuter(Boolean.TRUE); -// return weaTable; -// } -// -// /** -// * 获取薪资档案详情表单 -// * -// * @param salaryArchiveId -// * @param employeeId -// * @param tenantKey -// * @return -// */ -// public SalaryArchiveFormDTO getFrom(Long salaryArchiveId, Long employeeId, String tenantKey) { -// if (salaryArchiveId == null) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100425, "薪资档案id不能为空")); -// } -// SalaryArchivePO po = salaryArchiveService.getById(salaryArchiveId, tenantKey); -// if (po == null) { -// throw new SalaryRunTimeException(String.format(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100463, "薪资档案不存在")+"[id:%s]", salaryArchiveId)); -// } -// -// List employeeList = employeeService.getEmployeeByIds(Collections.singletonList(po.getEmployeeId()), tenantKey); -// if (CollectionUtils.isEmpty(employeeList)) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100465, "薪资档案员工信息不存在")); -// } -// -// // 获取当前已生效个税扣缴义务人 -// List taxAgentList = salaryArchiveService.getCurrentEffectiveTaxAgentList(Collections.singletonList(salaryArchiveId), tenantKey); -// // 获取所有个税扣缴义务人 -// Collection taxAgentLists = taxAgentService.findAll(tenantKey); -// String taxAgent = ""; -// if (CollectionUtils.isNotEmpty(taxAgentList)) { -// SalaryArchiveTaxAgentPO salaryArchiveTaxAgent = taxAgentList.get(0); -// Optional taxAgentOptional = taxAgentLists.stream().filter(f->f.getId().equals(salaryArchiveTaxAgent.getTaxAgentId())).findFirst(); -// taxAgent = taxAgentOptional.isPresent()?taxAgentOptional.get().getName():taxAgent; -// } -// -// // 1.基本信息表单 -// SimpleEmployee employee = employeeList.get(0); -// WeaForm salaryArchiveBaseInfoForm = SalaryFormatUtil.getInstance().buildForm(SalaryArchiveBaseInfoFormDTO.class, -// SalaryArchiveBaseInfoFormDTO.builder() -// .username(employee.getUsername()) -// .department(employee.getDepartment().getName()) -// .position(employee.getPosition()==null?"":employee.getPosition().getName()) -// .hiredate(SalaryDateUtil.getFormatLocalDate(employee.getHiredate())) -// .mobile(employee.getMobile()) -// .taxAgent(taxAgent) -// .build()); -// -// List> salaryItems = Lists.newArrayList(); -// // 获取所有可被引用的薪资项目 -// List salaryItemList = salaryArchiveItemService.getCanAdjustSalaryItems(tenantKey); -// Collection salaryItemIds = salaryItemList.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); -// List salaryArchiveItemList = salaryArchiveService.getCurrentEffectiveItemList(Collections.singletonList(salaryArchiveId), salaryItemIds, tenantKey); -// salaryArchiveItemList.forEach(m->{ -// Optional optionalItem = salaryItemList.stream().filter(f->f.getId().equals(m.getSalaryItemId())).findFirst(); -// if (optionalItem.isPresent()) { -// Map salaryItemMap = new LinkedHashMap<>(); -// salaryItemMap.put("id", m.getId()); -// salaryItemMap.put("name", optionalItem.get().getName()); -// salaryItemMap.put("value", m.getItemValue()); -// salaryItems.add(salaryItemMap); -// } -// }); -// -// // 2.薪资档案表单 -// WeaForm salaryItemFrom = buildSalaryItemForm(salaryItems); -// -// // 3.调整记录的高级搜索 -// // 3.1 薪资项目 -// WeaSearchCondition salaryItemAdjustRecordSearchCondition = buildSalaryItemAdjustRecordSearchCondition(employeeId, tenantKey); -// -// return SalaryArchiveFormDTO.builder() -// .id(salaryArchiveId) -// .employeeId(employee.getId()) -// .baseInfo(salaryArchiveBaseInfoForm) -// .adjustSalaryItems(salaryItemFrom) -// .salaryItemAdjustRecordSearchCondition(salaryItemAdjustRecordSearchCondition) -// .build(); -// } -// -// /** -// * 薪资调整记录的高级搜索 -// * -// * @param employeeId -// * @param tenantKey -// * @return -// */ -// private WeaSearchCondition buildSalaryItemAdjustRecordSearchCondition(Long employeeId, String tenantKey) { -// WeaSearchCondition weaSearchCondition = SalaryFormatUtil.getInstance() -// .buildCondition(SalaryItemAdjustRecordForFromSearchConditionDTO.class, -// SalaryItemAdjustRecordForFromSearchConditionDTO.builder().build(), -// "salaryItemAdjustRecordForFromSearchCondition"); -// // 生效日期-添加范围 -// SalaryArchiveBO.addDatePickerRangeOtherParams(weaSearchCondition, "effectiveTime", employeeId, tenantKey); -// // 操作日期-添加范围 -// SalaryArchiveBO.addDatePickerRangeOtherParams(weaSearchCondition, "operateTime", employeeId, tenantKey); -// -// // 只保留常用条件 -// weaSearchCondition.setGroups(weaSearchCondition.getGroups().stream().filter(e-> "commonGroup".equals(e.getId())).collect(Collectors.toList())); -// -// return weaSearchCondition; -// } -// -// /** -// * 薪资档案-薪资档案表单 -// * -// * @param salaryItems -// * @return -// */ -// private WeaForm buildSalaryItemForm(List> salaryItems) { -// // 构建表单 -// WeaForm salaryItemForm = new WeaForm(); -// -// // 控件项目 -// Map items = salaryItemForm.getItems(); -// // 控件布局 -// List> layout = salaryItemForm.getLayout(); -// // 控件数据 -// Map data = salaryItemForm.getData(); -// -// List layoutSingles = Lists.newArrayList(); -// int i=0; -// while (if.getId().equals(String.valueOf(finalI))).collect(Collectors.toList())); -// } -// j++; -// } -// -// return salaryItemForm; -// } -// -// /** -// * 获取离职时段设置表单 -// * -// * @param tenantKey -// * @return -// */ -// public WeaForm getDimissionSetForm(String tenantKey) { -// WeaForm salaryTemplateBase = SalaryFormatUtil.getInstance().buildForm(DimissionSetFormDTO.class, DimissionSetFormDTO.builder().build()); -// List dimissionSets = salaryArchiveService.dimissionSets(tenantKey); -// Map data = new LinkedHashMap<>(); -// if (CollectionUtils.isNotEmpty(dimissionSets)) { -// data.put("dimissionTimeInterval", dimissionSets.get(0).getDimissionTimeInterval()); -// } -// salaryTemplateBase.setData(data); -// return salaryTemplateBase; -// } -// -// /** -// * 保存离职时段设置 -// * -// * @param saveParam -// * @param employeeId -// * @param tenantKey -// * @return -// */ -// public String saveDimissionSet(SalaryArchiveDimissionSaveParam saveParam, Long employeeId, String tenantKey) { -// return salaryArchiveService.saveDimissionSet(saveParam, employeeId, tenantKey); -// } -// + + + /** + * 薪资档案列表(分页) + * + * @param queryParam + * @return + */ + public PageInfo> list(SalaryArchiveQueryParam queryParam) { + Collection taxAgentLists = taxAgentService.findAll(); + + PageInfo pageInfo = salaryArchiveService.listPage(queryParam); + + Collection salaryArchives = pageInfo.getList(); + // 获取所有可被引用的薪资项目 + List salaryItems = salaryArchiveItemService.getCanAdjustSalaryItems(); + List> listMaps = salaryArchiveService.buildSalaryArchiveData(salaryArchives, taxAgentLists, salaryItems, Boolean.TRUE); + + PageInfo> pageInfos = new PageInfo>(listMaps); + pageInfos.setTotal(listMaps.size()); + pageInfos.setPageNum(queryParam.getCurrent()); + pageInfos.setPageSize(queryParam.getPageSize()); + + return pageInfos; + } + + /** + * 获取薪资档案详情表单 + * + * @param salaryArchiveId + * @return + */ + public SalaryArchiveFormDTO getFrom(Long salaryArchiveId) { + if (salaryArchiveId == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100425, "薪资档案id不能为空")); + } + SalaryArchivePO po = salaryArchiveService.getById(salaryArchiveId); + if (po == null) { + throw new SalaryRunTimeException(String.format(SalaryI18nUtil.getI18nLabel(100463, "薪资档案不存在") + "[id:%s]", salaryArchiveId)); + } + + List employeeList = employeeService.getEmployeeByIdsAll(Collections.singletonList(po.getEmployeeId())); + if (CollectionUtils.isEmpty(employeeList)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100465, "薪资档案员工信息不存在")); + } + + // 获取当前已生效个税扣缴义务人 + List taxAgentList = salaryArchiveService.getCurrentEffectiveTaxAgentList(Collections.singletonList(salaryArchiveId)); + // 获取所有个税扣缴义务人 + Collection taxAgentLists = taxAgentService.findAll(); + String taxAgent = ""; + if (CollectionUtils.isNotEmpty(taxAgentList)) { + SalaryArchiveTaxAgentPO salaryArchiveTaxAgent = taxAgentList.get(0); + Optional taxAgentOptional = taxAgentLists.stream().filter(f -> f.getId().equals(salaryArchiveTaxAgent.getTaxAgentId())).findFirst(); + taxAgent = taxAgentOptional.isPresent() ? taxAgentOptional.get().getName() : taxAgent; + } + + // 1.基本信息表单 + Map baseInfo = new HashMap<>(); + DataCollectionEmployee employee = employeeList.get(0); + SalaryArchiveBaseInfoFormDTO build = SalaryArchiveBaseInfoFormDTO.builder() + .username(employee.getUsername()) + .department(employee.getDepartmentName()) + .position(employee.getJobtitleName() == null ? "" : employee.getJobtitleName()) + .hiredate(SalaryDateUtil.getFormatLocalDate(employee.getCompanystartdate())) + .mobile(employee.getMobile()) + .taxAgent(taxAgent) + .build(); + baseInfo.put("employee", build); + + List> salaryItems = Lists.newArrayList(); + // 获取所有可被引用的薪资项目 + List salaryItemList = salaryArchiveItemService.getCanAdjustSalaryItems(); + Collection salaryItemIds = salaryItemList.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); + List salaryArchiveItemList = salaryArchiveService.getCurrentEffectiveItemList(Collections.singletonList(salaryArchiveId), salaryItemIds); + salaryArchiveItemList.forEach(m -> { + Optional optionalItem = salaryItemList.stream().filter(f -> f.getId().equals(m.getSalaryItemId())).findFirst(); + if (optionalItem.isPresent()) { + Map salaryItemMap = new LinkedHashMap<>(); + salaryItemMap.put("id", m.getId()); + salaryItemMap.put("name", optionalItem.get().getName()); + salaryItemMap.put("value", m.getItemValue()); + salaryItems.add(salaryItemMap); + } + }); + + return SalaryArchiveFormDTO.builder() + .id(salaryArchiveId) + .employeeId(employee.getEmployeeId()) + .baseInfo(baseInfo) + .adjustSalaryItems(salaryItems) + .build(); + } + + + /** + * 获取离职时段设置表单 + * + * @return + */ + public Map getDimissionSetForm() { + List dimissionSets = salaryArchiveService.dimissionSets(); + Map data = new LinkedHashMap<>(); + if (CollectionUtils.isNotEmpty(dimissionSets)) { + data.put("dimissionTimeInterval", dimissionSets.get(0).getDimissionTimeInterval()); + } + return data; + } + + /** + * 保存离职时段设置 + * + * @param saveParam + * @return + */ + public String saveDimissionSet(SalaryArchiveDimissionSaveParam saveParam) { + return salaryArchiveService.saveDimissionSet(saveParam); + } + + public List> getImportTypes() { + List> importTypes = Arrays.stream(SalaryArchiveImportTypeEnum.values()).map(m -> { + Map map = new HashMap<>(2); + map.put("id", String.valueOf(m.getValue())); + map.put("content", SalaryI18nUtil.getI18nLabel( m.getLabelId(), m.getDefaultLabel())); + return map; + }).collect(Collectors.toList()); + return importTypes; + } + // /** // * 导出薪资档案 // *