diff --git a/src/com/api/salary/web/SalaryStatisticsEmployeeController.java b/src/com/api/salary/web/SalaryStatisticsEmployeeController.java new file mode 100644 index 000000000..92902b46f --- /dev/null +++ b/src/com/api/salary/web/SalaryStatisticsEmployeeController.java @@ -0,0 +1,8 @@ +package com.api.salary.web; + +import javax.ws.rs.Path; + +@Path("/bs/hrmsalary/report/statistics/employee") +public class SalaryStatisticsEmployeeController extends com.engine.salary.report.web.SalaryStatisticsEmployeeController{ + +} diff --git a/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.java b/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.java index 8a7ddab42..65913ab29 100644 --- a/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.java +++ b/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.java @@ -68,5 +68,6 @@ public interface SalaryStatisticsItemMapper { * @param ids 主键id集合 */ void deleteByIds(@Param("ids") Collection ids); - + + void deleteByReportIds(@Param("reportIds") List reportIds); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.xml b/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.xml index 94fde1d06..68d44970b 100644 --- a/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.xml +++ b/src/com/engine/salary/mapper/report/SalaryStatisticsItemMapper.xml @@ -340,5 +340,14 @@ + + UPDATE hrsa_salary_statistics_item + SET delete_type = 1 + WHERE delete_type = 0 + AND stat_report_id IN + + #{reportIds} + + \ No newline at end of file diff --git a/src/com/engine/salary/report/entity/bo/SalaryStatisticsEmployeeBO.java b/src/com/engine/salary/report/entity/bo/SalaryStatisticsEmployeeBO.java index 0067e1cff..470c0690e 100644 --- a/src/com/engine/salary/report/entity/bo/SalaryStatisticsEmployeeBO.java +++ b/src/com/engine/salary/report/entity/bo/SalaryStatisticsEmployeeBO.java @@ -1,14 +1,10 @@ package com.engine.salary.report.entity.bo; +import com.engine.salary.util.SalaryDateUtil; import com.google.common.collect.Sets; import org.apache.commons.collections4.CollectionUtils; -import java.time.YearMonth; -import java.time.format.DateTimeFormatter; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; /** @@ -23,12 +19,12 @@ public class SalaryStatisticsEmployeeBO { * @param salaryMonth * @return */ - public static Set getSalaryMonths(Integer year, List salaryMonth) { + public static Set getSalaryMonths(Integer year, List salaryMonth) { Set salaryMonths = Sets.newHashSet(); // 年份参数 if (Objects.nonNull(year)) { List months = Arrays.asList("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"); - for (int i=0;i 2 ? salaryMonth.subList(0, 1) : salaryMonth); if (salaryMonth.size() == 2) { - if (salaryMonth.get(0).isAfter(salaryMonth.get(1))) { + if (salaryMonth.get(0).after(salaryMonth.get(1))) { salaryMonths.clear(); salaryMonths.add("2000-01"); } else { - YearMonth startYearMonth = salaryMonth.get(0); - YearMonth endYearMonth = salaryMonth.get(1); + Date startYearMonth = salaryMonth.get(0); + Date endYearMonth = salaryMonth.get(1); Set yearMonths = Sets.newHashSet(); - while (!startYearMonth.isAfter(endYearMonth)) { - yearMonths.add(startYearMonth.format(DateTimeFormatter.ofPattern("yyyy-MM"))); - startYearMonth = startYearMonth.plusMonths(1); + while (!startYearMonth.after(endYearMonth)) { + yearMonths.add(SalaryDateUtil.getFormatYearMonth(startYearMonth)); + startYearMonth = SalaryDateUtil.plusMonths(startYearMonth, 1); } if (CollectionUtils.isNotEmpty(salaryMonths)) { Set finalSalaryMonths = salaryMonths; @@ -56,7 +52,7 @@ public class SalaryStatisticsEmployeeBO { } } } else { - String singMonth = salaryMonth.get(0).format(DateTimeFormatter.ofPattern("yyyy-MM")); + String singMonth = SalaryDateUtil.getFormatYearMonth(salaryMonth.get(0)); salaryMonths.add(CollectionUtils.isNotEmpty(salaryMonths) ? (salaryMonths.contains(singMonth) ? singMonth : "2000-01") : singMonth); } } diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeListDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeListDTO.java index 6c7e5ca80..791c01c30 100644 --- a/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeListDTO.java +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsEmployeeListDTO.java @@ -1,5 +1,6 @@ package com.engine.salary.report.entity.dto; +import com.engine.salary.annotation.TableTitle; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.AllArgsConstructor; @@ -21,24 +22,31 @@ public class SalaryStatisticsEmployeeListDTO { private Long id; //姓名 + @TableTitle(title = "姓名", dataIndex = "name", key = "name") private String name; //分部 + @TableTitle(title = "分部", dataIndex = "subCompany", key = "subCompany") private String subCompany; //部门 + @TableTitle(title = "部门", dataIndex = "department", key = "department") private String department; //岗位 + @TableTitle(title = "岗位", dataIndex = "position", key = "position") private String position; // 员工状态 + @TableTitle(title = "员工状态", dataIndex = "status", key = "status") private String status; //工号 + @TableTitle(title = "工号", dataIndex = "jobNum", key = "jobNum") private String jobNum; //证件号码 + @TableTitle(title = "证件号码", dataIndex = "idNo", key = "idNo") private String idNo; //人员类型 diff --git a/src/com/engine/salary/report/entity/param/BaseQueryParam.java b/src/com/engine/salary/report/entity/param/BaseQueryParam.java deleted file mode 100644 index 99b9b4981..000000000 --- a/src/com/engine/salary/report/entity/param/BaseQueryParam.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.engine.salary.report.entity.param; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -//分页参数 -public class BaseQueryParam { - - //当前页码 - private Integer current = 1; - - //每页数据条数 - private Integer pageSize = 10; - - //总条数 - private Integer total = 0; -} diff --git a/src/com/engine/salary/report/entity/param/SalaryAcctEmployeeQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryAcctEmployeeQueryParam.java index e3f721b2c..fb4131bb4 100644 --- a/src/com/engine/salary/report/entity/param/SalaryAcctEmployeeQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryAcctEmployeeQueryParam.java @@ -5,7 +5,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.YearMonth; +import java.util.Date; import java.util.List; /** @@ -30,5 +30,5 @@ public class SalaryAcctEmployeeQueryParam { private Integer year; //薪资所属月") - private List salaryMonth; + private List salaryMonth; } \ No newline at end of file diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeDetailQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeDetailQueryParam.java index 6d8937669..08080aa1c 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeDetailQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeDetailQueryParam.java @@ -1,11 +1,12 @@ package com.engine.salary.report.entity.param; +import com.engine.salary.common.BaseQueryParam; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.YearMonth; +import java.util.Date; import java.util.List; /** @@ -39,5 +40,5 @@ public class SalaryStatisticsEmployeeDetailQueryParam extends BaseQueryParam { private Integer year; //薪资所属月 - private List salaryMonth; + private List salaryMonth; } \ No newline at end of file diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java index ff1afbdb2..2a13d43de 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsEmployeeQueryParam.java @@ -1,12 +1,13 @@ package com.engine.salary.report.entity.param; +import com.engine.salary.common.BaseQueryParam; import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.YearMonth; +import java.util.Date; import java.util.List; /** @@ -31,7 +32,7 @@ public class SalaryStatisticsEmployeeQueryParam extends BaseQueryParam { private Integer year; //薪资所属月") - private List salaryMonth; + private List salaryMonth; //人员类型,ORGANIZATION:内部人员 |EXT_EMPLOYEE:外部人员") private EmployeeTypeEnum employeeType; diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java index 121d4183d..3874c0cac 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java @@ -1,5 +1,6 @@ package com.engine.salary.report.entity.param; +import com.engine.salary.common.BaseQueryParam; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportQueryParam.java index 1fa43d8f9..dc9a61bb8 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportQueryParam.java @@ -1,5 +1,6 @@ package com.engine.salary.report.entity.param; +import com.engine.salary.common.BaseQueryParam; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/src/com/engine/salary/report/entity/param/SubTableDataQueryParam.java b/src/com/engine/salary/report/entity/param/SubTableDataQueryParam.java index 0e0c0102a..2ff0c8bb8 100644 --- a/src/com/engine/salary/report/entity/param/SubTableDataQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SubTableDataQueryParam.java @@ -1,5 +1,6 @@ package com.engine.salary.report.entity.param; +import com.engine.salary.common.BaseQueryParam; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/src/com/engine/salary/report/entity/param/TaxAgentQueryParam.java b/src/com/engine/salary/report/entity/param/TaxAgentQueryParam.java index 253e5f81a..3c75632a5 100644 --- a/src/com/engine/salary/report/entity/param/TaxAgentQueryParam.java +++ b/src/com/engine/salary/report/entity/param/TaxAgentQueryParam.java @@ -1,5 +1,6 @@ package com.engine.salary.report.entity.param; +import com.engine.salary.common.BaseQueryParam; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/src/com/engine/salary/report/enums/UnitTypeEnum.java b/src/com/engine/salary/report/enums/UnitTypeEnum.java index f1e008d40..7b93dfca9 100644 --- a/src/com/engine/salary/report/enums/UnitTypeEnum.java +++ b/src/com/engine/salary/report/enums/UnitTypeEnum.java @@ -6,7 +6,14 @@ public enum UnitTypeEnum implements BaseEnum { REN(1, 157087, "人"), YUAN(2, 152739, "元"), QIAN(3, 157088, "千"), - BAIWAN(4, 152745, "百万"); + WAN(5, 152745, "万"), + BAIWAN(4, 152745, "百万"), + day(6, 152745, "天"), + month(7, 152745, "月"), + year(8, 152745, "年"), + second(9, 152745, "秒"), + minute(10, 152745, "分钟"), + hour(11, 152745, "小时"); private Integer value; diff --git a/src/com/engine/salary/report/service/SalaryStatisticsEmployeeService.java b/src/com/engine/salary/report/service/SalaryStatisticsEmployeeService.java new file mode 100644 index 000000000..23b52f4b3 --- /dev/null +++ b/src/com/engine/salary/report/service/SalaryStatisticsEmployeeService.java @@ -0,0 +1,54 @@ +package com.engine.salary.report.service; + +import com.engine.salary.report.entity.dto.SalaryStatisticsEmployeeDetailResultDTO; +import com.engine.salary.report.entity.dto.SalaryStatisticsEmployeeListDTO; +import com.engine.salary.report.entity.param.SalaryStatisticsEmployeeDetailQueryParam; +import com.engine.salary.report.entity.param.SalaryStatisticsEmployeeQueryParam; +import com.engine.salary.util.page.PageInfo; + +import java.util.List; +import java.util.Map; + +/** + * 薪酬统计员工明细 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public interface SalaryStatisticsEmployeeService { + + /** + * 获取员工统计分页列表 + * + * @param queryParam + * @return + */ + PageInfo listPage(SalaryStatisticsEmployeeQueryParam queryParam); + + /** + * 获取员工明细结果数据 + * + * @param queryParam + * @return + */ + SalaryStatisticsEmployeeDetailResultDTO getDetailSalaryAcctResult(SalaryStatisticsEmployeeDetailQueryParam queryParam); + + /** + * 获取员工核算详情数据分页列表 + * + * @param salaryStatisticsEmployeeDetailResult + * @param queryParam + * @return + */ + List> listDetailPage(SalaryStatisticsEmployeeDetailResultDTO salaryStatisticsEmployeeDetailResult, SalaryStatisticsEmployeeDetailQueryParam queryParam); + + /** + * 导出员工详情列表 + * + * @param map + * @param queryParam + */ +// void exportDetailList(Map map, SalaryStatisticsEmployeeDetailQueryParam queryParam); +} diff --git a/src/com/engine/salary/report/service/SalaryStatisticsItemService.java b/src/com/engine/salary/report/service/SalaryStatisticsItemService.java index a576a75c7..52ab29e3f 100644 --- a/src/com/engine/salary/report/service/SalaryStatisticsItemService.java +++ b/src/com/engine/salary/report/service/SalaryStatisticsItemService.java @@ -54,4 +54,9 @@ public interface SalaryStatisticsItemService { */ void saveOrUpdateBatch(List salaryStatisticsItemList); + /** + * 根据报表id删除 + * @param reportIds + */ + void deleteByReportIds(List reportIds); } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java new file mode 100644 index 000000000..11760702b --- /dev/null +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java @@ -0,0 +1,348 @@ +package com.engine.salary.report.service.impl; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.mapper.salaryacct.SalaryAcctEmployeeMapper; +import com.engine.salary.report.common.constant.SalaryConstant; +import com.engine.salary.report.entity.bo.SalaryStatisticsEmployeeBO; +import com.engine.salary.report.entity.dto.SalaryStatisticsEmployeeDetailResultDTO; +import com.engine.salary.report.entity.dto.SalaryStatisticsEmployeeListDTO; +import com.engine.salary.report.entity.param.SalaryStatisticsEmployeeDetailQueryParam; +import com.engine.salary.report.entity.param.SalaryStatisticsEmployeeQueryParam; +import com.engine.salary.report.service.SalaryStatisticsEmployeeService; +import com.engine.salary.service.*; +import com.engine.salary.service.impl.*; +import com.engine.salary.util.SalaryAssert; +import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.MapperProxyFactory; +import com.engine.salary.util.page.PageInfo; +import com.engine.salary.util.page.SalaryPageUtil; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import weaver.hrm.User; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 薪酬统计员工明细 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Slf4j +public class SalaryStatisticsEmployeeServiceImpl extends Service implements SalaryStatisticsEmployeeService { + + private SalaryAcctEmployeeMapper getSalaryAcctEmployeeMapper() { + return MapperProxyFactory.getProxy(SalaryAcctEmployeeMapper.class); + } + + private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) { + return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user); + } + + private SalaryAcctResultService getSalaryAcctResultService(User user) { + return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); + } + + private SalaryItemService getSalaryItemService(User user) { + return ServiceUtil.getService(SalaryItemServiceImpl.class, user); + } + + +// private ExtEmployeeMapper extEmployeeMapper; + + private TaxAgentService getTaxAgentService(User user) { + return ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + + private SalaryEmployeeService getSalaryEmployeeService(User user) { + return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); + } + + @Override + public PageInfo listPage(SalaryStatisticsEmployeeQueryParam queryParam) { + List list = Collections.emptyList(); + PageInfo page = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list); + + // 1.分权处理, 首先获取个税扣缴义务人参数 + Collection taxAgentViews = getTaxAgentService(user).listAllTaxAgents((long) user.getUID()); + List taxAgentIds = Objects.isNull(taxAgentViews) ? Lists.newArrayList() : taxAgentViews.stream().map(TaxAgentPO::getId).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(taxAgentIds)) { + return page; + } + + // 2.年月参数处理,注意:薪资所属月居然是用字符串存储的,无法通过sql between处理 + Set salaryMonths = SalaryStatisticsEmployeeBO.getSalaryMonths(queryParam.getYear(), queryParam.getSalaryMonth()) + .stream() + .map(SalaryDateUtil::dateStrToLocalYearMonth) + .collect(Collectors.toSet()); + + // 查询薪资核算人员 + List salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listByTaxAgentAndSalaryMonth(taxAgentIds, salaryMonths); + if (CollectionUtils.isEmpty(salaryAcctEmployeeList)) { + return page; + } +// if (queryParam.getEmployeeType() != null) { +// salaryAcctEmployeeList = salaryAcctEmployeeList.stream().filter(s -> queryParam.getEmployeeType().getValue().equals(s.getEmployeeType())).collect(Collectors.toList()); +// } + +// // 外部人员id +// Set extEmployeeIds = Sets.newHashSet(); + // 内部人员id + Set innerEmployeeIds = Sets.newHashSet(); + for (SalaryAcctEmployeePO sae : salaryAcctEmployeeList) { +// if (EmployeeTypeEnum.EXT_EMPLOYEE.getValue().equals(sae.getEmployeeType())) { +// extEmployeeIds.add(sae.getEmployeeId()); +// } else if (EmployeeTypeEnum.ORGANIZATION.getValue().equals(sae.getEmployeeType())) { +// innerEmployeeIds.add(sae.getEmployeeId()); +// } + innerEmployeeIds.add(sae.getEmployeeId()); + } + // 3.关键字搜索参数 + if (StringUtils.isNotEmpty(queryParam.getKeyword())) { +// if (CollectionUtils.isNotEmpty(extEmployeeIds)) { +// // 查询外部人员 +// List extEmployeeList = new LambdaQueryChainWrapper<>(extEmployeeMapper) +// .eq(ExtEmployeePO::getTenantKey, tenantKey) +// .eq(ExtEmployeePO::getDeleteType, 0) +// .list(); +// Set finalExtEmployeeIds = extEmployeeIds; +// extEmployeeIds = extEmployeeList.stream() +// .filter(e -> finalExtEmployeeIds.contains(e.getId()) && (e.getUsername().contains(queryParam.getKeyword()) || (StringUtils.isNotEmpty(e.getCardNum()) && e.getCardNum().contains(queryParam.getKeyword())))) +// .map(ExtEmployeePO::getId) +// .collect(Collectors.toSet()); +// } + if (CollectionUtils.isNotEmpty(innerEmployeeIds)) { + List salaryEmployees = getSalaryEmployeeService(user).listAll(); + Set finalInnerEmployeeIds = innerEmployeeIds; + innerEmployeeIds = salaryEmployees.stream() + .filter(e -> finalInnerEmployeeIds.contains(e.getEmployeeId()) && (e.getUsername().contains(queryParam.getKeyword()) || (StringUtils.isNotEmpty(e.getWorkcode()) && e.getWorkcode().contains(queryParam.getKeyword())))) + .map(DataCollectionEmployee::getEmployeeId) + .collect(Collectors.toSet()); +// Map idNoMap = idNoMapByEmployeeIds(finalInnerEmployeeIds); +// for (Long k : idNoMap.keySet()) { +// if (idNoMap.get(k) != null && idNoMap.get(k).contains(queryParam.getKeyword())) { +// innerEmployeeIds.addAll(idNoMap.keySet()); +// } +// } + } + } + + List innerEmployeeIdList = innerEmployeeIds.stream().sorted(Comparator.comparing(e -> e)).collect(Collectors.toList()); +// List extEmployeeIdList = extEmployeeIds.stream().sorted(Comparator.comparing(e -> e)).collect(Collectors.toList()); + // 排序,内部员工优先 + list = innerEmployeeIdList.stream().map(e -> SalaryStatisticsEmployeeListDTO.builder() + .id(e) +// .employeeType(EmployeeTypeEnum.ORGANIZATION.getValue()) + .build()).collect(Collectors.toList()); +// list.addAll(extEmployeeIdList.stream().map(e -> SalaryStatisticsEmployeeListDTO.builder() +// .id(e) +// .employeeType(EmployeeTypeEnum.EXT_EMPLOYEE.getValue()) +// .build()).collect(Collectors.toList())); + + // 第一页数据显示处理 + page = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list, SalaryStatisticsEmployeeListDTO.class); + List salaryStatisticsEmployeeListDTOs = page.getList(); + List employeeIds = salaryStatisticsEmployeeListDTOs.stream().map(SalaryStatisticsEmployeeListDTO::getId).collect(Collectors.toList()); + // 查询外部人员 +// List extEmployeeList = CollectionUtils.isEmpty(extEmployeeIdList) ? Lists.newArrayList() : new LambdaQueryChainWrapper<>(extEmployeeMapper) +// .eq(ExtEmployeePO::getTenantKey, tenantKey) +// .eq(ExtEmployeePO::getDeleteType, 0) +// .in(ExtEmployeePO::getId, extEmployeeIdList) +// .list(); +// Map extEmployeeMap = extEmployeeList.stream().collect(Collectors.toMap(ExtEmployeePO::getId, v -> v)); + List simpleEmployeeList = getSalaryEmployeeService(user).getEmployeeByIds(employeeIds); + Map innerEmployeeMap = simpleEmployeeList.stream().collect(Collectors.toMap(DataCollectionEmployee::getEmployeeId, v -> v)); + salaryStatisticsEmployeeListDTOs.forEach(e -> { + DataCollectionEmployee simpleEmployee = innerEmployeeMap.get(e.getId()); + e.setName(Objects.isNull(simpleEmployee) ? "" : simpleEmployee.getUsername()); + e.setSubCompany(simpleEmployee.getSubcompanyName()); + e.setDepartment(simpleEmployee.getDepartmentName()); + e.setPosition(simpleEmployee.getJobtitleName()); + e.setStatus(simpleEmployee.getStatus()); + e.setJobNum(simpleEmployee.getWorkcode()); + e.setIdNo(simpleEmployee.getIdNo()); + }); + page.setList(salaryStatisticsEmployeeListDTOs); + return page; + } + + + @Override + public SalaryStatisticsEmployeeDetailResultDTO getDetailSalaryAcctResult(SalaryStatisticsEmployeeDetailQueryParam queryParam) { + SalaryAssert.notNull(queryParam.getEmployeeId(), SalaryI18nUtil.getI18nLabel(163974, "人员id不能为空")); + + // 薪资所属月参数,如果已经有年的就取交集 + Set salaryMonths = SalaryStatisticsEmployeeBO.getSalaryMonths(queryParam.getYear(), queryParam.getSalaryMonth()).stream().map(SalaryDateUtil::dateStrToLocalYearMonth).collect(Collectors.toSet()); + + // 1.获取该员工所有核算人员数据 + SalaryAcctEmployeePO build = SalaryAcctEmployeePO.builder().employeeId(queryParam.getEmployeeId()).build(); + if (CollectionUtils.isNotEmpty(queryParam.getIds())) { + build.setIds(queryParam.getIds()); + } + if (CollectionUtils.isNotEmpty(salaryMonths)) { + build.setSalaryMonths(salaryMonths); + } + if (Objects.nonNull(queryParam.getTaxAgentId())) { + build.setTaxAgentId(queryParam.getTaxAgentId()); + } + List salaryAcctEmployees = getSalaryAcctEmployeeMapper().listSome(build); + salaryAcctEmployees = salaryAcctEmployees.stream().sorted(Comparator.comparing(SalaryAcctEmployeePO::getSalaryMonth)).collect(Collectors.toList()); + Collections.reverse(salaryAcctEmployees); + + // 2.获取核算结果数据 + Set salaryAcctEmployeeIds = salaryAcctEmployees.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toSet()); + List salaryAcctResultValues = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); + + // 3.获取薪资项目 + Map resultMap = Maps.newHashMap(); + salaryAcctResultValues.forEach(sv -> { + resultMap.put(sv.getSalaryItemId() + "", sv.getResultValue()); + }); + List salaryItemIds = resultMap.keySet().stream().map(Long::valueOf).collect(Collectors.toList()); + List salaryItemList = CollectionUtils.isEmpty(salaryItemIds) ? Lists.newArrayList() : getSalaryItemService(user).listByIds(salaryItemIds); + + return SalaryStatisticsEmployeeDetailResultDTO.builder() + .salaryAcctEmployeeList(salaryAcctEmployees) + .salaryAcctResultValueList(salaryAcctResultValues) + .salaryItemList(salaryItemList) + .build(); + } + + @Override + public List> listDetailPage(SalaryStatisticsEmployeeDetailResultDTO salaryStatisticsEmployeeDetailResult, SalaryStatisticsEmployeeDetailQueryParam queryParam) { + + List taxAgentList = getTaxAgentService(user).listAll(); + Map taxAgentMap = SalaryEntityUtil.convert2Map(taxAgentList, TaxAgentPO::getId, TaxAgentPO::getName); + + Map> acctResultValueList = SalaryEntityUtil.group2Map(salaryStatisticsEmployeeDetailResult.getSalaryAcctResultValueList(), SalaryAcctResultPO::getSalaryAcctEmpId); + Map> acctResultValueMap = new HashMap<>(); + acctResultValueList.forEach((k, v) -> { + Map map = new HashMap(); + v.forEach(l -> { + map.put(l.getSalaryItemId() + "", l.getResultValue()); + }); + acctResultValueMap.put(k, map); + }); + + + List> list = Lists.newArrayList(); + Map map; + for (SalaryAcctEmployeePO se : salaryStatisticsEmployeeDetailResult.getSalaryAcctEmployeeList()) { + map = Maps.newHashMap(); + Map resultValueMap = Optional.ofNullable(acctResultValueMap.get(se.getId())).orElse(Maps.newHashMap()); + Map finalMap = map; + resultValueMap.forEach((k, v) -> { + finalMap.put(k + SalaryConstant.DYNAMIC_SUFFIX, v); + }); + map.put("id", se.getId().toString()); + map.put("salaryMonth", se.getSalaryMonth()); + map.put("taxAgent", taxAgentMap.get(se.getTaxAgentId())); +// IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(Integer.parseInt(se.getIncomeCategory())); +// map.put("incomeCategory", Objects.isNull(incomeCategoryEnum) ? "" : SalaryI18nUtil.getI18nLabel(incomeCategoryEnum.getLabelId(), incomeCategoryEnum.getDefaultLabel())); + list.add(map); + } + return list; + } + +// @Override +// public void exportDetailList(Map map, SalaryStatisticsEmployeeDetailQueryParam queryParam) { +// DataCollectionEmployee employee = getSalaryEmployeeService(user).getEmployeeById(queryParam.getEmployeeId()); +// // 获取核算数据 +// SalaryStatisticsEmployeeDetailResultDTO salaryStatisticsEmployeeDetailResult; +// if (Objects.isNull(employee)) { +// salaryStatisticsEmployeeDetailResult = SalaryStatisticsEmployeeDetailResultDTO.builder() +// .salaryAcctEmployeeList(Lists.newArrayList()) +// .salaryAcctResultValueList(Lists.newArrayList()) +// .salaryItemList(Lists.newArrayList()) +// .build(); +// } else { +// salaryStatisticsEmployeeDetailResult = this.getDetailSalaryAcctResult(queryParam); +// } +// +// String nameI18n = (StringUtils.isEmpty(employee.getUsername()) ? "" : "[" + employee.getUsername() + "]") + SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 177855, "薪资明细表"); +// +// List sheetList = new ArrayList<>(); +// ExcelSheetData excelSheetData = new ExcelSheetData(); +// // 1.工作簿名称 +// excelSheetData.setSheetName(nameI18n); +// List headerList = Lists.newArrayList(); +// headerList.add(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 87614, "薪资所属月")); +// headerList.add(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 86184, "个税扣缴义务人")); +// headerList.add(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 121908, "收入所得项目")); +// salaryStatisticsEmployeeDetailResult.getSalaryItemList().forEach(item -> headerList.add(item.getName())); +// // 2.表头 +// excelSheetData.setHeaders(Collections.singletonList(headerList.toArray(new String[]{}))); +// +// List taxAgentList = getTaxAgentService(user).listAll(tenantKey); +// Map taxAgentMap = SalaryEntityUtil.convert2Map(taxAgentList, TaxAgentPO::getId, TaxAgentPO::getName); +// +// Map> acctResultValueMap = SalaryEntityUtil.convert2Map(salaryStatisticsEmployeeDetailResult.getSalaryAcctResultValueList(), SalaryAcctResultPO::getSalaryAcctEmployeeId, SalaryAcctResultPO::getResultValue); +// +// // 组装数据 +// List> rows = new ArrayList<>(); +// for (SalaryAcctEmployeePO se : salaryStatisticsEmployeeDetailResult.getSalaryAcctEmployeeList()) { +// if (CollectionUtils.isNotEmpty(queryParam.getIds()) && !queryParam.getIds().contains(se.getId())) { +// continue; +// } +// List row = new ArrayList<>(); +// row.add(se.getSalaryMonth()); +// row.add(taxAgentMap.get(se.getTaxAgentId())); +// IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(Integer.parseInt(se.getIncomeCategory())); +// row.add(Objects.isNull(incomeCategoryEnum) ? "" : SalaryI18nUtil.getI18nLabel(incomeCategoryEnum.getLabelId(), incomeCategoryEnum.getDefaultLabel())); +// // 薪资项目 +// Map resultValueMap = Optional.ofNullable(acctResultValueMap.get(se.getId())).orElse(Maps.newHashMap()); +// salaryStatisticsEmployeeDetailResult.getSalaryItemList().forEach(item -> row.add(Optional.ofNullable(resultValueMap.get(item.getId().toString())).orElse(""))); +// +// rows.add(row); +// } +// if (CollectionUtils.isNotEmpty(rows)) { +// List countRow = new ArrayList<>(); +// countRow.add(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 93278, "合计")); +// countRow.add("-"); +// countRow.add("-"); +// +// for (int i = 3; i < headerList.size(); i++) { +// BigDecimal sumBigDecimal = new BigDecimal(SalaryStatisticsReportBO.D_ZERO); +// for (List row : rows) { +// sumBigDecimal = sumBigDecimal.add(new BigDecimal(StringUtils.isEmpty(row.get(i).toString()) ? SalaryStatisticsReportBO.ZERO : row.get(i).toString())); +// } +// countRow.add(sumBigDecimal.toString()); +// } +// rows.add(countRow); +// } +// +// // 3.表数据 +// excelSheetData.setRows(rows); +// +// sheetList.add(excelSheetData); +// +// salaryBatchService.simpleExportExcel(ExportExcelInfo.builder() +//// .sharePassword(queryParam.getSharePassword()) +// .bizId(map.get("biz").toString()) +// .flag(true) +// .userId(employeeId) +// .eteamsId(map.get("eteamsId").toString()) +// .tenantKey(tenantKey) +// .operator(map.get("username").toString()) +// .module(map.get("module").toString()) +// .fileName(nameI18n + ReportTimeUtil.getFormatLocalDateTime(LocalDateTime.now())) +// .handlerName("exportSalaryStatisticsEmployeeDetailList") +// .dataType(nameI18n) +// .function("exportSalaryStatisticsEmployeeDetailList").build(), sheetList); +// } +} diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java index 711d62428..72846cd1f 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsItemServiceImpl.java @@ -1,6 +1,5 @@ package com.engine.salary.report.service.impl; -import com.alibaba.fastjson.JSON; import com.engine.core.impl.Service; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.enums.sicategory.DeleteTypeEnum; @@ -11,6 +10,7 @@ import com.engine.salary.report.entity.po.SalaryStatisticsItemPO; import com.engine.salary.report.enums.UnitTypeEnum; import com.engine.salary.report.service.SalaryStatisticsItemService; import com.engine.salary.util.SalaryAssert; +import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; import dm.jdbc.util.IdGenerator; @@ -110,12 +110,12 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) .itemName(saveParam.getItemName()) .itemValue(StringUtils.join(saveParam.getItemValue(), ",")) - .countRule(JSON.toJSONString(saveParam.getCountRule())) - .sumRule(JSON.toJSONString(saveParam.getSumRule())) - .avgRule(JSON.toJSONString(saveParam.getAvgRule())) - .maxRule(JSON.toJSONString(saveParam.getMaxRule())) - .minRule(JSON.toJSONString(saveParam.getMinRule())) - .medianRule(JSON.toJSONString(saveParam.getMedianRule())) + .countRule(SalaryEntityUtil.toJSONString(saveParam.getCountRule())) + .sumRule(SalaryEntityUtil.toJSONString(saveParam.getSumRule())) + .avgRule(SalaryEntityUtil.toJSONString(saveParam.getAvgRule())) + .maxRule(SalaryEntityUtil.toJSONString(saveParam.getMaxRule())) + .minRule(SalaryEntityUtil.toJSONString(saveParam.getMinRule())) + .medianRule(SalaryEntityUtil.toJSONString(saveParam.getMedianRule())) .indexValue(max + 1) .statReportId(saveParam.getStatReportId()) .unitType(saveParam.getUnitType() == null ? UnitTypeEnum.YUAN.getValue() : saveParam.getUnitType()) @@ -143,12 +143,12 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt itemPO.setUnitType(saveParam.getUnitType()); } else { itemPO.setItemValue(StringUtils.join(saveParam.getItemValue(), ",")); - itemPO.setCountRule(Objects.nonNull(saveParam.getCountRule()) ? JSON.toJSONString(saveParam.getCountRule()) : ""); - itemPO.setSumRule(Objects.nonNull(saveParam.getSumRule()) ? JSON.toJSONString(saveParam.getSumRule()) : ""); - itemPO.setAvgRule(Objects.nonNull(saveParam.getAvgRule()) ? JSON.toJSONString(saveParam.getAvgRule()) : ""); - itemPO.setMaxRule(Objects.nonNull(saveParam.getMaxRule()) ? JSON.toJSONString(saveParam.getMaxRule()) : ""); - itemPO.setMinRule(Objects.nonNull(saveParam.getMinRule()) ? JSON.toJSONString(saveParam.getMinRule()) : ""); - itemPO.setMedianRule(Objects.nonNull(saveParam.getMedianRule()) ? JSON.toJSONString(saveParam.getMedianRule()) : ""); + itemPO.setCountRule(SalaryEntityUtil.toJSONString(saveParam.getCountRule())); + itemPO.setSumRule(SalaryEntityUtil.toJSONString(saveParam.getSumRule())); + itemPO.setAvgRule(SalaryEntityUtil.toJSONString(saveParam.getAvgRule())); + itemPO.setMaxRule(SalaryEntityUtil.toJSONString(saveParam.getMaxRule())); + itemPO.setMinRule(SalaryEntityUtil.toJSONString(saveParam.getMinRule())); + itemPO.setMedianRule(SalaryEntityUtil.toJSONString(saveParam.getMedianRule())); } getSalaryStatisticsItemMapper().updateIgnoreNull(itemPO); @@ -171,10 +171,15 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt Long id = po.getId(); SalaryStatisticsItemPO item = getSalaryStatisticsItemMapper().getById(id); if (item == null) { - getSalaryStatisticsItemMapper().insertIgnoreNull(item); + getSalaryStatisticsItemMapper().insertIgnoreNull(po); } else { - getSalaryStatisticsItemMapper().update(item); + getSalaryStatisticsItemMapper().update(po); } }); } + + @Override + public void deleteByReportIds(List reportIds) { + getSalaryStatisticsItemMapper().deleteByReportIds(reportIds); + } } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 302885e35..44e1c4561 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -288,9 +288,10 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary int success = list.size(); if (success > 0) { List deleteIds = list.stream().map(SalaryStatisticsReportPO::getId).collect(Collectors.toList()); + //删除报表 getSalaryStatisticsReportMapper().deleteByIds(deleteIds); - - + //删除薪资项 + getSalaryStatisticsItemService(user).deleteByReportIds(deleteIds); // list.forEach(e -> { // // 记录日志 // LoggerContext loggerContext = new LoggerContext<>(); diff --git a/src/com/engine/salary/report/web/SalaryStatisticsEmployeeController.java b/src/com/engine/salary/report/web/SalaryStatisticsEmployeeController.java new file mode 100644 index 000000000..23571d9e8 --- /dev/null +++ b/src/com/engine/salary/report/web/SalaryStatisticsEmployeeController.java @@ -0,0 +1,77 @@ +package com.engine.salary.report.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.salary.report.entity.dto.SalaryStatisticsEmployeeListDTO; +import com.engine.salary.report.entity.param.SalaryStatisticsEmployeeDetailQueryParam; +import com.engine.salary.report.entity.param.SalaryStatisticsEmployeeQueryParam; +import com.engine.salary.report.wrapper.SalaryStatisticsEmployeeWrapper; +import com.engine.salary.util.ResponseResult; +import com.engine.salary.util.page.PageInfo; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +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.Map; + +/** + * 薪酬统计员工明细 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public class SalaryStatisticsEmployeeController { + + private SalaryStatisticsEmployeeWrapper getSalaryStatisticsEmployeeWrapper(User user) { + return ServiceUtil.getService(SalaryStatisticsEmployeeWrapper.class, user); + } + + /** + * 员工列表 + * + * @param queryParam + * @return + */ + @POST + @Path("/list") + @Produces(MediaType.APPLICATION_JSON) + public String list(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsEmployeeQueryParam queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryStatisticsEmployeeWrapper(user)::list, queryParam); + } + + /** + * 员工详情列表 + * + * @param queryParam + * @return + */ + @POST + @Path("/detailList") + @Produces(MediaType.APPLICATION_JSON) + public String detailList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsEmployeeDetailQueryParam queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryStatisticsEmployeeWrapper(user)::detailList, queryParam); + } + +// /** +// * 导出员工详情列表 +// * +// * @param queryParam +// * @return +// */ +// @PostMapping("/exportDetailList") +// @ApiOperation("导出员工详情列表") +// @WeaPermission(publicPermission = true) +// public WeaResult> exportDetailList(@RequestBody SalaryStatisticsEmployeeDetailQueryParam queryParam) { +// return WeaResult.success(getSalaryStatisticsEmployeeWrapper(user).exportDetailList(queryParam, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey())); +// } +} diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java new file mode 100644 index 000000000..31fc2d0e5 --- /dev/null +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java @@ -0,0 +1,129 @@ +package com.engine.salary.report.wrapper; + +import com.cloudstore.eccom.pc.table.WeaTableColumn; +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.report.common.constant.SalaryConstant; +import com.engine.salary.report.entity.bo.SalaryStatisticsReportBO; +import com.engine.salary.report.entity.dto.SalaryStatisticsEmployeeDetailResultDTO; +import com.engine.salary.report.entity.dto.SalaryStatisticsEmployeeListDTO; +import com.engine.salary.report.entity.param.SalaryStatisticsEmployeeDetailQueryParam; +import com.engine.salary.report.entity.param.SalaryStatisticsEmployeeQueryParam; +import com.engine.salary.report.service.SalaryStatisticsEmployeeService; +import com.engine.salary.report.service.impl.SalaryStatisticsEmployeeServiceImpl; +import com.engine.salary.report.util.ReportDataUtil; +import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.page.PageInfo; +import com.engine.salary.util.page.SalaryPageUtil; +import com.google.common.collect.Maps; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import weaver.hrm.User; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * 薪酬统计员工明细 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public class SalaryStatisticsEmployeeWrapper extends Service { + + private SalaryStatisticsEmployeeService getSalaryStatisticsEmployeeService(User user) { + return ServiceUtil.getService(SalaryStatisticsEmployeeServiceImpl.class, user); + } + /** + * 员工列表 + * + * @param queryParam + * @return + */ + public PageInfo list(SalaryStatisticsEmployeeQueryParam queryParam) { + PageInfo page = getSalaryStatisticsEmployeeService(user).listPage(queryParam); + return page; + } + + /** + * 员工详情列表 + * + * @param queryParam + * @return + */ + public Map detailList(SalaryStatisticsEmployeeDetailQueryParam queryParam) { + // 获取核算数据 + SalaryStatisticsEmployeeDetailResultDTO salaryStatisticsEmployeeDetailResult = getSalaryStatisticsEmployeeService(user).getDetailSalaryAcctResult(queryParam); + List> records = getSalaryStatisticsEmployeeService(user).listDetailPage(salaryStatisticsEmployeeDetailResult, queryParam); + + Map countResultMap = Maps.newHashMap(); + countResultMap.put("id", "1000000"); + countResultMap.put("salaryMonth", "-"); + countResultMap.put("taxAgent", "-"); + countResultMap.put("incomeCategory", "-"); + if (CollectionUtils.isNotEmpty(records)) { + List salaryItems = salaryStatisticsEmployeeDetailResult.getSalaryItemList(); + for (SalaryItemPO item : salaryItems) { + BigDecimal sumBigDecimal = new BigDecimal(SalaryStatisticsReportBO.ZERO); + String itemKey = item.getId() + SalaryConstant.DYNAMIC_SUFFIX; + for (Map record : records) { + if (record.containsKey(itemKey)) { + if (Objects.nonNull(record.get(itemKey)) && StringUtils.isNotEmpty(record.get(itemKey).toString())) { + sumBigDecimal = sumBigDecimal.add(new BigDecimal(record.get(itemKey).toString())); + record.put(itemKey, ReportDataUtil.thousandthConvert(record.get(itemKey).toString())); + } + } + } + countResultMap.put(itemKey, ReportDataUtil.thousandthConvert(sumBigDecimal.toString())); + } + } + PageInfo> pageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), records); + + // 列表columns + List weaTableColumns = buildDetailTableColumns(salaryStatisticsEmployeeDetailResult); + + // 结果 + Map resultMap = Maps.newHashMap(); + resultMap.put("columns", weaTableColumns); + resultMap.put("pageInfo", pageInfo); + return resultMap; + } + + private List buildDetailTableColumns(SalaryStatisticsEmployeeDetailResultDTO salaryStatisticsEmployeeDetailResult) { + // 表格表头 + List columns = new ArrayList<>(); + columns.add(new WeaTableColumn(SalaryI18nUtil.getI18nLabel( 87614, "薪资所属月"), "salaryMonth", "100")); + columns.add(new WeaTableColumn(SalaryI18nUtil.getI18nLabel( 86184, "个税扣缴义务人"), "taxAgent", "150")); + columns.add(new WeaTableColumn(SalaryI18nUtil.getI18nLabel( 121908, "收入所得项目"), "incomeCategory", "150")); + salaryStatisticsEmployeeDetailResult.getSalaryItemList().forEach(item -> { + columns.add(new WeaTableColumn(item.getName(), item.getId() + SalaryConstant.DYNAMIC_SUFFIX, "100")); + }); + return columns; + } + +// public Map exportDetailList(SalaryStatisticsEmployeeDetailQueryParam queryParam) { +// SalaryAssert.notNull(queryParam.getEmployeeId(), SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 163974, "人员id不能为空")); +// // 构建异步导出参数 +// Map map = salaryBatchService.buildeExportParam("exportSalaryStatisticsEmployeeDetailList"); +// LocalRunnable localRunnable = new LocalRunnable() { +// @Override +// public void execute() { +// try { +// DSTenantKeyThreadVar.tenantKey.set(currentTenantKey); +// getSalaryStatisticsEmployeeService(user).exportDetailList(map, queryParam); +// } finally { +// DSTenantKeyThreadVar.tenantKey.remove(); +// } +// } +// }; +// ThreadPoolUtil.execute(localRunnable); +// +// return map; +// } +} diff --git a/src/com/engine/salary/util/SalaryDateUtil.java b/src/com/engine/salary/util/SalaryDateUtil.java index 729bbd25c..af3eb35e2 100644 --- a/src/com/engine/salary/util/SalaryDateUtil.java +++ b/src/com/engine/salary/util/SalaryDateUtil.java @@ -585,6 +585,11 @@ public class SalaryDateUtil { ZoneId zoneOffset = StrUtil.isNotEmpty(offset) ? ZoneOffset.of(offset) : ZoneOffset.systemDefault(); return Date.from(dateTime.atZone(zoneOffset).toInstant()); } + + public static Date plusMonths(Date date, int i) { + LocalDate localDate = SalaryDateUtil.dateToLocalDate(date).plusMonths(i); + return SalaryDateUtil.localDateToDate(localDate); + } } diff --git a/src/com/engine/salary/util/SalaryEntityUtil.java b/src/com/engine/salary/util/SalaryEntityUtil.java index 695dc2c2e..3cc5fe7dd 100644 --- a/src/com/engine/salary/util/SalaryEntityUtil.java +++ b/src/com/engine/salary/util/SalaryEntityUtil.java @@ -1,5 +1,6 @@ package com.engine.salary.util; +import com.alibaba.fastjson.JSON; import com.engine.salary.enums.SalaryRoundingModeEnum; import com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -349,4 +350,12 @@ public class SalaryEntityUtil { return resultList; } + public static String toJSONString(Object obj) { + if (obj != null) { + return JSON.toJSONString(obj); + } + return ""; + } + + }