weaver-hrm-salary/src/com/engine/salary/remote/attend/service/impl/RemoteAttend4SalaryServiceI...

253 lines
13 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.engine.salary.remote.attend.service.impl;
import com.alibaba.druid.support.json.JSONUtils;
import com.alibaba.fastjson.JSONObject;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.kq.cmd.report.GetKQReportCmd;
import com.engine.salary.mapper.datacollection.AttendQuoteFieldMapper;
import com.engine.salary.remote.attend.cmd.GetSearchListCmd;
import com.engine.salary.remote.attend.entity.Attend4Salary;
import com.engine.salary.remote.attend.service.RemoteAttend4SalaryService;
import com.engine.salary.sys.service.SalarySysConfService;
import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl;
import com.engine.salary.util.SalaryDateUtil;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.db.MapperProxyFactory;
import com.engine.salary.util.valid.ValidUtil;
import com.google.common.base.Joiner;
import com.google.common.collect.Maps;
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.general.BaseBean;
import weaver.general.Util;
import weaver.hrm.User;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
import static com.engine.salary.sys.constant.SalarySysConstant.ATTENDANCE_SERIAL_COLLECTION_BTN;
@Slf4j
public class RemoteAttend4SalaryServiceImpl extends Service implements RemoteAttend4SalaryService {
private final Boolean isLog = "true".equals(new BaseBean().getPropValue("hrmSalary", "log"));
private AttendQuoteFieldMapper getAttendQuoteFieldMapper() {
return MapperProxyFactory.getProxy(AttendQuoteFieldMapper.class);
}
private SalarySysConfService getSalarySysConfService(User user) {
return ServiceUtil.getService(SalarySysConfServiceImpl.class, user);
}
//是否采集考勤班次数据
boolean isCollectAttendanceSerial = "1".equals(getSalarySysConfService(user).getValueByCode(ATTENDANCE_SERIAL_COLLECTION_BTN));
@Override
public List<Map<String, String>> getColumns() {
//是否采集考勤班次数据
String attendanceSerial = "";
if (isCollectAttendanceSerial) {
List<String> attendanceSerials = getAttendQuoteFieldMapper().getAttendanceSerials();
attendanceSerial = Joiner.on(",").join((Iterable<?>) attendanceSerials);
}
Map<String, Object> paramsMap = new HashMap<String, Object>();
paramsMap.put("typeselect", "3");
paramsMap.put("viewScope", "0");
paramsMap.put("isNoAccount", "1");
paramsMap.put("attendanceSerial", attendanceSerial);
paramsMap.put("isFromMyAttendance", "1");
Map<String, Object> temp = new HashMap<String, Object>();
temp.put("data", JSONObject.toJSONString(paramsMap));
temp.put("reportType", "month");
List<Map> datas = (List<Map>) commandExecutor.execute(new GetKQReportCmd(temp, user)).get("columns");
if (isLog) {
log.info("同步考勤字段,{}", JSONUtils.toJSONString(datas));
}
List<Map<String, String>> columns = new ArrayList<>();
datas.stream().filter(column -> Objects.nonNull(column.get("dataIndex"))).forEach(column -> {
String dataIndex = column.get("dataIndex").toString();
//请假
if (dataIndex.equals("leave") && column.get("children") != null) {
List<Map> list = (List<Map>) column.get("children");
if (CollectionUtils.isNotEmpty(list)) {
list.stream()
.filter(leave -> leave.get("dataIndex") != null && StringUtils.isNotBlank(leave.get("dataIndex").toString()))
.forEach(leave -> {
Map<String, String> map = Maps.newHashMapWithExpectedSize(2);
map.put("code", leave.get("dataIndex").toString());
map.put("name", Util.null2String(column.get("title")) + "-" + leave.get("title") + "(" + leave.get("unit").toString() + ")");
columns.add(map);
});
}
}
//出勤班次
else if (dataIndex.equals("attendanceSerial") && column.get("children") != null) {
List<Map> list = (List<Map>) column.get("children");
if (CollectionUtils.isNotEmpty(list)) {
list.stream()
.filter(leave -> leave.get("dataIndex") != null && StringUtils.isNotBlank(leave.get("dataIndex").toString()))
.forEach(leave -> {
Map<String, String> map = Maps.newHashMapWithExpectedSize(2);
map.put("code", "attendanceSerial_" + leave.get("dataIndex").toString());
String unit = "".equals(leave.get("unit").toString()) ? "" : "(" + leave.get("unit").toString() + ")";
map.put("name", Util.null2String(column.get("title")) + "-" + leave.get("title") + unit);
columns.add(map);
});
}
}
//加班
else if (dataIndex.equals("overtime") && column.get("children") != null) {
List<Map> list = (List<Map>) column.get("children");
if (CollectionUtils.isNotEmpty(list)) {
for (int i = 0; i < list.size(); i++) {
Map overtimeMap = list.get(i);
if (overtimeMap.get("dataIndex") != null && StringUtils.isNotBlank(overtimeMap.get("dataIndex").toString()) && overtimeMap.get("children") == null) {
Map<String, String> map = Maps.newHashMapWithExpectedSize(2);
map.put("code", overtimeMap.get("dataIndex").toString());
map.put("name", Util.null2String(column.get("title")) + "-" + overtimeMap.get("title") + "(" + overtimeMap.get("unit").toString() + ")");
columns.add(map);
}
if (overtimeMap.get("dataIndex") != null && StringUtils.isNotBlank(overtimeMap.get("dataIndex").toString()) && overtimeMap.get("children") != null) {
List<Map> overtimes = (List<Map>) overtimeMap.get("children");
if (CollectionUtils.isNotEmpty(overtimes)) {
overtimes.stream().filter(leave -> leave.get("dataIndex") != null && StringUtils.isNotBlank(leave.get("dataIndex").toString()))
.forEach(leave -> {
Map<String, String> map = Maps.newHashMapWithExpectedSize(2);
map.put("code", leave.get("dataIndex").toString());
map.put("name", Util.null2String(column.get("title")) + "-" + Util.null2String(overtimeMap.get("title")) + "-" + leave.get("title") + "(" + leave.get("unit").toString() + ")");
columns.add(map);
});
}
}
}
}
}
//普通考勤
else {
if (column.get("unit") != null && StringUtils.isNotBlank(column.get("unit").toString())) {
Map<String, String> map = Maps.newHashMapWithExpectedSize(2);
map.put("code", dataIndex);
map.put("name", column.get("title") + "(" + column.get("unit").toString() + ")");
columns.add(map);
}
}
});
//假期余额字段
columns.addAll(getBalanceOfLeaveColumns());
return columns;
}
@Override
public List<Map<String, String>> getDatas(Attend4Salary attend4Salary) {
List<Map<String, String>> list = new ArrayList<>();
try {
ValidUtil.doValidator(attend4Salary);
Map<String, Object> paramsMap = new HashMap<String, Object>();
paramsMap.put("pageIndex", 1);
paramsMap.put("pageSize", 500);
paramsMap.put("typeselect", "6");
paramsMap.put("fromDate", SalaryDateUtil.getFormatLocalDate(attend4Salary.getBeginDate()));
paramsMap.put("toDate", SalaryDateUtil.getFormatLocalDate(attend4Salary.getEndDate()));
paramsMap.put("viewScope", "3");
List<String> resourceIds = attend4Salary.getOnlyEmpIds().stream().map(String::valueOf).collect(Collectors.toList());
paramsMap.put("resourceId", String.join(",", resourceIds));
paramsMap.put("isNoAccount", "1");
//班次
paramsMap.put("attendanceSerial", isCollectAttendanceSerial ? attend4Salary.getAttendanceSerial() : "");
paramsMap.put("isFromMyAttendance", "1");
Map<String, Object> temp = new HashMap<String, Object>();
temp.put("data", JSONObject.toJSONString(paramsMap));
temp.put("reportType", "month");
log.info("salaryAttend开始获取的考勤数据参数{}", temp);
list = (List<Map<String, String>>) commandExecutor.execute(new GetKQReportCmd(temp, user)).get("datas");
if (isLog) {
log.info("salaryAttend获取的考勤数据{}", JSONUtils.toJSONString(list));
}
} catch (Exception e) {
log.error("salaryAttend获取考勤数据失败", e);
}
try {
//假期余额信息
List<Map<String, String>> balanceOfLeaveDatas = getBalanceOfLeaveDatas(attend4Salary);
Map<String, Map<String, String>> balanceMap = SalaryEntityUtil.convert2Map(balanceOfLeaveDatas, m -> m.get("id"));
//给有考勤的赋值
List<String> attendEmpIds = list.stream().map(attend -> {
String resourceId = attend.get("resourceId");
Map<String, String> map = balanceMap.getOrDefault(resourceId, new HashMap<>());
for (String key : map.keySet()) {
attend.put("balanceOfLeave_" + key, map.get(key));
}
return resourceId;
}).collect(Collectors.toList());
//没有考勤,但有假期余额的人赋值
List<Map<String, String>> balanceOfLeaveList = balanceMap.keySet().stream()
.filter(k -> !attendEmpIds.contains(k))
.map(k -> {
Map<String, String> result = new HashMap<>();
result.put("resourceId", k);
Map<String, String> map = balanceMap.get(k);
for (String key : map.keySet()) {
result.put("balanceOfLeave_" + key, map.get(key));
}
return result;
})
.collect(Collectors.toList());
list.addAll(balanceOfLeaveList);
} catch (Exception e) {
log.error("salaryAttend获取假期数据失败", e);
}
return list;
}
@Override
public List<Map<String, String>> getBalanceOfLeaveColumns() {
Map<String, Object> paramsMap = new HashMap<String, Object>();
paramsMap.put("dateScope", "6");
paramsMap.put("selectedYear", LocalDate.now().getYear());
paramsMap.put("dataScope", "3");
paramsMap.put("resourceId", 92);
paramsMap.put("status", "9");
paramsMap.put("isNoAccount", true);
List<Map<String, String>> columns = (List<Map<String, String>>) commandExecutor.execute(new GetSearchListCmd(paramsMap, user)).get("columns");
List<Map<String, String>> balanceOfLeaveColumns = columns.stream()
.filter(column -> NumberUtils.isCreatable(column.get("key")))
.map(column -> {
Map<String, String> map = Maps.newHashMapWithExpectedSize(2);
map.put("code", "balanceOfLeave_" + column.get("key"));
map.put("name", "假期余额-" + column.get("title"));
return map;
}).collect(Collectors.toList());
return balanceOfLeaveColumns;
}
@Override
public List<Map<String, String>> getBalanceOfLeaveDatas(Attend4Salary attend4Salary) {
Map<String, Object> paramsMap = new HashMap<String, Object>();
paramsMap.put("currentPage", "1");
paramsMap.put("pageSize", "500");
paramsMap.put("selectedYear", SalaryDateUtil.date2Year(attend4Salary.getBeginDate()));
paramsMap.put("dataScope", "3");
paramsMap.put("resourceId", attend4Salary.getOnlyEmpIds().stream().map(String::valueOf).collect(Collectors.joining(",")));
paramsMap.put("status", "9");
paramsMap.put("isNoAccount", true);
return (List<Map<String, String>>) commandExecutor.execute(new GetSearchListCmd(paramsMap, user)).get("datas");
}
}