Merge branch 'release/2.15.1.2407.01' into release/个税版本
This commit is contained in:
commit
e45ee09c7e
|
|
@ -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<Map<String, Object>> importData = new ArrayList<>();
|
||||
Map<String, Object> 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<String, Object> 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<Map<String, String>> excelComments = (List<Map<String, String>>) map.get("errorNotice");
|
||||
StringBuilder message = new StringBuilder("");
|
||||
for (Map<String, String> 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<String, Object> importDataMap) {
|
||||
User user = new User();
|
||||
user.setLoginid("sysadmin");
|
||||
user.setUid(1);
|
||||
List<Map<String, Object>> 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<TaxAgentPO> 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<SalaryArchivePO> 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<String, Object> map = getSalaryArchiveWrapper(user).checkSalaryArchiveInit(build);
|
||||
|
||||
List errorNotice = (List) map.get("errorNotice");
|
||||
if (CollectionUtils.isNotEmpty(errorNotice)) {
|
||||
log.error("定薪检查存在异常 requestId:{} ,参数:{}, map:{}", requestInfo.getRequestid(), build, map);
|
||||
List<Map<String, String>> excelComments = (List<Map<String, String>>) map.get("errorNotice");
|
||||
StringBuilder message = new StringBuilder("");
|
||||
for (Map<String, String> comments : excelComments) {
|
||||
message.append(comments.get("message")).append("\n");
|
||||
}
|
||||
requestInfo.getRequestManager().setMessage(message.toString());
|
||||
return FAILURE_AND_CONTINUE;
|
||||
}
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<String, String> 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<Map<String, Object>> importData = new ArrayList<>();
|
||||
|
||||
Map<String, Object> 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<String, Object> 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<Map<String, String>> excelComments = (List<Map<String, String>>) map.get("errorNotice");
|
||||
StringBuilder message = new StringBuilder("");
|
||||
for (Map<String, String> 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<String, Object> importDataMap) {
|
||||
User user = new User();
|
||||
user.setLoginid("sysadmin");
|
||||
user.setUid(1);
|
||||
List<Map<String, Object>> 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<TaxAgentPO> 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<SalaryArchivePO> 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<String, Object> 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<Map<String, String>> excelComments = (List<Map<String, String>>) map.get("errorNotice");
|
||||
StringBuilder message = new StringBuilder("");
|
||||
for (Map<String, String> 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;
|
||||
|
|
|
|||
|
|
@ -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<String, String> salaryFieldMap = SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue);
|
||||
String taxAgentName = salaryFieldMap.get("个税扣缴义务人");
|
||||
String empIdStr = salaryFieldMap.get("员工id");
|
||||
Map<String, Object> 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<SalaryArchivePO> 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<Map<String, Object>> 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<String, Object> 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<Map<String, String>> excelComments = (List<Map<String, String>>) map.get("errorNotice");
|
||||
StringBuilder message = new StringBuilder("");
|
||||
for (Map<String, String> 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<Map<String, Object>> 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<String, Object> 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<Map<String, String>> excelComments = (List<Map<String, String>>) map.get("errorNotice");
|
||||
StringBuilder message = new StringBuilder("");
|
||||
for (Map<String, String> 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);
|
||||
|
|
|
|||
|
|
@ -68,6 +68,10 @@ public class SalarySendDetailQueryParam extends BaseQueryParam {
|
|||
// @JsonIgnore
|
||||
private List<Integer> sendStatuss;
|
||||
|
||||
|
||||
// 导出时显示列定制信息
|
||||
List<String> columns;
|
||||
|
||||
public static String checkParam(SalarySendDetailQueryParam saveParam) {
|
||||
if (saveParam.getSalarySendId() == null) {
|
||||
throw new SalaryRunTimeException("工资单发放Id必传");
|
||||
|
|
|
|||
|
|
@ -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<String> allTodoSalaryArchives, Map<String, Object> map, List<String> headers, int effectiveTimeIndex, List<Map<String, String>> excelComments, int errorCount, SalaryArchiveImportHandleParam importHandleParam) {
|
||||
public static boolean singleRowCheck(List<String> allTodoSalaryArchives, Map<String, Object> map, List<String> headers, int effectiveTimeIndex, List<Map<String, String>> 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<Map<String, String>> excelComments, int errorCount, int j,
|
||||
Date effectiveTime, SalaryArchivePO finalSalaryArchive, String salaryItemAdjustReason, SalaryArchiveImportHandleParam importHandleParam,
|
||||
String key, String cellVal, Map<String, Object> map) {
|
||||
String key, String cellVal, Map<String, Object> map, User user) {
|
||||
|
||||
String rowindex = "第" + map.get("index") + "行";
|
||||
// 薪资项目数据
|
||||
if (isError || importHandleParam.isSuspendList() || (importHandleParam.isSalaryItemAdjust() && effectiveTime == null) || finalSalaryArchive == null) {
|
||||
return isError;
|
||||
}
|
||||
Optional<SalaryItemPO> optionalSalaryItem = importHandleParam.getSalaryItems().stream().filter(e -> e.getName().equals(key)).findFirst();
|
||||
Optional<SalaryItemPO> 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) {
|
||||
|
|
|
|||
|
|
@ -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<SalaryArchivePO> listPayEndDateIsNull(@Param("ids")List<Long> employeeIds);
|
||||
|
||||
List<SalaryArchivePO> listPayStartDateIsNull(@Param("runStatus")String runStatus);
|
||||
|
||||
/**
|
||||
* 更新起始发薪日期
|
||||
* @param salaryArchiveId
|
||||
* @param date
|
||||
*/
|
||||
void updatePayStartDateById(@Param("id")Long salaryArchiveId, @Param("payStartDate")Date date);
|
||||
}
|
||||
|
|
@ -871,5 +871,12 @@
|
|||
#{id}
|
||||
</foreach>
|
||||
</update>
|
||||
<update id="updatePayStartDateById">
|
||||
UPDATE hrsa_salary_archive
|
||||
<set>
|
||||
pay_start_date= #{payStartDate}
|
||||
</set>
|
||||
WHERE id = #{id}
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
|
|
@ -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 +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1102,8 +1102,6 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
|
|||
List<FieldSetting> fieldSettings = Optional.ofNullable(Optional.ofNullable(employeeInfoExpandDTO).orElse(new EmployeeInfoExpandDTO()).getFieldSettings()).orElse(new ArrayList<>());
|
||||
Map<Long, Map<String, String>> expandEmployeeMap = getSalaryEmployeeService(user).expandEmployeeMap(empIds, employeeInfoExpandDTO);
|
||||
|
||||
log.info("扩展属性" + expandEmployeeMap);
|
||||
|
||||
// List<ExtEmployeePO> extEmployees = extEmployeeService.listByIdsWithDeleted(accountDetailPOList.stream().filter(e -> EmployeeTypeEnum.EXT_EMPLOYEE.getValue().equals(e.getEmployeeType())).map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()), data.getTenantKey());
|
||||
// Map<Long, String> employeeExtByIdMap = SalaryEntityUtil.convert2Map(extEmployees, ExtEmployeePO::getId, ExtEmployeePO::getUsername);
|
||||
|
||||
|
|
|
|||
|
|
@ -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<String, Object> map = getSalaryStatisticsReportWrapper(user).exportData(param);
|
||||
|
|
|
|||
|
|
@ -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,32 @@ public class SalaryStatisticsReportWrapper extends Service {
|
|||
//已缓存的报表id
|
||||
String salaryReportIds = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_IDS));
|
||||
String salaryReportConditions = "";
|
||||
// 获取人员维度id
|
||||
Optional<Long> 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));
|
||||
if (StringUtils.isNotBlank(salaryReportConditions) && salaryReportConditions.contains(paramMd5)) {
|
||||
return getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5);
|
||||
Map<String, Object> result = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5);
|
||||
if (param.getDimensionId().equals(empDimensionId)) {
|
||||
// 人员维度需要分页
|
||||
Map<String, Object> finalResultMap = new HashMap<>();
|
||||
PageInfo<Map<String, Object>> pageInfo = (PageInfo<Map<String, Object>>) result.get("pageInfo");
|
||||
PageInfo<Map<String, Object>> 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 +378,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<String, Object> finalResultMap = Maps.newHashMap();
|
||||
// 缓存完之后结果分页
|
||||
if (param.getDimensionId().equals(empDimensionId)) {
|
||||
// 只有是人员维度才分页
|
||||
PageInfo<Map<String, Object>> 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;
|
||||
}
|
||||
|
|
@ -368,11 +404,12 @@ public class SalaryStatisticsReportWrapper extends Service {
|
|||
* @return
|
||||
*/
|
||||
public Map<String, Object> 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, "薪酬统计报表不存在"));
|
||||
}
|
||||
|
|
@ -381,90 +418,98 @@ public class SalaryStatisticsReportWrapper extends Service {
|
|||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在"));
|
||||
}
|
||||
sharedReportCheck(param.isShare(), po);
|
||||
// 参数转换
|
||||
SalaryStatisticsReportBO.poToQueryParam(param, po);
|
||||
|
||||
// 查询自定义统计项目
|
||||
List<SalaryStatisticsItemPO> salaryStatisticsItemList = this.getSalaryStatisticsItemService(user).listByStatisticsReportId(po.getId());
|
||||
// 列表data
|
||||
PageInfo<Map<String, Object>> page = this.getSalaryStatisticsReportService(user).buildReportRecords(dimension, param, salaryStatisticsItemList);
|
||||
// 组装合计
|
||||
Map<String, Object> countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList, (long) user.getUID());
|
||||
List<Map<String, Object>> list = page.getList();
|
||||
if (CollectionUtils.isNotEmpty(list) && MapUtils.isNotEmpty(countResultMap)) {
|
||||
list.add(countResultMap);
|
||||
}
|
||||
// 获取数据
|
||||
List<Map<String, String>> 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<WeaTableColumnGroup> 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<String> 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<Long> itemIds = salaryStatisticsItemList.stream().map(item -> item.getItemValue().split(",")).flatMap(Arrays::stream).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList());
|
||||
List<SalaryItemPO> salaryItemPOList = getSalaryItemService(user).listByIds(itemIds);
|
||||
List<String> numberItemIds = salaryItemPOList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).map(salaryItemPO -> salaryItemPO.getId().toString()).collect(Collectors.toList());
|
||||
Map<String, SalaryStatisticsItemPO> salaryStatisticsItemMap = SalaryEntityUtil.convert2Map(salaryStatisticsItemList, statisticsItemPO -> statisticsItemPO.getId().toString());
|
||||
|
||||
for (Map<String, String> map : records) {
|
||||
List<Object> 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<String> 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<String, Object> result = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5);
|
||||
// 获取列头
|
||||
List<WeaTableColumnGroup> weaTableColumns = (List<WeaTableColumnGroup>) result.get("columns");
|
||||
PageInfo<Map<String, Object>> page = (PageInfo<Map<String, Object>>) result.get("pageInfo");
|
||||
// 组装合计
|
||||
Map<String, Object> countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList, (long) user.getUID());
|
||||
List<Map<String, Object>> list = page.getList();
|
||||
if (CollectionUtils.isNotEmpty(list) && MapUtils.isNotEmpty(countResultMap)) {
|
||||
list.add(countResultMap);
|
||||
}
|
||||
});
|
||||
rows.add(row);
|
||||
// 获取数据
|
||||
List<Map<String, String>> 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<String> 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<Long> itemIds = salaryStatisticsItemList.stream().map(item -> item.getItemValue().split(",")).flatMap(Arrays::stream).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList());
|
||||
List<SalaryItemPO> salaryItemPOList = getSalaryItemService(user).listByIds(itemIds);
|
||||
List<String> numberItemIds = salaryItemPOList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).map(salaryItemPO -> salaryItemPO.getId().toString()).collect(Collectors.toList());
|
||||
Map<String, SalaryStatisticsItemPO> salaryStatisticsItemMap = SalaryEntityUtil.convert2Map(salaryStatisticsItemList, statisticsItemPO -> statisticsItemPO.getId().toString());
|
||||
|
||||
for (Map<String, String> map : records) {
|
||||
List<Object> 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<String> 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<String, Object> 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<String, Object> 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("未查询报表数据!");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -491,7 +491,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;
|
||||
// 添加错误数据
|
||||
|
|
@ -599,7 +599,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;
|
||||
// 添加错误数据
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Object> header = new ArrayList<>();
|
||||
// 员工信息字段
|
||||
header.add(SalaryI18nUtil.getI18nLabel(85429, "姓名"));
|
||||
header.add(SalaryI18nUtil.getI18nLabel(86185, "部门"));
|
||||
header.add(SalaryI18nUtil.getI18nLabel(86186, "手机号"));
|
||||
header.add(SalaryI18nUtil.getI18nLabel(86317, "工号"));
|
||||
Map<String, SalaryTemplateSalaryItemListDTO> salaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, dto -> dto.getSalaryItemId() + SalaryConstant.DYNAMIC_SUFFIX);
|
||||
List<SalaryTemplateSalaryItemListDTO> 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<String, Object> 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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -591,14 +591,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);
|
||||
});
|
||||
|
|
@ -626,13 +639,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));
|
||||
|
|
@ -696,6 +710,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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue