From 84ce2821f66cb94af8792414359062677b5e63ab Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 10 Jul 2024 14:01:09 +0800 Subject: [PATCH 1/6] =?UTF-8?q?1=E3=80=81=E5=AE=9A=E8=96=AA=E3=80=81?= =?UTF-8?q?=E8=BF=94=E8=81=98action=E4=BC=98=E5=8C=96=202=E3=80=81?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AF=BC=E5=87=BA=E6=97=B6excel=E4=B8=AD?= =?UTF-8?q?=E5=8F=8C=E5=87=BB=E5=8D=95=E5=85=83=E6=A0=BC=E5=8F=98=E6=88=90?= =?UTF-8?q?=E9=BB=91=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/action/CheckInitSalaryAction.java | 110 +++++++++++++---- .../salary/action/InitSalaryAction.java | 115 +++++++++++++----- .../engine/salary/action/RehireAction.java | 105 +++++++++------- .../bo/SalaryArchiveExcelBO.java | 12 +- .../mapper/archive/SalaryArchiveMapper.java | 8 ++ .../mapper/archive/SalaryArchiveMapper.xml | 7 ++ .../impl/SalaryArchiveExcelServiceImpl.java | 4 +- .../salary/util/excel/ExcelUtilPlus.java | 23 +++- 8 files changed, 276 insertions(+), 108 deletions(-) diff --git a/src/com/engine/salary/action/CheckInitSalaryAction.java b/src/com/engine/salary/action/CheckInitSalaryAction.java index d93217792..34dd5782a 100644 --- a/src/com/engine/salary/action/CheckInitSalaryAction.java +++ b/src/com/engine/salary/action/CheckInitSalaryAction.java @@ -2,11 +2,23 @@ package com.engine.salary.action; import com.engine.common.util.ServiceUtil; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam; +import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; +import com.engine.salary.entity.taxagent.param.TaxAgentQueryParam; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum; +import com.engine.salary.mapper.archive.SalaryArchiveMapper; +import com.engine.salary.service.SalaryArchiveService; +import com.engine.salary.service.TaxAgentService; +import com.engine.salary.service.impl.SalaryArchiveServiceImpl; +import com.engine.salary.service.impl.TaxAgentServiceImpl; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.wrapper.SalaryArchiveWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; import weaver.conn.RecordSet; import weaver.general.Util; import weaver.hrm.User; @@ -25,6 +37,18 @@ public class CheckInitSalaryAction implements Action { return ServiceUtil.getService(SalaryArchiveWrapper.class, user); } + private TaxAgentService getTaxAgentService(User user) { + return ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + + private SalaryArchiveService getSalaryArchiveService(User user) { + return ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); + } + + private SalaryArchiveMapper getSalaryArchiveMapper() { + return MapperProxyFactory.getProxy(SalaryArchiveMapper.class); + } + private String tableName; @@ -57,40 +81,72 @@ public class CheckInitSalaryAction implements Action { String value = fieldMap.get(processField); list.add(new SalaryField(processField, salaryName, value)); } - List> importData = new ArrayList<>(); Map importDataMap = SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue); - if(!importDataMap.containsKey("生效日期")){ - importDataMap.put("生效日期", SalaryDateUtil.getFormatDate(new Date())); - } - if(!importDataMap.containsKey("最后发薪日期")){ - importDataMap.put("最后发薪日期", ""); - } - importData.add(importDataMap); - SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() - .importDatas(importData) - .build(); - - //操作人 - String uid = list.stream().filter(f -> f.salaryName.equals("操作人")).findFirst().map(SalaryField::getValue).orElse("1"); - Map map = getSalaryArchiveWrapper(new User(Integer.parseInt(uid))).checkSalaryArchiveInit(build); - - List errorNotice = (List) map.get("errorNotice"); - if (CollectionUtils.isNotEmpty(errorNotice)) { - log.error("定薪检查存在异常 requestId:{} ,参数:{}, map:{}", requestInfo.getRequestid(), build, map); - List> excelComments = (List>) map.get("errorNotice"); - StringBuilder message = new StringBuilder(""); - for (Map comments : excelComments) { - message.append(comments.get("message")).append("\n"); - } - requestInfo.getRequestManager().setMessage(message.toString()); - return FAILURE_AND_CONTINUE; - } + return doSalaryArchiveInit(requestInfo, importDataMap); } catch (Exception e) { log.error("定薪检查异常", e); requestInfo.getRequestManager().setMessage(e.getMessage()); return FAILURE_AND_CONTINUE; } + } + + public String doSalaryArchiveInit(RequestInfo requestInfo, Map importDataMap) { + User user = new User(); + user.setLoginid("sysadmin"); + user.setUid(1); + List> importData = new ArrayList<>(); + if(!importDataMap.containsKey("生效日期")){ + importDataMap.put("生效日期", SalaryDateUtil.getFormatDate(new Date())); + } + if(!importDataMap.containsKey("最后发薪日期")){ + importDataMap.put("最后发薪日期", ""); + } + importData.add(importDataMap); + + // 首先判断是否已经存在薪资档案,且薪资档案状态为待定薪 + String taxAgentName = importDataMap.getOrDefault("个税扣缴义务人", "").toString(); + String empIdStr = importDataMap.getOrDefault("员工id", "").toString(); + if (StringUtils.isBlank(taxAgentName)) { + requestInfo.getRequestManager().setMessage("个税扣缴义务人不能为空"); + return FAILURE_AND_CONTINUE; + } + // 获取义务人信息 + List taxAgentPOS = getTaxAgentService(user).list(TaxAgentQueryParam.builder().name(taxAgentName).build()); + if (CollectionUtils.isEmpty(taxAgentPOS)) { + requestInfo.getRequestManager().setMessage("个税扣缴义务人不存在"); + return FAILURE_AND_CONTINUE; + } + Long taxAgentId = taxAgentPOS.get(0).getId(); + // 获取员工id + if (NumberUtils.isCreatable(empIdStr)) { + List salaryArchivePOList = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().taxAgentId(taxAgentId).employeeId(Long.valueOf(empIdStr)).build()); + if (CollectionUtils.isNotEmpty(salaryArchivePOList) && !salaryArchivePOList.get(0).getRunStatus().equals(SalaryArchiveStatusEnum.PENDING.getValue())) { + // 存在薪资档案,且薪资档案状态不是待定薪,修改状态为待定薪 + salaryArchivePOList.get(0).setRunStatus(SalaryArchiveStatusEnum.PENDING.getValue()); + salaryArchivePOList.get(0).setPayEndDate(null); + getSalaryArchiveMapper().update(salaryArchivePOList.get(0)); + } + } + + SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() + .importDatas(importData) + .build(); + + //操作人 + Map map = getSalaryArchiveWrapper(user).checkSalaryArchiveInit(build); + + List errorNotice = (List) map.get("errorNotice"); + if (CollectionUtils.isNotEmpty(errorNotice)) { + log.error("定薪检查存在异常 requestId:{} ,参数:{}, map:{}", requestInfo.getRequestid(), build, map); + List> excelComments = (List>) map.get("errorNotice"); + StringBuilder message = new StringBuilder(""); + for (Map comments : excelComments) { + message.append(comments.get("message")).append("\n"); + } + requestInfo.getRequestManager().setMessage(message.toString()); + return FAILURE_AND_CONTINUE; + } return SUCCESS; } diff --git a/src/com/engine/salary/action/InitSalaryAction.java b/src/com/engine/salary/action/InitSalaryAction.java index 4b2b0472b..3593dcb9b 100644 --- a/src/com/engine/salary/action/InitSalaryAction.java +++ b/src/com/engine/salary/action/InitSalaryAction.java @@ -2,11 +2,23 @@ package com.engine.salary.action; import com.engine.common.util.ServiceUtil; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam; +import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; +import com.engine.salary.entity.taxagent.param.TaxAgentQueryParam; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum; +import com.engine.salary.mapper.archive.SalaryArchiveMapper; +import com.engine.salary.service.SalaryArchiveService; +import com.engine.salary.service.TaxAgentService; +import com.engine.salary.service.impl.SalaryArchiveServiceImpl; +import com.engine.salary.service.impl.TaxAgentServiceImpl; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.wrapper.SalaryArchiveWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; import weaver.conn.RecordSet; import weaver.general.Util; import weaver.hrm.User; @@ -25,6 +37,18 @@ public class InitSalaryAction implements Action { return ServiceUtil.getService(SalaryArchiveWrapper.class, user); } + private SalaryArchiveService getSalaryArchiveService(User user) { + return ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); + } + + private TaxAgentService getTaxAgentService(User user) { + return ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + + private SalaryArchiveMapper getSalaryArchiveMapper() { + return MapperProxyFactory.getProxy(SalaryArchiveMapper.class); + } + private String tableName; @@ -39,12 +63,10 @@ public class InitSalaryAction implements Action { @Override public String execute(RequestInfo requestInfo) { try { - Property[] properties = requestInfo.getMainTableInfo().getProperty(); Map fieldMap = Arrays.stream(properties).collect(Collectors.toMap(Property::getName, property -> Util.null2String(property.getValue()))); - RecordSet rs = new RecordSet(); String queryImageId = "select salaryname,processfield from " + tableName + " where workflowid = ?"; @@ -57,44 +79,79 @@ public class InitSalaryAction implements Action { String value = fieldMap.get(processField); list.add(new SalaryField(processField, salaryName, value)); } - List> importData = new ArrayList<>(); + Map importDataMap = SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue); - if(!importDataMap.containsKey("生效日期")){ - importDataMap.put("生效日期", SalaryDateUtil.getFormatDate(new Date())); - } - if(!importDataMap.containsKey("最后发薪日期")){ - importDataMap.put("最后发薪日期", ""); - } - importData.add(importDataMap); - SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() - .importDatas(importData) - .build(); - - //操作人 - String uid = list.stream().filter(f -> f.salaryName.equals("操作人")).findFirst().map(SalaryField::getValue).orElse("1"); - Map map = getSalaryArchiveWrapper(new User(Integer.parseInt(uid))).importSalaryArchiveInit(build); - - List errorNotice = (List) map.get("errorNotice"); - if (CollectionUtils.isNotEmpty(errorNotice)) { - log.error("定薪存在异常 requestId:{} ,参数:{}, map:{}", requestInfo.getRequestid(), build, map); - List> excelComments = (List>) map.get("errorNotice"); - StringBuilder message = new StringBuilder(""); - for (Map comments : excelComments) { - message.append(comments.get("message")).append("\n"); - } - requestInfo.getRequestManager().setMessage(message.toString()); - return FAILURE_AND_CONTINUE; - } + return doSalaryArchiveInit(requestInfo, importDataMap); } catch (Exception e) { log.error("定薪异常", e); requestInfo.getRequestManager().setMessage(e.getMessage()); return FAILURE_AND_CONTINUE; } + } + + public String doSalaryArchiveInit(RequestInfo requestInfo, Map importDataMap) { + User user = new User(); + user.setLoginid("sysadmin"); + user.setUid(1); + List> importData = new ArrayList<>(); + if(!importDataMap.containsKey("生效日期")){ + importDataMap.put("生效日期", SalaryDateUtil.getFormatDate(new Date())); + } + if(!importDataMap.containsKey("最后发薪日期")){ + importDataMap.put("最后发薪日期", ""); + } + importData.add(importDataMap); + + // 首先判断是否已经存在薪资档案,且薪资档案状态为待定薪 + String taxAgentName = importDataMap.getOrDefault("个税扣缴义务人", "").toString(); + String empIdStr = importDataMap.getOrDefault("员工id", "").toString(); + if (StringUtils.isBlank(taxAgentName)) { + requestInfo.getRequestManager().setMessage("个税扣缴义务人不能为空"); + return FAILURE_AND_CONTINUE; + } + // 获取义务人信息 + List taxAgentPOS = getTaxAgentService(user).list(TaxAgentQueryParam.builder().name(taxAgentName).build()); + if (CollectionUtils.isEmpty(taxAgentPOS)) { + requestInfo.getRequestManager().setMessage("个税扣缴义务人不存在"); + return FAILURE_AND_CONTINUE; + } + Long taxAgentId = taxAgentPOS.get(0).getId(); + // 获取员工id + if (NumberUtils.isCreatable(empIdStr)) { + List salaryArchivePOList = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().taxAgentId(taxAgentId).employeeId(Long.valueOf(empIdStr)).build()); + if (CollectionUtils.isNotEmpty(salaryArchivePOList) && !salaryArchivePOList.get(0).getRunStatus().equals(SalaryArchiveStatusEnum.PENDING.getValue())) { + // 存在薪资档案,且薪资档案状态不是待定薪,修改状态为待定薪 + salaryArchivePOList.get(0).setRunStatus(SalaryArchiveStatusEnum.PENDING.getValue()); + salaryArchivePOList.get(0).setPayEndDate(null); + getSalaryArchiveMapper().update(salaryArchivePOList.get(0)); + } + } + + SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() + .importDatas(importData) + .build(); + + //操作人 + String uid = importDataMap.getOrDefault("操作人", "1").toString(); + Map map = getSalaryArchiveWrapper(new User(Integer.parseInt(uid))).importSalaryArchiveInit(build); + + List errorNotice = (List) map.get("errorNotice"); + if (CollectionUtils.isNotEmpty(errorNotice)) { + log.error("定薪存在异常 requestId:{} ,参数:{}, map:{}", requestInfo.getRequestid(), build, map); + List> excelComments = (List>) map.get("errorNotice"); + StringBuilder message = new StringBuilder(""); + for (Map comments : excelComments) { + message.append(comments.get("message")).append("\n"); + } + requestInfo.getRequestManager().setMessage(message.toString()); + return FAILURE_AND_CONTINUE; + } return SUCCESS; } + class SalaryField { private String processField; diff --git a/src/com/engine/salary/action/RehireAction.java b/src/com/engine/salary/action/RehireAction.java index d0acd6e27..ac236b54a 100644 --- a/src/com/engine/salary/action/RehireAction.java +++ b/src/com/engine/salary/action/RehireAction.java @@ -16,6 +16,7 @@ import com.engine.salary.service.TaxAgentService; import com.engine.salary.service.impl.SalaryArchiveServiceImpl; import com.engine.salary.service.impl.TaxAgentManageRangeServiceImpl; import com.engine.salary.service.impl.TaxAgentServiceImpl; +import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.wrapper.SalaryArchiveWrapper; @@ -89,9 +90,9 @@ public class RehireAction implements Action { String value = fieldMap.get(processField); list.add(new SalaryField(processField, salaryName, value)); } - Map salaryFieldMap = SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue); - String taxAgentName = salaryFieldMap.get("个税扣缴义务人"); - String empIdStr = salaryFieldMap.get("员工id"); + Map salaryFieldMap = SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue); + String taxAgentName = salaryFieldMap.getOrDefault("个税扣缴义务人", "").toString(); + String empIdStr = salaryFieldMap.getOrDefault("员工id", "").toString(); if (StringUtils.isBlank(taxAgentName) || StringUtils.isBlank(empIdStr)) { requestInfo.getRequestManager().setMessage("个税扣缴义务人、或员工id不能为空"); return FAILURE_AND_CONTINUE; @@ -107,47 +108,69 @@ public class RehireAction implements Action { Long employeeId = Long.valueOf(empIdStr); List salaryArchivePOS = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().taxAgentId(taxAgentId).employeeId(employeeId).build()); if (CollectionUtils.isEmpty(salaryArchivePOS)){ - requestInfo.getRequestManager().setMessage("该个税扣缴义务人下,该员工不存在薪资档案!"); - return FAILURE_AND_CONTINUE; + // 直接走定薪action生成档案 + InitSalaryAction initSalaryAction = new InitSalaryAction(); + return initSalaryAction.doSalaryArchiveInit(requestInfo, salaryFieldMap); + + // requestInfo.getRequestManager().setMessage("该个税扣缴义务人下,该员工不存在薪资档案!"); + // return FAILURE_AND_CONTINUE; } else if (salaryArchivePOS.get(0).getRunStatus().equals(SalaryArchiveStatusEnum.STOP_FROM_PENDING.getValue())) { - requestInfo.getRequestManager().setMessage("该个税扣缴义务人下,该员工没有发过薪。需取消停薪后,申请定薪流程!"); - return FAILURE_AND_CONTINUE; - } - - if (salaryArchivePOS.get(0).getRunStatus().equals(SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue())) { - // 停薪来自待停薪 1、取消停薪 - getSalaryArchiveWrapper(user).cancelStop(Collections.singletonList(salaryArchivePOS.get(0).getId())); - } - if (salaryArchivePOS.get(0).getRunStatus().equals(SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue()) || salaryArchivePOS.get(0).getRunStatus().equals(SalaryArchiveStatusEnum.SUSPEND.getValue())) { - // 1、如果不在人员范围内则把他加入义务人的人员范围,2、删除待办 - addTaxAgentRangeIfNotExist(taxAgentId, employeeId, user); - getSalaryArchiveWrapper(user).deleteSuspendTodo(Collections.singletonList(salaryArchivePOS.get(0).getId())); - } - - // 调薪 - List> importData = new ArrayList<>(); - importData.add(SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue)); - - SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() - .importDatas(importData) - .build(); - - //操作人 - String uid = list.stream().filter(f -> f.salaryName.equals("操作人")).findFirst().map(RehireAction.SalaryField::getValue).orElse("1"); - Map map = getSalaryArchiveWrapper(new User(Integer.parseInt(uid))).adjustmentSalaryArchive(build); - - List errorNotice = (List) map.get("errorNotice"); - if (CollectionUtils.isNotEmpty(errorNotice)) { - // 回滚档案状态 + // 先把状态变成待定薪然后走定薪action + salaryArchivePOS.get(0).setRunStatus(SalaryArchiveStatusEnum.PENDING.getValue()); + salaryArchivePOS.get(0).setPayEndDate(null); getSalaryArchiveMapper().update(salaryArchivePOS.get(0)); - log.error("调薪存在异常 requestId:{} map:{}", requestInfo.getRequestid(), map); - List> excelComments = (List>) map.get("errorNotice"); - StringBuilder message = new StringBuilder(""); - for (Map comments : excelComments) { - message.append(comments.get("message")).append("\n"); + InitSalaryAction initSalaryAction = new InitSalaryAction(); + return initSalaryAction.doSalaryArchiveInit(requestInfo, salaryFieldMap); + + // requestInfo.getRequestManager().setMessage("该个税扣缴义务人下,该员工没有发过薪。需取消停薪后,申请定薪流程!"); + // return FAILURE_AND_CONTINUE; + } else { + if (salaryArchivePOS.get(0).getRunStatus().equals(SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue())) { + // 停薪来自待停薪 1、取消停薪 + getSalaryArchiveWrapper(user).cancelStop(Collections.singletonList(salaryArchivePOS.get(0).getId())); + } + if (salaryArchivePOS.get(0).getRunStatus().equals(SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue()) || + salaryArchivePOS.get(0).getRunStatus().equals(SalaryArchiveStatusEnum.SUSPEND.getValue())) { + // 1、如果不在人员范围内则把他加入义务人的人员范围,2、删除待办 + addTaxAgentRangeIfNotExist(taxAgentId, employeeId, user); + getSalaryArchiveWrapper(user).deleteSuspendTodo(Collections.singletonList(salaryArchivePOS.get(0).getId())); + } + + // 调薪 + List> importData = new ArrayList<>(); + importData.add(SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue)); + + SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() + .importDatas(importData) + .build(); + + //操作人 + String uid = list.stream().filter(f -> f.salaryName.equals("操作人")).findFirst().map(RehireAction.SalaryField::getValue).orElse("1"); + Map map = getSalaryArchiveWrapper(new User(Integer.parseInt(uid))).adjustmentSalaryArchive(build); + + List errorNotice = (List) map.get("errorNotice"); + if (CollectionUtils.isNotEmpty(errorNotice)) { + // 回滚档案状态 + getSalaryArchiveMapper().update(salaryArchivePOS.get(0)); + log.error("调薪存在异常 requestId:{} map:{}", requestInfo.getRequestid(), map); + List> excelComments = (List>) map.get("errorNotice"); + StringBuilder message = new StringBuilder(""); + for (Map comments : excelComments) { + message.append(comments.get("message")).append("\n"); + } + requestInfo.getRequestManager().setMessage(message.toString()); + return FAILURE_AND_CONTINUE; + } + // 如果有起始发薪日期字段,则更新档案的起始发薪日期 + String startPayDate = salaryFieldMap.getOrDefault("起始发薪日期", "").toString(); + if (StringUtils.isNotBlank(startPayDate)) { + Date date = SalaryDateUtil.dateStrToLocalDate(startPayDate); + if (date != null) { + Long salaryArchiveId = salaryArchivePOS.get(0).getId(); + getSalaryArchiveMapper().updatePayStartDateById(salaryArchiveId, date); + } + } - requestInfo.getRequestManager().setMessage(message.toString()); - return FAILURE_AND_CONTINUE; } } catch (Exception e) { log.error("返聘调薪异常", e); diff --git a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java index 3332fff79..58eaabcad 100644 --- a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java +++ b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java @@ -21,14 +21,16 @@ import com.engine.salary.enums.salarysob.SalaryEmployeeStatusEnum; import com.engine.salary.enums.salarysob.TargetTypeEnum; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.excel.ExcelComment; import com.google.common.base.Joiner; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.engine.salary.util.db.IdGenerator; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; +import weaver.general.Util; +import weaver.hrm.User; import java.time.LocalDate; import java.util.*; @@ -338,7 +340,7 @@ public class SalaryArchiveExcelBO extends Service { * @param importHandleParam * @return */ - public static boolean singleRowCheck(List allTodoSalaryArchives, Map map, List headers, int effectiveTimeIndex, List> excelComments, int errorCount, SalaryArchiveImportHandleParam importHandleParam) { + public static boolean singleRowCheck(List allTodoSalaryArchives, Map map, List headers, int effectiveTimeIndex, List> excelComments, int errorCount, SalaryArchiveImportHandleParam importHandleParam, User user) { //是否是流程 boolean process = importHandleParam.isProcess(); @@ -655,7 +657,7 @@ public class SalaryArchiveExcelBO extends Service { // 7.薪资项目列处理(待定薪\定薪的初始化\定薪的调薪) } else { isError = handleSalaryItem(isError, effectiveTimeIndex, excelComments, errorCount, j, - effectiveTime, finalSalaryArchive, adjustReason, importHandleParam, key.toString(), cellVal, map); + effectiveTime, finalSalaryArchive, adjustReason, importHandleParam, key.toString(), cellVal, map, user); } } @@ -805,14 +807,14 @@ public class SalaryArchiveExcelBO extends Service { public static boolean handleSalaryItem(boolean isError, int effectiveTimeIndex, List> excelComments, int errorCount, int j, Date effectiveTime, SalaryArchivePO finalSalaryArchive, String salaryItemAdjustReason, SalaryArchiveImportHandleParam importHandleParam, - String key, String cellVal, Map map) { + String key, String cellVal, Map map, User user) { String rowindex = "第" + map.get("index") + "行"; // 薪资项目数据 if (isError || importHandleParam.isSuspendList() || (importHandleParam.isSalaryItemAdjust() && effectiveTime == null) || finalSalaryArchive == null) { return isError; } - Optional optionalSalaryItem = importHandleParam.getSalaryItems().stream().filter(e -> e.getName().equals(key)).findFirst(); + Optional optionalSalaryItem = importHandleParam.getSalaryItems().stream().filter(e -> Util.formatMultiLang(e.getName(), String.valueOf(user.getLanguage())).equals(key)).findFirst(); // 可以处理薪资项目的条件:有薪资项目+待定薪列表+定薪列表(调薪和初始化导入) boolean isEnable = optionalSalaryItem.isPresent() && (importHandleParam.isPendingList() || importHandleParam.isInit() || importHandleParam.isSalaryItemAdjust()); if (isEnable) { diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java index 79f7dcf30..a11f48491 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java @@ -6,6 +6,7 @@ import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; import org.apache.ibatis.annotations.Param; import java.util.Collection; +import java.util.Date; import java.util.List; public interface SalaryArchiveMapper { @@ -135,4 +136,11 @@ public interface SalaryArchiveMapper { List listPayEndDateIsNull(@Param("ids")List employeeIds); List listPayStartDateIsNull(@Param("runStatus")String runStatus); + + /** + * 更新起始发薪日期 + * @param salaryArchiveId + * @param date + */ + void updatePayStartDateById(@Param("id")Long salaryArchiveId, @Param("payStartDate")Date date); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml index 951429b32..259cb45d1 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml @@ -871,5 +871,12 @@ #{id} + + UPDATE hrsa_salary_archive + + pay_start_date= #{payStartDate} + + WHERE id = #{id} + \ No newline at end of file diff --git a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java index c655d2d93..acc81e362 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java @@ -492,7 +492,7 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch map = data.get(i); map.put("index", i + 2); // 3.校验行内容 - boolean isError = SalaryArchiveExcelBO.singleRowCheck(allTodoSalaryArchives, map, headers, effectiveTimeIndex, excelComments, errorCount, importHandleParam); + boolean isError = SalaryArchiveExcelBO.singleRowCheck(allTodoSalaryArchives, map, headers, effectiveTimeIndex, excelComments, errorCount, importHandleParam, user); if (isError) { errorCount += 1; // 添加错误数据 @@ -600,7 +600,7 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch map = data.get(i); map.put("index", i + 2); // 3.校验行内容 - boolean isError = SalaryArchiveExcelBO.singleRowCheck(allTodoSalaryArchives, map, headers, effectiveTimeIndex, excelComments, errorCount, importHandleParam); + boolean isError = SalaryArchiveExcelBO.singleRowCheck(allTodoSalaryArchives, map, headers, effectiveTimeIndex, excelComments, errorCount, importHandleParam, user); if (isError) { errorCount += 1; // 添加错误数据 diff --git a/src/com/engine/salary/util/excel/ExcelUtilPlus.java b/src/com/engine/salary/util/excel/ExcelUtilPlus.java index 3707f2f7c..748c12c79 100644 --- a/src/com/engine/salary/util/excel/ExcelUtilPlus.java +++ b/src/com/engine/salary/util/excel/ExcelUtilPlus.java @@ -587,14 +587,27 @@ public class ExcelUtilPlus { start = "0"; } XSSFCellStyle numberRedCellStyle = workbook.createCellStyle(); - BeanUtils.copyProperties(redCellStyle, numberRedCellStyle); + // 不能copy,在excel里编辑时背景变成了黑色 + // BeanUtils.copyProperties(redCellStyle, numberRedCellStyle); + numberRedCellStyle.setWrapText(true); + numberRedCellStyle.setBorderLeft(BorderStyle.THIN); + numberRedCellStyle.setBorderRight(BorderStyle.THIN); + numberRedCellStyle.setBorderTop(BorderStyle.THIN); + numberRedCellStyle.setBorderBottom(BorderStyle.THIN); numberRedCellStyle.setFont(redFont); short format = df.getFormat(start + Stream.generate(() -> "0").limit(p).collect(Collectors.joining()) + "_ "); numberRedCellStyle.setDataFormat(format); // 最后一行红色 numberRedCellStyleMap.put(p, numberRedCellStyle); XSSFCellStyle numberCellStyle = workbook.createCellStyle(); - BeanUtils.copyProperties(cellStyle, numberCellStyle); + // BeanUtils.copyProperties(cellStyle, numberCellStyle); + numberCellStyle.setFont(font);// 选择需要用到的字体格式 + numberCellStyle.setWrapText(true); + numberCellStyle.setBorderLeft(BorderStyle.THIN); + numberCellStyle.setBorderRight(BorderStyle.THIN); + numberCellStyle.setBorderTop(BorderStyle.THIN); + numberCellStyle.setBorderBottom(BorderStyle.THIN); + numberCellStyle.setDataFormat(format); numberCellStyleMap.put(p, numberCellStyle); }); @@ -622,13 +635,14 @@ public class ExcelUtilPlus { cell.setCellType(CellType.STRING); cell.setCellValue(String.valueOf(o)); } else if (o instanceof BigDecimal) { - cell.setCellType(CellType.NUMERIC); - cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue()); if (lastRowRed && rowIndex == rowList.size() - 1) { cell.setCellStyle(numberRedCellStyleMap.get(patternList.get(cellIndex))); } else { cell.setCellStyle(numberCellStyleMap.get(patternList.get(cellIndex))); } + cell.setCellType(CellType.NUMERIC); + double value = o == null ? 0 : ((BigDecimal) o).doubleValue(); + cell.setCellValue(value); } else if (o instanceof Boolean) { cell.setCellType(CellType.BOOLEAN); cell.setCellValue(String.valueOf(o)); @@ -692,6 +706,7 @@ public class ExcelUtilPlus { cellStyle.setBorderRight(BorderStyle.THIN); cellStyle.setBorderTop(BorderStyle.THIN); cellStyle.setBorderBottom(BorderStyle.THIN); + cellStyle.setFillPattern(FillPatternType.NO_FILL); XSSFCellStyle redCellStyle = workbook.createCellStyle(); XSSFFont redFont = workbook.createFont(); From a259a5204434bbedeccc6c1f64a053d2280481f6 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 11 Jul 2024 11:28:54 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E4=BA=BA=E5=91=98=E7=BB=B4=E5=BA=A6?= =?UTF-8?q?=E5=88=86=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsReportDataQueryParam.java | 24 +++++++++++++ .../SalaryStatisticsReportWrapper.java | 34 ++++++++++++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java index 8fe73f9a5..481d6d887 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java @@ -88,4 +88,28 @@ public class SalaryStatisticsReportDataQueryParam extends BaseQueryParam { // "分享批次id private Long batchId; + + @Override + public String toString() { + return "SalaryStatisticsReportDataQueryParam{" + + "id=" + id + + ", dimensionId=" + dimensionId + + ", salaryStartMonth='" + salaryStartMonth + '\'' + + ", salaryEndMonth='" + salaryEndMonth + '\'' + + ", taxAgent=" + taxAgent + + ", salarySob=" + salarySob + + ", incomeCategory=" + incomeCategory + + ", subCompany=" + subCompany + + ", depart=" + depart + + ", grade=" + grade + + ", position=" + position + + ", status=" + status + + ", employee=" + employee + + ", hiredate=" + hiredate + + ", leavedate=" + leavedate + + ", unitType=" + unitType + + ", isShare=" + isShare + + ", batchId=" + batchId + + '}'; + } } diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 5e7ac7edb..18cbb1f71 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -30,6 +30,7 @@ import com.engine.salary.service.impl.*; import com.engine.salary.util.*; import com.engine.salary.util.excel.ExcelUtilPlus; 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 org.apache.commons.collections4.CollectionUtils; @@ -325,11 +326,28 @@ public class SalaryStatisticsReportWrapper extends Service { //已缓存的报表id String salaryReportIds = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_IDS)); String salaryReportConditions = ""; + // 人员维度id + Long empDimensionId = 1683696782745L; if (StringUtils.isNotBlank(salaryReportIds) && salaryReportIds.contains(id + "")) { //报表中缓存的条件 salaryReportConditions = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id)); if (StringUtils.isNotBlank(salaryReportConditions) && salaryReportConditions.contains(paramMd5)) { - return getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5); + Map result = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5); + if (param.getDimensionId().equals(empDimensionId)) { + // 人员维度需要分页 + Map finalResultMap = new HashMap<>(); + PageInfo> pageInfo = (PageInfo>)result.get("pageInfo"); + PageInfo> finalPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize()); + finalPageInfo.setTotal(pageInfo.getList().size()); + finalPageInfo.setList(SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), pageInfo.getList())); + finalResultMap.put("pageInfo", finalPageInfo); + finalResultMap.put("columns", result.get("columns")); + finalResultMap.put("countResult", result.get("countResult")); + finalResultMap.put("reportId", id); + return finalResultMap; + } + + return result; } } @@ -356,6 +374,20 @@ public class SalaryStatisticsReportWrapper extends Service { getSalaryCacheService(user).set(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id, salaryReportConditions + "," + paramMd5); getSalaryCacheService(user).set(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5, resultMap); + Map finalResultMap = Maps.newHashMap(); + // 缓存完之后结果分页 + if (param.getDimensionId().equals(empDimensionId)) { + // 只有是人员维度才分页 + PageInfo> pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize()); + pageInfo.setTotal(page.getList().size()); + pageInfo.setList(SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), page.getList())); + finalResultMap.put("pageInfo", pageInfo); + finalResultMap.put("columns", weaTableColumns); + finalResultMap.put("countResult", countResultMap); + finalResultMap.put("reportId", id); + + return finalResultMap; + } return resultMap; } From e579bbc4f21cfa52956da4a2698bdb88e677d6c2 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 15 Jul 2024 11:20:24 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E4=BA=BA=E5=91=98=E7=BB=B4=E5=BA=A6?= =?UTF-8?q?=E5=88=86=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/wrapper/SalaryStatisticsReportWrapper.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 18cbb1f71..879df2f86 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -326,8 +326,12 @@ public class SalaryStatisticsReportWrapper extends Service { //已缓存的报表id String salaryReportIds = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_IDS)); String salaryReportConditions = ""; - // 人员维度id - Long empDimensionId = 1683696782745L; + // 获取人员维度id + Optional empDimensionOptional = getSalaryStatisticsDimensionService(user).listAllDefaultDimension().stream().filter(dim -> dim.getDimName().equals("人员")).map(SalaryStatisticsDimensionPO::getId).findFirst(); + Long empDimensionId = 0L; + if (empDimensionOptional.isPresent()) { + empDimensionId = empDimensionOptional.get(); + } if (StringUtils.isNotBlank(salaryReportIds) && salaryReportIds.contains(id + "")) { //报表中缓存的条件 salaryReportConditions = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id)); From 78cdadbb996f7dc8e44c3e24c468d52671452e49 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 16 Jul 2024 11:30:25 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E8=AF=A6?= =?UTF-8?q?=E6=83=85=20-=20=E6=98=BE=E7=A4=BA=E5=88=97=E5=AE=9A=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/SalarySendDetailQueryParam.java | 4 ++++ .../service/impl/SalarySendServiceImpl.java | 21 ++++++++++++++---- .../salary/web/SalaryBillController.java | 22 +++++++++---------- .../salary/wrapper/SalarySendWrapper.java | 1 + 4 files changed, 33 insertions(+), 15 deletions(-) diff --git a/src/com/engine/salary/entity/salaryBill/param/SalarySendDetailQueryParam.java b/src/com/engine/salary/entity/salaryBill/param/SalarySendDetailQueryParam.java index 94fb68c32..1b49f639b 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalarySendDetailQueryParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalarySendDetailQueryParam.java @@ -68,6 +68,10 @@ public class SalarySendDetailQueryParam extends BaseQueryParam { // @JsonIgnore private List sendStatuss; + + // 导出时显示列定制信息 + List columns; + public static String checkParam(SalarySendDetailQueryParam saveParam) { if (saveParam.getSalarySendId() == null) { throw new SalaryRunTimeException("工资单发放Id必传"); diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 738951a25..30019d8fc 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -56,6 +56,7 @@ import com.engine.salary.mapper.salaryacct.SalaryAcctRecordMapper; import com.engine.salary.mapper.salaryacct.SalaryAcctResultMapper; import com.engine.salary.mapper.salarybill.SalarySendInfoMapper; import com.engine.salary.mapper.salarybill.SalarySendMapper; +import com.engine.salary.report.common.constant.SalaryConstant; import com.engine.salary.service.*; import com.engine.salary.sys.entity.vo.OrderRuleVO; import com.engine.salary.sys.service.SalarySysConfService; @@ -1570,13 +1571,25 @@ public class SalarySendServiceImpl extends Service implements SalarySendService // 1.工作簿名称 String sheetName = SalaryI18nUtil.getI18nLabel(97036, "工资单发放详情"); List header = new ArrayList<>(); + // 员工信息字段 header.add(SalaryI18nUtil.getI18nLabel(85429, "姓名")); header.add(SalaryI18nUtil.getI18nLabel(86185, "部门")); header.add(SalaryI18nUtil.getI18nLabel(86186, "手机号")); header.add(SalaryI18nUtil.getI18nLabel(86317, "工号")); + Map salaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, dto -> dto.getSalaryItemId() + SalaryConstant.DYNAMIC_SUFFIX); + List sortedSalaryItems = new ArrayList<>(); + for(String column : queryParam.getColumns()) { + if (column.contains(SalaryConstant.DYNAMIC_SUFFIX)) { + SalaryTemplateSalaryItemListDTO salaryTemplateSalaryItemListDTO = salaryItemMap.get(column); + if (salaryTemplateSalaryItemListDTO != null) { + sortedSalaryItems.add(salaryTemplateSalaryItemListDTO); + } + } + } + // 动态列 - if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(salaryItems)) { - for (SalaryTemplateSalaryItemListDTO salaryItem : salaryItems) { + if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(sortedSalaryItems)) { + for (SalaryTemplateSalaryItemListDTO salaryItem : sortedSalaryItems) { header.add(salaryItem.getName()); } } @@ -1595,7 +1608,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService // 动态列 Map mapColumn = listMaps.get(0); - for (SalaryTemplateSalaryItemListDTO salaryItem : salaryItems) { + for (SalaryTemplateSalaryItemListDTO salaryItem : sortedSalaryItems) { if (mapColumn.containsKey(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX)) { row.add(dto.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX)); } @@ -1706,7 +1719,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService .filter(NumberUtils::isCreatable) .map(BigDecimal::new) .reduce(BigDecimal.ZERO, BigDecimal::add); - map.put(item.getId().toString(), SalaryAcctFormulaBO.roundResultValue(sum.toString(), item, Collections.emptyList(), Collections.emptyMap(), salaryItemIdKeySalarySobItemPOMap)); + map.put(item.getId() + SalaryItemConstant.DYNAMIC_SUFFIX, SalaryAcctFormulaBO.roundResultValue(sum.toString(), item, Collections.emptyList(), Collections.emptyMap(), salaryItemIdKeySalarySobItemPOMap)); }); return map; } diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index 10c6d9c31..94a2ea915 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -531,21 +531,21 @@ public class SalaryBillController { * * @return */ - @GET + @POST @Path("/send/exportDetailList") @Produces(MediaType.APPLICATION_OCTET_STREAM) - public Response exportDetailList(@Context HttpServletRequest request, @Context HttpServletResponse response) { + public Response exportDetailList(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody SalarySendDetailQueryParam queryParam) { User user = HrmUserVarify.getUser(request, response); - SalarySendDetailQueryParam queryParam = new SalarySendDetailQueryParam(); - String salarySendId = request.getParameter("salarySendId"); - String ids = request.getParameter("ids"); - if (StringUtils.isNotBlank(ids)) { - queryParam.setIds(Arrays.asList(ids.split(",")).stream().map(Long::new).collect(Collectors.toList())); - } - if (StringUtils.isNotBlank(salarySendId)) { - queryParam.setSalarySendId(Long.parseLong(salarySendId)); - } + // SalarySendDetailQueryParam queryParam = new SalarySendDetailQueryParam(); + // String salarySendId = request.getParameter("salarySendId"); + // String ids = request.getParameter("ids"); + // if (StringUtils.isNotBlank(ids)) { + // queryParam.setIds(Arrays.asList(ids.split(",")).stream().map(Long::new).collect(Collectors.toList())); + // } + // if (StringUtils.isNotBlank(salarySendId)) { + // queryParam.setSalarySendId(Long.parseLong(salarySendId)); + // } XSSFWorkbook workbook = getSalarySendWrapper(user).exportDetailList(queryParam); String fileName = "工资单发放详情列表" + LocalDate.now(); diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index 725931b80..0fccfecd0 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -562,6 +562,7 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy checkboxpopedom.setPopedompara("column:system_type"); checkboxpopedom.setShowmethod("com.engine.salary.transmethod.TaxRateTransMethod.getCheckBoxPopedom"); checkboxpopedomList.add(checkboxpopedom); + table.setPageUID(queryParam.getSalarySendId().toString()); table.setCheckboxList(checkboxpopedomList); table.setCheckboxpopedom(null); From 6f7ae2506d19891a1c7528c7345ce93b93ff5368 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 16 Jul 2024 14:56:11 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E9=98=85=E5=90=8E=E5=8D=B3=E7=84=9Aoracle?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryBillBaseSetServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java index ea9097e9d..392ddb58c 100644 --- a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java @@ -113,7 +113,7 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB salaryBillViewingLimitSetting salaryBillViewingLimitDTO = saveParam.getSalaryBillViewingLimitSetting(); if (salaryBillViewingLimitDTO != null) { getSalarySysConfService(user).saveSettingByType(Util.null2String(salaryBillViewingLimitDTO.getLimitMonth()), SALARY_BILL_VIEWING_LIMIT_MONTH, "工资单时效性设置", "billSend"); - getSalarySysConfService(user).saveSettingByType(Util.null2String(salaryBillViewingLimitDTO.getBurningAfterReadingMin()), SALARY_BILL_BURNING_AFTER_READING_MIN, "工资单查看后销毁设置", "billSend"); + getSalarySysConfService(user).saveSettingByType(salaryBillViewingLimitDTO.getBurningAfterReadingMin() == null ? " " : salaryBillViewingLimitDTO.getBurningAfterReadingMin().toString(), SALARY_BILL_BURNING_AFTER_READING_MIN, "工资单查看后销毁设置", "billSend"); } return StringUtils.EMPTY; } From 909152decc475b28b12282b47c31bf817e131071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 16 Jul 2024 16:57:58 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E4=BB=8E=E5=86=85=E5=AD=98=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsReportServiceImpl.java | 2 - .../web/SalaryStatisticsReportController.java | 12 +- .../SalaryStatisticsReportWrapper.java | 167 +++++++++--------- 3 files changed, 90 insertions(+), 91 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index db2f739c0..b75c5c413 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -1102,8 +1102,6 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary List fieldSettings = Optional.ofNullable(Optional.ofNullable(employeeInfoExpandDTO).orElse(new EmployeeInfoExpandDTO()).getFieldSettings()).orElse(new ArrayList<>()); Map> expandEmployeeMap = getSalaryEmployeeService(user).expandEmployeeMap(empIds, employeeInfoExpandDTO); - log.info("扩展属性" + expandEmployeeMap); - // List extEmployees = extEmployeeService.listByIdsWithDeleted(accountDetailPOList.stream().filter(e -> EmployeeTypeEnum.EXT_EMPLOYEE.getValue().equals(e.getEmployeeType())).map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()), data.getTenantKey()); // Map employeeExtByIdMap = SalaryEntityUtil.convert2Map(extEmployees, ExtEmployeePO::getId, ExtEmployeePO::getUsername); diff --git a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java index 1c062650e..219ee67a0 100644 --- a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java +++ b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java @@ -6,7 +6,6 @@ import com.engine.salary.report.wrapper.SalaryStatisticsReportWrapper; import com.engine.salary.util.ResponseResult; import io.swagger.v3.oas.annotations.parameters.RequestBody; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; @@ -158,17 +157,10 @@ public class SalaryStatisticsReportController { * * @return */ - @GET + @POST @Path("/exportData") @Produces(MediaType.APPLICATION_OCTET_STREAM) - public Response exportData(@Context HttpServletRequest request, @Context HttpServletResponse response) { - SalaryStatisticsReportDataQueryParam param = SalaryStatisticsReportDataQueryParam.builder() - .id(Long.parseLong(request.getParameter("id"))) - .dimensionId(Long.parseLong(request.getParameter("dimensionId"))) - .salaryStartMonth(request.getParameter("salaryStartMonth")) - .salaryEndMonth(request.getParameter("salaryEndMonth")) - .isShare(StringUtils.equals(request.getParameter("isShare"), "true")) - .build(); + public Response exportData(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsReportDataQueryParam param) { try { User user = HrmUserVarify.getUser(request, response); Map map = getSalaryStatisticsReportWrapper(user).exportData(param); diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 879df2f86..22fb6261f 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -340,7 +340,7 @@ public class SalaryStatisticsReportWrapper extends Service { if (param.getDimensionId().equals(empDimensionId)) { // 人员维度需要分页 Map finalResultMap = new HashMap<>(); - PageInfo> pageInfo = (PageInfo>)result.get("pageInfo"); + PageInfo> pageInfo = (PageInfo>) result.get("pageInfo"); PageInfo> finalPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize()); finalPageInfo.setTotal(pageInfo.getList().size()); finalPageInfo.setList(SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), pageInfo.getList())); @@ -404,11 +404,12 @@ public class SalaryStatisticsReportWrapper extends Service { * @return */ public Map exportData(SalaryStatisticsReportDataQueryParam param) { - if (param.getId() == null || param.getDimensionId() == null) { + Long id = param.getId(); + if (id == null || param.getDimensionId() == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); } - SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(param.getId()); + SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(id); if (po == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); } @@ -417,90 +418,98 @@ public class SalaryStatisticsReportWrapper extends Service { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在")); } sharedReportCheck(param.isShare(), po); - // 参数转换 - SalaryStatisticsReportBO.poToQueryParam(param, po); // 查询自定义统计项目 List salaryStatisticsItemList = this.getSalaryStatisticsItemService(user).listByStatisticsReportId(po.getId()); - // 列表data - PageInfo> page = this.getSalaryStatisticsReportService(user).buildReportRecords(dimension, param, salaryStatisticsItemList); - // 组装合计 - Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList, (long) user.getUID()); - List> list = page.getList(); - if (CollectionUtils.isNotEmpty(list) && MapUtils.isNotEmpty(countResultMap)) { - list.add(countResultMap); - } - // 获取数据 - List> records = list.stream().map(m -> m.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue() + StringUtils.EMPTY))).collect(Collectors.toList()); + // 参数转换 + SalaryStatisticsReportBO.poToQueryParam(param, po); + String paramMd5 = SecureUtil.md5(param + salaryStatisticsItemList.toString()); - // 获取列头 - List weaTableColumns = SalaryStatisticsReportBO.buildReportColumns(dimension, salaryStatisticsItemList); + //已缓存的报表id + String salaryReportIds = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_IDS)); + String salaryReportConditions = ""; - // 组装导出参数 -// ExportCommonParam exportParam = SalaryStatisticsReportBO.buildExportParam(dimension.getDimName(), weaTableColumns, records); -// exportParam.setSheetName(SalaryI18nUtil.getI18nLabel(179263, "薪酬统计报表") + "-" + exportParam.getDimensionName()); -// - - List rows = new ArrayList<>(); - rows.add(weaTableColumns); - - List head = new ArrayList<>(); - weaTableColumns.forEach(weaTableColumn -> { - String column = weaTableColumn.getColumn(); - if (CollectionUtils.isEmpty(weaTableColumn.getChildren())) { - head.add(column); - } else { - weaTableColumn.getChildren().forEach(children -> { - head.add(children.getColumn()); - }); - } - }); - - List itemIds = salaryStatisticsItemList.stream().map(item -> item.getItemValue().split(",")).flatMap(Arrays::stream).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList()); - List salaryItemPOList = getSalaryItemService(user).listByIds(itemIds); - List numberItemIds = salaryItemPOList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).map(salaryItemPO -> salaryItemPO.getId().toString()).collect(Collectors.toList()); - Map salaryStatisticsItemMap = SalaryEntityUtil.convert2Map(salaryStatisticsItemList, statisticsItemPO -> statisticsItemPO.getId().toString()); - - for (Map map : records) { - List row = Lists.newArrayListWithExpectedSize(records.size()); - head.forEach(k -> { - // 获取是数值还是文本 - if (k.contains(SalaryStatisticsReportBO.UD)) { - String[] split = k.split(SalaryStatisticsReportBO.UD); - String salaryItemId = split[0]; - SalaryStatisticsItemPO salaryStatisticsItemPO = salaryStatisticsItemMap.get(salaryItemId); - if (salaryStatisticsItemPO != null) { - Optional textItemOptional = Arrays.stream(salaryStatisticsItemPO.getItemValue().split(",")).filter(id -> !numberItemIds.contains(id)).findFirst(); - row.add( (!textItemOptional.isPresent() && NumberUtils.isCreatable(map.getOrDefault(k, StringUtils.EMPTY).replace(",", ""))) ? new BigDecimal(map.get(k).replace(",", "")) : map.getOrDefault(k, StringUtils.EMPTY)); - } else { - row.add(map.getOrDefault(k, StringUtils.EMPTY)); - } - } else { - row.add(map.getOrDefault(k, StringUtils.EMPTY)); + if (StringUtils.isNotBlank(salaryReportIds) && salaryReportIds.contains(id + "")) { + //报表中缓存的条件 + salaryReportConditions = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id)); + if (StringUtils.isNotBlank(salaryReportConditions) && salaryReportConditions.contains(paramMd5)) { + Map result = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5); + // 获取列头 + List weaTableColumns = (List) result.get("columns"); + PageInfo> page = (PageInfo>) result.get("pageInfo"); + // 组装合计 + Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList, (long) user.getUID()); + List> list = page.getList(); + if (CollectionUtils.isNotEmpty(list) && MapUtils.isNotEmpty(countResultMap)) { + list.add(countResultMap); } - }); - rows.add(row); + // 获取数据 + List> records = list.stream().map(m -> m.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue() + StringUtils.EMPTY))).collect(Collectors.toList()); + + List rows = new ArrayList<>(); + rows.add(weaTableColumns); + + List head = new ArrayList<>(); + weaTableColumns.forEach(weaTableColumn -> { + String column = weaTableColumn.getColumn(); + if (CollectionUtils.isEmpty(weaTableColumn.getChildren())) { + head.add(column); + } else { + weaTableColumn.getChildren().forEach(children -> { + head.add(children.getColumn()); + }); + } + }); + + List itemIds = salaryStatisticsItemList.stream().map(item -> item.getItemValue().split(",")).flatMap(Arrays::stream).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList()); + List salaryItemPOList = getSalaryItemService(user).listByIds(itemIds); + List numberItemIds = salaryItemPOList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).map(salaryItemPO -> salaryItemPO.getId().toString()).collect(Collectors.toList()); + Map salaryStatisticsItemMap = SalaryEntityUtil.convert2Map(salaryStatisticsItemList, statisticsItemPO -> statisticsItemPO.getId().toString()); + + for (Map map : records) { + List row = Lists.newArrayListWithExpectedSize(records.size()); + head.forEach(k -> { + // 获取是数值还是文本 + if (k.contains(SalaryStatisticsReportBO.UD)) { + String[] split = k.split(SalaryStatisticsReportBO.UD); + String salaryItemId = split[0]; + SalaryStatisticsItemPO salaryStatisticsItemPO = salaryStatisticsItemMap.get(salaryItemId); + if (salaryStatisticsItemPO != null) { + Optional textItemOptional = Arrays.stream(salaryStatisticsItemPO.getItemValue().split(",")).filter(itemId -> !numberItemIds.contains(itemId)).findFirst(); + row.add((!textItemOptional.isPresent() && NumberUtils.isCreatable(map.getOrDefault(k, StringUtils.EMPTY).replace(",", ""))) ? new BigDecimal(map.get(k).replace(",", "")) : map.getOrDefault(k, StringUtils.EMPTY)); + } else { + row.add(map.getOrDefault(k, StringUtils.EMPTY)); + } + } else { + row.add(map.getOrDefault(k, StringUtils.EMPTY)); + } + }); + rows.add(row); + } + + String sheetName = SalaryI18nUtil.getI18nLabel(179263, "薪酬统计报表") + "-" + dimension.getDimName(); + XSSFWorkbook book = ExcelUtilPlus.genWorkbookWithChildTitleColumn(rows, sheetName, true); + + Map map = new HashMap<>(); + map.put("workbook", book); + map.put("fileName", sheetName); + + // 记录操作日志 + String name = SalaryI18nUtil.getI18nLabel(0, "导出"); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId(po.getId().toString()); + loggerContext.setTargetName(po.getReportName()); + loggerContext.setOperateType(OperateTypeEnum.EXCEL_EXPORT.getValue()); + loggerContext.setOperateTypeName(name); + loggerContext.setOperatedesc(name + SalaryI18nUtil.getI18nLabel(0, "薪酬统计报表") + "-" + po.getReportName()); + loggerContext.setUser(user); + SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); + + return map; + } } - String sheetName = SalaryI18nUtil.getI18nLabel(179263, "薪酬统计报表") + "-" + dimension.getDimName(); - XSSFWorkbook book = ExcelUtilPlus.genWorkbookWithChildTitleColumn(rows, sheetName, true); - - Map map = new HashMap<>(); - map.put("workbook", book); - map.put("fileName", sheetName); - - // 记录操作日志 - String name = SalaryI18nUtil.getI18nLabel(0, "导出"); - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setTargetId(po.getId().toString()); - loggerContext.setTargetName(po.getReportName()); - loggerContext.setOperateType(OperateTypeEnum.EXCEL_EXPORT.getValue()); - loggerContext.setOperateTypeName(name); - loggerContext.setOperatedesc(name + SalaryI18nUtil.getI18nLabel(0, "薪酬统计报表") + "-" + po.getReportName()); - loggerContext.setUser(user); - SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); - - return map; + throw new SalaryRunTimeException("未查询报表数据!"); } /**