package com.engine.salary.service.impl;
import com.alibaba.fastjson.JSON;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.biz.AttendQuoteFieldBiz;
import com.engine.salary.biz.AttendQuoteFieldSettingBiz;
import com.engine.salary.constant.SalaryDefaultTenantConstant;
import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldSettingFieldListDTO;
import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldSettingListDTO;
import com.engine.salary.entity.datacollection.param.AttendModuleSettingFieldParam;
import com.engine.salary.entity.datacollection.param.AttendQuoteFieldSettingQueryParam;
import com.engine.salary.entity.datacollection.param.AttendQuoteFieldSettingRecoverParam;
import com.engine.salary.entity.datacollection.param.AttendQuoteFieldSettingSaveParam;
import com.engine.salary.entity.datacollection.po.AttendQuoteFieldPO;
import com.engine.salary.entity.datacollection.po.AttendQuoteFieldSettingPO;
import com.engine.salary.enums.datacollection.AttendQuoteFieldSourceTypeEnum;
import com.engine.salary.enums.datacollection.AttendQuoteSourceTypeEnum;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.service.AttendQuoteFieldService;
import com.engine.salary.service.AttendQuoteFieldSettingService;
import com.engine.salary.util.valid.ValidUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import weaver.hrm.User;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* 数据采集-考勤引用字段设置
*
Copyright: Copyright (c) 2022
* Company: 泛微软件
*
* @author qiantao
* @version 1.0
**/
public class AttendQuoteFieldSettingServiceImpl extends Service implements AttendQuoteFieldSettingService {
private AttendQuoteFieldSettingBiz biz = new AttendQuoteFieldSettingBiz();
private AttendQuoteFieldBiz fieldBiz = new AttendQuoteFieldBiz();
//
// private AttendQuoteFieldSettingMapper mapper;
//
// private AttendQuoteFieldMapper attendQuoteFieldMapper;
//
// private LoggerTemplate attendQuoteFieldSettingLoggerTemplate;
private AttendQuoteFieldService getAttendQuoteFieldService(User user) {
return (AttendQuoteFieldService) ServiceUtil.getService(AttendQuoteFieldServiceImpl.class, user);
}
@Override
public List list(AttendQuoteFieldSettingQueryParam queryParam) {
//同步字段
// getAttendQuoteFieldService(user).syncAttendFields();
// 获取字段设置
List list = biz.getAttendQuoteFieldSetting(queryParam.getSourceType());
List resultList = new ArrayList<>();
// 考勤模块分组字段
resultList.add(buildAttendQuoteFieldSetting(CollectionUtils.isEmpty(list) ? null : list.get(0), AttendQuoteFieldSourceTypeEnum.ATTEND, "", queryParam.getKeyword(), queryParam.getIsViewChecked()));
// 如果是导入还包含自定义分组
if (queryParam.getSourceType().equals(AttendQuoteSourceTypeEnum.IMPORT)) {
resultList.add(buildAttendQuoteFieldSetting(CollectionUtils.isEmpty(list) ? null : list.get(0), AttendQuoteFieldSourceTypeEnum.DEFAULT, "", queryParam.getKeyword(), queryParam.getIsViewChecked()));
}
return resultList;
}
/**
* 获取所有字段
*/
private List getAllAttendQuoteFields() {
return fieldBiz.listSome(AttendQuoteFieldPO.builder().build());
}
@Override
public List listNoSync(AttendQuoteFieldSettingQueryParam queryParam) {
// 获取字段设置
List list = biz.getAttendQuoteFieldSetting(queryParam.getSourceType());
List resultList = new ArrayList<>();
// 考勤模块分组字段
resultList.add(buildAttendQuoteFieldSetting(CollectionUtils.isEmpty(list) ? null : list.get(0), AttendQuoteFieldSourceTypeEnum.ATTEND, "", queryParam.getKeyword(), queryParam.getIsViewChecked()));
// 如果是导入还包含自定义分组
if (queryParam.getSourceType().equals(AttendQuoteSourceTypeEnum.IMPORT)) {
resultList.add(buildAttendQuoteFieldSetting(CollectionUtils.isEmpty(list) ? null : list.get(0), AttendQuoteFieldSourceTypeEnum.DEFAULT, "", queryParam.getKeyword(), queryParam.getIsViewChecked()));
}
return resultList;
}
/**
* 构建字段组设置
*
* @param po
* @param fieldSourceType
* @param keyword
* @param isViewChecked
* @return
*/
private AttendQuoteFieldSettingListDTO buildAttendQuoteFieldSetting(AttendQuoteFieldSettingPO po, AttendQuoteFieldSourceTypeEnum fieldSourceType, String type, String keyword, Boolean isViewChecked) {
// 根据来源获取字段
List attendQuoteFields = getAllAttendQuoteFields();
attendQuoteFields = attendQuoteFields.stream().filter(f -> f.getSourceType() == fieldSourceType.getValue()).collect(Collectors.toList());
List fieldList = new ArrayList<>();
// 没有设置过
if (po == null) {
fieldList = attendQuoteFields.stream().map(m ->
AttendQuoteFieldSettingFieldListDTO.builder()
.id(m.getId())
.name(m.getFieldName())
.checked(Boolean.FALSE)
.build()
).collect(Collectors.toList());
} else {
// 设置过,则解析
List settingFields;
// 如果是恢复默认设置
if ("recoverAsDefault".equals(type)) {
settingFields = JSON.parseArray(po.getDefaultSettingContent(), AttendQuoteFieldSettingFieldListDTO.class);
} else {
settingFields = JSON.parseArray(po.getCurrentSettingContent(), AttendQuoteFieldSettingFieldListDTO.class);
}
for (AttendQuoteFieldPO attendQuoteField : attendQuoteFields) {
Optional optional = settingFields.stream().filter(e -> e.getId().equals(attendQuoteField.getId())).findFirst();
if (optional.isPresent()) {
fieldList.add(AttendQuoteFieldSettingFieldListDTO.builder()
.id(attendQuoteField.getId())
.name(attendQuoteField.getFieldName())
.checked(optional.get().getChecked())
.build());
} else {
fieldList.add(AttendQuoteFieldSettingFieldListDTO.builder()
.id(attendQuoteField.getId())
.name(attendQuoteField.getFieldName())
.checked(Boolean.FALSE)
.build());
}
}
}
// 关键字过滤
if (StringUtils.isNotEmpty(keyword)) {
fieldList = fieldList.stream().filter(e -> e.getName().contains(keyword)).collect(Collectors.toList());
}
// 是否只显示已选中字段
if (isViewChecked != null && isViewChecked) {
fieldList = fieldList.stream().filter(AttendQuoteFieldSettingFieldListDTO::getChecked).collect(Collectors.toList());
}
return AttendQuoteFieldSettingListDTO.builder()
.groupId(fieldSourceType.name())
.groupName(fieldSourceType.getDefaultLabel())
.items(fieldList)
.build();
}
@Override
public List recoverAsDefault(AttendQuoteFieldSettingRecoverParam recoverParam) {
ValidUtil.doValidator(recoverParam);
// 获取字段设置
List list = biz.getAttendQuoteFieldSetting(recoverParam.getSourceType());
List resultList = new ArrayList<>();
// 考勤模块分组字段
resultList.add(buildAttendQuoteFieldSetting(CollectionUtils.isEmpty(list) ? null : list.get(0), AttendQuoteFieldSourceTypeEnum.ATTEND, "recoverAsDefault", "", Boolean.FALSE));
// 如果是导入还包含自定义分组
if (recoverParam.getSourceType().equals(AttendQuoteSourceTypeEnum.IMPORT)) {
resultList.add(buildAttendQuoteFieldSetting(CollectionUtils.isEmpty(list) ? null : list.get(0), AttendQuoteFieldSourceTypeEnum.DEFAULT, "recoverAsDefault", "", Boolean.FALSE));
}
return resultList;
}
@Override
public String save(AttendQuoteFieldSettingSaveParam saveParam) {
if (saveParam == null) {
throw new SalaryRunTimeException("参数异常");
}
if (CollectionUtils.isEmpty(saveParam.getCurrentSettingFields())) {
throw new SalaryRunTimeException("字段不能为空");
}
// 所有字段
List allAttendFields = getAllAttendQuoteFields();
List attendFields = saveParam.getCurrentSettingFields();
for (AttendModuleSettingFieldParam attendField : attendFields) {
Optional optional = allAttendFields.stream().filter(e -> e.getId().equals(attendField.getId())).findFirst();
if (!optional.isPresent()) {
throw new SalaryRunTimeException(String.format("字段不存在[id:%s]", attendField.getId()));
}
}
String currentSettingContent = JSON.toJSONString(attendFields);
// 获取字段设置
List list = biz.getAttendQuoteFieldSetting(saveParam.getSourceType());
String sourceTypeName = saveParam.getSourceType() == AttendQuoteSourceTypeEnum.QUOTE ? "引用考勤" : "导入数据";
Date now = new Date();
if (CollectionUtils.isEmpty(list)) {
AttendQuoteFieldSettingPO po = AttendQuoteFieldSettingPO.builder()
.sourceType(saveParam.getSourceType().getValue())
.currentSettingContent(currentSettingContent)
.createTime(now)
.updateTime(now)
.creator((long) user.getUID())
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build();
// todo 记录日志
biz.insert(po);
} else {
AttendQuoteFieldSettingPO oldObject = list.get(0);
AttendQuoteFieldSettingPO newObject = new AttendQuoteFieldSettingPO();
BeanUtils.copyProperties(oldObject, newObject);
newObject.setCurrentSettingContent(currentSettingContent);
newObject.setUpdateTime(now);
// 更新
biz.updateById(newObject);
// todo 记录日志
}
return null;
}
@Override
public String saveAsDefault(AttendQuoteFieldSettingSaveParam saveParam) {
if (CollectionUtils.isEmpty(saveParam.getCurrentSettingFields())) {
throw new SalaryRunTimeException("字段不能为空");
}
// 所有字段
List allAttendFields = getAllAttendQuoteFields();
List attendFields = saveParam.getCurrentSettingFields();
for (AttendModuleSettingFieldParam attendField : attendFields) {
Optional optional = allAttendFields.stream().filter(e -> e.getId().equals(attendField.getId())).findFirst();
if (!optional.isPresent()) {
throw new SalaryRunTimeException(String.format("字段不存在[id:%s]", attendField.getId()));
}
}
String currentSettingContent = JSON.toJSONString(attendFields);
Date now = new Date();
// 获取字段设置
List list = biz.getAttendQuoteFieldSetting(saveParam.getSourceType());
String sourceTypeName = saveParam.getSourceType() == AttendQuoteSourceTypeEnum.QUOTE ? "引用考勤" : "导入数据";
if (CollectionUtils.isEmpty(list)) {
AttendQuoteFieldSettingPO po = AttendQuoteFieldSettingPO.builder()
.sourceType(saveParam.getSourceType().getValue())
.currentSettingContent(currentSettingContent)
.defaultSettingContent(currentSettingContent)
.createTime(now)
.updateTime(now)
.creator((long) user.getUID())
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build();
// todo 记录日志
biz.insert(po);
} else {
AttendQuoteFieldSettingPO oldObject = list.get(0);
AttendQuoteFieldSettingPO newObject = new AttendQuoteFieldSettingPO();
BeanUtils.copyProperties(oldObject, newObject);
newObject.setCurrentSettingContent(currentSettingContent);
newObject.setDefaultSettingContent(currentSettingContent);
newObject.setUpdateTime(now);
// 更新
biz.updateById(newObject);
// todo 记录日志
}
return null;
}
}