weaver-hrm-salary/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java

623 lines
35 KiB
Java
Raw Normal View History

2023-05-08 09:27:20 +08:00
package com.engine.salary.entity.salaryBill.bo;
2023-06-06 09:51:07 +08:00
import com.cloudstore.dev.api.bean.MessageBean;
import com.cloudstore.dev.api.bean.MessageType;
import com.cloudstore.dev.api.util.Util_Message;
2023-05-08 09:27:20 +08:00
import com.engine.salary.annotation.SalaryFormulaVar;
import com.engine.salary.constant.SalaryArchiveConstant;
import com.engine.salary.constant.SalaryTemplateSalaryItemSetGroupConstant;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.salaryBill.dto.SalaryBillSendDTO;
import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemListDTO;
import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemSetListDTO;
2023-06-05 13:35:17 +08:00
import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO;
2023-05-08 09:27:20 +08:00
import com.engine.salary.entity.salaryformula.dto.SalaryFormulaEmployeeDTO;
2023-06-05 13:35:17 +08:00
import com.engine.salary.enums.salarybill.MessageChannelEnum;
2023-05-08 09:27:20 +08:00
import com.engine.salary.enums.salarybill.SalaryTemplateTextContentPositionEnum;
import com.engine.salary.enums.salarybill.SalaryTemplateWhetherEnum;
import com.engine.salary.util.SalaryDateUtil;
import com.engine.salary.util.SalaryI18nUtil;
import com.google.common.collect.Maps;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import weaver.common.MessageUtil;
2023-06-06 09:51:07 +08:00
import weaver.hrm.company.SubCompanyComInfo;
import weaver.hrm.resource.ResourceComInfo;
2023-05-08 09:27:20 +08:00
2023-06-06 09:51:07 +08:00
import java.io.IOException;
2023-05-08 09:27:20 +08:00
import java.lang.reflect.Field;
2023-06-02 14:38:56 +08:00
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
2023-06-06 09:51:07 +08:00
import java.text.SimpleDateFormat;
2023-05-08 09:27:20 +08:00
import java.time.LocalDateTime;
import java.util.*;
public class SalaryBillBO {
private static final Logger log = LoggerFactory.getLogger(SalaryBillBO.class);
@Override
public String toString() {
return "SalaryBillBO{}";
}
//
// /**
// * 根据模板内容转为工资单模板对象
// * 注意:不要通过反序列化,可能会因为历史原因修改字段名称而无法序列化
// *
// * @param salaryTemplateContent
// * @return
// */
// public static SalaryTemplatePO buildSalaryTemplateContent(String salaryTemplateContent) {
// Map<String, Object> map = JsonUtil.parseMap(salaryTemplateContent, Object.class);
// return SalaryTemplatePO.builder()
// .id(Long.valueOf(map.getOrDefault("id", "0").toString()))
// .name(map.getOrDefault("name", "").toString())
// .salarySobId(Long.valueOf(map.getOrDefault("salarySobId", "0").toString()))
// .useType(Integer.valueOf(map.getOrDefault("useType", "0").toString()))
// .description(map.getOrDefault("description", "").toString())
// .emailStatus(Integer.valueOf(map.getOrDefault("emailStatus", "0").toString()))
// .sendEmailId(Long.valueOf(map.getOrDefault("sendEmailId", "0").toString()))
//// .msgStatus(Integer.valueOf(map.getOrDefault("msgStatus","0").toString()))
//// .imStatus(Integer.valueOf(map.getOrDefault("imStatus","0").toString()))
//// .cloudBridgeStatus(Integer.valueOf(map.getOrDefault("cloudBridgeStatus","0").toString()))
// .theme(map.getOrDefault("theme", "").toString())
// .background(map.getOrDefault("background", "").toString())
// .textContent(map.getOrDefault("textContent", "").toString())
// .textContentPosition(Integer.valueOf(map.getOrDefault("textContentPosition", "0").toString()))
// .salaryItemNullStatus(Integer.valueOf(map.getOrDefault("salaryItemNullStatus", "0").toString()))
// .salaryItemZeroStatus(Integer.valueOf(map.getOrDefault("salaryItemZeroStatus", "0").toString()))
// .salaryItemSetting(map.getOrDefault("salaryItemSetting", "").toString())
// .replenishName(map.getOrDefault("replenishName", "").toString())
//// .replTheme(map.getOrDefault("replTheme","").toString())
//// .replBackground(map.getOrDefault("replBackground","").toString())
//// .replTextContent(map.getOrDefault("replTextContent","").toString())
//// .replTextContentPosition(Integer.valueOf(map.getOrDefault("replTextContentPosition","0").toString()))
//// .replSalaryItemNullStatus(Integer.valueOf(map.getOrDefault("replSalaryItemNullStatus","0").toString()))
//// .replSalaryItemZeroStatus(Integer.valueOf(map.getOrDefault("replSalaryItemZeroStatus","0").toString()))
//// .replenishSalaryItemSetting(map.getOrDefault("replenishSalaryItemSetting","").toString())
// .build();
// }
/**
* 构建人员字段
* 与SalaryAcctResultBO.buildEmployeeFieldName()的key value对调了一下
*
* @return
*/
public static Map<String, String> buildEmployeeFieldName() {
Field[] declaredFields = SalaryFormulaEmployeeDTO.class.getDeclaredFields();
Map<String, String> employeeFieldNameMap = Maps.newHashMapWithExpectedSize(declaredFields.length);
for (Field declaredField : declaredFields) {
if (!declaredField.isAnnotationPresent(SalaryFormulaVar.class)) {
continue;
}
SalaryFormulaVar annotation = declaredField.getAnnotation(SalaryFormulaVar.class);
employeeFieldNameMap.put(SalaryI18nUtil.getI18nLabel(annotation.labelId(), annotation.defaultLabel()), declaredField.getName());
}
return employeeFieldNameMap;
}
2023-06-02 14:38:56 +08:00
/**
* 构建工资单中的人员信息
*
* @param simpleEmployee
*/
2023-06-05 13:35:17 +08:00
public static void buildEmployeeInfo(SalaryBillSendDTO salaryBillSendParam, DataCollectionEmployee simpleEmployee) {
SalaryTemplateSalaryItemSetListDTO employeeInformation = salaryBillSendParam.getEmployeeInformation();
Map<String, String> employeeField = salaryBillSendParam.getEmployeeField();
2023-06-02 14:38:56 +08:00
if (employeeInformation == null || simpleEmployee == null) {
return;
}
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(employeeInformation.getItems())) {
//获取员工信息的字段名和中文描述的map关系
SalaryFormulaEmployeeDTO salaryFormulaEmployeeDTO = SalaryFormulaEmployeeDTO.builder().employeeId(simpleEmployee.getEmployeeId())
2023-06-05 13:35:17 +08:00
.taxAgentName(salaryBillSendParam.getTaxAgentName())
2023-06-02 14:38:56 +08:00
.departmentName(simpleEmployee.getDepartmentName())
.email(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getEmail()) ? "" : simpleEmployee.getEmail())
2023-05-08 09:27:20 +08:00
// .gradeName(simpleEmployee.getGrade() == null ? "" : simpleEmployee.getGrade().getName())
// .hireDate(SalaryDateUtil.getFormatLocalDate(simpleEmployee.getHiredate()))
// .sex(simpleEmployee.getSex() == null ? "" : simpleEmployee.getSex().getDescription())
2023-06-02 14:38:56 +08:00
.mobile(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getMobile()) ? "" : simpleEmployee.getMobile())
.jobtitleName(simpleEmployee.getJobtitleName())
2023-05-08 09:27:20 +08:00
// .status(StringUtils.isEmpty(simpleEmployee.getPersonnelStatus()) ? "" : simpleEmployee.getPersonnelStatus())
2023-06-02 14:38:56 +08:00
.telephone(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getTelephone()) ? "" : simpleEmployee.getTelephone())
.username(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getUsername()) ? "" : simpleEmployee.getUsername())
.workcode(simpleEmployee.getWorkcode())
.build();
List<SalaryTemplateSalaryItemListDTO> items = employeeInformation.getItems();
// 1.SalaryAcctResultBO.buildEmployeeFieldName()的取法
// Set<Map.Entry<String, String>> entries = employeeField.entrySet();
2023-05-08 09:27:20 +08:00
// for (SalaryTemplateSalaryItemListDTO e : items) {
2023-06-02 14:38:56 +08:00
// Optional<Map.Entry<String, String>> entry = entries.stream().filter(f -> Objects.equals(e.getName(), f.getValue())).findFirst();
// if (entry.isPresent()) {
// String key = entry.get().getKey();
// if (org.apache.commons.lang3.StringUtils.isNotBlank(key)) {
// String getter = "get" + key.substring(0, 1).toUpperCase() + key.substring(1);
// try {
// Method method = salaryFormulaEmployeeDTO.getClass().getMethod(getter);
// Object invoke = method.invoke(salaryFormulaEmployeeDTO);
// e.setSalaryItemValue((String) invoke);
// } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) {
// log.error("no such method", e);
// }
2023-05-08 09:27:20 +08:00
// }
// }
// }
2023-06-02 14:38:56 +08:00
// 2.SalaryBillBO.buildEmployeeFieldName()
for (SalaryTemplateSalaryItemListDTO e : items) {
String employeeFieldName = employeeField.get(e.getName());
if (!StringUtils.isEmpty(employeeFieldName)) {
String getter = "get" + employeeFieldName.substring(0, 1).toUpperCase() + employeeFieldName.substring(1);
try {
Method method = salaryFormulaEmployeeDTO.getClass().getMethod(getter);
Object invoke = method.invoke(salaryFormulaEmployeeDTO);
e.setSalaryItemValue((String) invoke);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) {
log.error("no such method", e);
}
}
}
}
}
2023-05-08 09:27:20 +08:00
/**
* 获取工资单标题
*
* @return
*/
2023-06-06 09:51:07 +08:00
public static String getBillTitle(String theme, Date salaryMonth, Long employeeId) {
String companyName = "";
if (theme.contains("${companyName}")) {
if (employeeId != null) {
ResourceComInfo resourceComInfo = null;
SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo();
try {
resourceComInfo = new ResourceComInfo();
subCompanyComInfo = new SubCompanyComInfo();
} catch (Exception e) {
log.error("资源异常", e);
}
companyName = subCompanyComInfo.getSubCompanyname(resourceComInfo.getSubCompanyID(employeeId + ""));
}
}
2023-05-08 09:27:20 +08:00
return theme
2023-06-06 09:51:07 +08:00
.replace("${companyName}", companyName)
.replace("${salaryMonth}", new SimpleDateFormat("yyyy年MM月").format(salaryMonth));
2023-05-08 09:27:20 +08:00
}
// /**
// * 构建发送消息
// *
// * @param e
// * @param allEmployeeMap
// * @param salaryBillSendParam
// * @param currentEmployeeId
// * @param currentTenantKey
// * @return
// */
// public static SendMessageEntity buildSendMessage(Map<String, Object> e, Map<String, SimpleEmployee> allEmployeeMap, SalaryBillSendDTO salaryBillSendParam, Long currentEmployeeId, String currentTenantKey) {
// // 构建用户基本信息
// SalaryBillBO.buildEmployeeInfo(salaryBillSendParam.getEmployeeInformation(), allEmployeeMap.get(e.get("employeeId").toString()), salaryBillSendParam.getEmployeeField());
// // 消息接收者
// List<UserEntity> receivers = Collections.singletonList(SalaryBillBO.buildUser(Long.valueOf(e.get("employeeId").toString()), Optional.ofNullable(e.get("email")).orElse("").toString(), currentTenantKey));
// Entity entity = SalaryBillBO.buildEntity(e.get("id").toString(), currentEmployeeId, salaryBillSendParam.getEntityName());
// EmailEntity emailInfo = new EmailEntity();
// // 邮箱打开
// if (salaryBillSendParam.isEnableEmail()) {
// String emailContent = SalaryBillBO.buildEmailContent(e, salaryBillSendParam);
// emailInfo = SalaryBillBO.buildEmailInfo(salaryBillSendParam.getText(), emailContent, salaryBillSendParam.getSalaryTemplate().getSendEmailId());
// }
// return SalaryBillBO.buildSendMessageEntity(salaryBillSendParam, receivers, entity, emailInfo);
// }
2023-06-06 09:51:07 +08:00
/**
* 发送Em消息
*/
public static void sendMsg(SalaryBillSendDTO salaryBillSendParam, Long id, Long employeeId) {
SalaryTemplatePO template = salaryBillSendParam.getSalaryTemplate();
String background = template.getBackground();
String billTitle = getBillTitle(template.getTheme(), salaryBillSendParam.getSalaryDate(), employeeId);
MessageType messageType = MessageType.newInstance(499); // 消息来源(见文档第四点补充 必填)
Set<String> userIdList = new HashSet<>(); // 接收人id 必填
userIdList.add(employeeId.toString());
String title = billTitle; // 标题
String context = "点击查看详情"; // 内容
// PC端链接
String linkUrl = weaver.general.GCONST.getContextPath() + "/spa/hrmSalary/static/index.html#/main/hrmSalary/mobilepayroll?id=" + id + "&recipient=" + employeeId;
// 移动端链接
String linkMobileUrl = weaver.general.GCONST.getContextPath() + "/spa/hrmSalary/static/index.html#/main/hrmSalary/mobilepayroll?type=phone&id=" + id + "&recipient=" + employeeId;
try {
MessageBean messageBean = Util_Message.createMessage(messageType, userIdList, title, context, linkUrl, linkMobileUrl);
messageBean.setCreater(Integer.parseInt(salaryBillSendParam.getSendUser().getUID() + ""));// 创建人id
messageBean.setBizState("0");// 需要修改消息为已处理等状态时传入,表示消息最初状态为待处理
messageBean.setTargetId("499|" + id); //消息来源code +“|”+业务id需要修改消息为已处理等状态时传入
if (StringUtils.isNotBlank(background)) {
messageBean.setPictureUrl(background);
} else {
messageBean.setPictureUrl("/hrm/hrm_e9/images/payroll.jpg?pictype=jpg");
}
Util_Message.store(messageBean);
} catch (IOException e) {
e.printStackTrace();
}
}
2023-05-08 09:27:20 +08:00
public static void sendEmail(Map<String, Object> e, Map<String, DataCollectionEmployee> allEmployeeMap, SalaryBillSendDTO salaryBillSendParam) {
// 消息接收者
String receivers = Optional.ofNullable(e.get("email")).orElse("").toString();
2023-06-06 09:51:07 +08:00
String title = getBillTitle(salaryBillSendParam.getSalaryTemplate().getTheme(), salaryBillSendParam.getSalaryDate(), Long.valueOf(e.get("employeeId").toString()));
2023-05-08 09:27:20 +08:00
String emailContent = SalaryBillBO.buildEmailContent(e, salaryBillSendParam);
2023-06-06 09:51:07 +08:00
if (StringUtils.isNotBlank(receivers)) {
MessageUtil.sendEmail(receivers, title, emailContent);
}
}
public static void sendSMS(SalaryBillSendDTO salaryBillSendParam, Long id, Long employeeId) {
// try {
// MessageUtil.sendSMS(mobile, content);
// } catch (Exception e) {
// kqLog.info("SendSMS error.resourceId:" + resourceId + ">>>>>>mobile>>>>>>" + mobile);
// log.writeLog(e);
// }
2023-05-08 09:27:20 +08:00
}
// /**
// * 构建发送消息
// *
// * @return
// */
// public static SendMessageEntity buildSendMessageEntity(SalaryBillSendDTO salaryBillSendParam, List<UserEntity> receivers, Entity entity, EmailEntity emailInfo) {
// SendMessageEntity smg = new SendMessageEntity();
// // 模块
// smg.setModule(MessageModule.HRSA);
// // 事件
// smg.setEvent(MessageEvent.PAYROLL);
//
// // 发送者
// smg.setSender(salaryBillSendParam.getSendUser() == null ? UserEntity.SYSTEM_USER : salaryBillSendParam.getSendUser());
// // 接收者
// smg.setReceivers(receivers);
// // 发送通道
// smg.setChannels(salaryBillSendParam.getSendChannels());
//
// // 消息内容
// smg.setText(salaryBillSendParam.getTitle());
//
// // 1.im
// smg.setEntity(entity);
// // 2.云桥
// smg.setPcUrl(entity.getPcUrl());
// smg.setAppUrl(entity.getH5Url());
// smg.setTitle(salaryBillSendParam.getTitle());
// smg.setContent(salaryBillSendParam.getTitle());
// smg.setPicUrl(salaryBillSendParam.getPicUrl());
// // 3.邮件
// smg.setEmailInfo(emailInfo);
//
// return smg;
// }
//
// /**
// * 构建用户
// *
// * @return
// */
// public static UserEntity buildUser(Long employeeId, String email, String tenantKey) {
// UserEntity user = new UserEntity(employeeId, tenantKey);
// if (!StringUtils.isEmpty(email)) {
// user.setEmail(email);
// }
// return user;
// }
2023-06-05 13:35:17 +08:00
/**
* 构建发送通道
*
* @param salaryTemplate
* @return
*/
public static Set<MessageChannelEnum> buildSendChannels(SalaryTemplatePO salaryTemplate) {
Set<MessageChannelEnum> channels = new HashSet<>();
if (salaryTemplate.getMsgStatus() == null || salaryTemplate.getMsgStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue())) {
channels.add(MessageChannelEnum.MSG);
}
if (salaryTemplate.getEmailStatus() != null && salaryTemplate.getEmailStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue()) && MessageUtil.checkSendEmail()) {
channels.add(MessageChannelEnum.EMAIL);
}
if (salaryTemplate.getSmsStatus() != null && salaryTemplate.getSmsStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue()) && MessageUtil.checkSendSMS()) {
channels.add(MessageChannelEnum.SMS);
}
return channels;
}
2023-05-08 09:27:20 +08:00
//
// /**
// * 构建实体
// *
// * @param id
// * @param currentEmployeeId
// * @param name
// * @return
// */
// public static Entity buildEntity(String id, Long currentEmployeeId, String name) {
// Entity e = new Entity();
// e.setId(String.valueOf(IdGenerator.generate()));
// e.setModule(EntityType.hrmsalary.name());
// e.setName(name);
// e.setH5Url("/mobile/salary/mySalaryBill/view/" + id);
//// e.setH5LinkeType(1);
// e.setPcUrl("/sp/salary/mySalaryBill/view/" + id);
//// e.setPcLinkeType(0);
//
// // im添加创建人创建时间、可在对应通道的模板中的内容或辅助信息标题等加上变量${creator}$和${createTime}$
// e.setCreatorId(currentEmployeeId);
// e.setCreateTime(new Date());
// return e;
// }
//
// /**
// * 构建邮件信息
// *
// * @param emailSubject 邮件主题
// * @param emailContent 邮件内容
// * @param mailUserAccountId 邮箱账号id
// * @return
// */
// public static EmailEntity buildEmailInfo(String emailSubject, String emailContent, Long mailUserAccountId) {
// EmailEntity entity = new EmailEntity();
// entity.setEmailContent(emailContent);
// entity.setEmailSubject(emailSubject);
// // 发送者邮箱
// entity.setMailUserAccountId(mailUserAccountId);
// return entity;
// }
//
// /**
// * 构建撤回消息
// *
// * @param msgId
// * @param text
// * @param title
// * @param currentEmployeeId
// * @param currentTenantKey
// * @return
// */
// public static CancleMessageEntity buildCancleMessageEntity(long msgId, String text, String title, Long currentEmployeeId, String currentTenantKey) {
// CancleMessageEntity cme = new CancleMessageEntity();
// cme.setMsgId(msgId);
// // 模块
// cme.setModule(MessageModule.HRSA);
// // 事件
// cme.setEvent(MessageEvent.PAYROLL);
//
// cme.setText(text);
//
// Entity entity = new Entity();
// entity.setId(String.valueOf(IdGenerator.generate()));
// entity.setModule(EntityType.hrmsalary.name());
// entity.setName(title);
// cme.setEntity(entity);
// UserEntity user = new UserEntity(currentEmployeeId, currentTenantKey);
// cme.setOperator(user);
// return cme;
// }
/**
* 构建邮件内容
* 注意样式只能在标签style属性中使用否则样式不生效
*
* @param e
* @param salaryBillSendParam
* @return
*/
public static String buildEmailContent(Map<String, Object> e, SalaryBillSendDTO salaryBillSendParam) {
StringBuilder emailContent = new StringBuilder();
emailContent.append("<div style='display: flex;flex-direction: column;justify-content: flex-start;align-items: center;padding: 16px;'>");
// 1.标题
emailContent.append("<div style='width: 100%;min-height: 22px; line-height: 30px; font-family: PingFangSC-Medium;font-size: 22px;color: #020202;font-weight: 500;text-align: center;'>");
2023-06-06 09:51:07 +08:00
// emailContent.append(salaryBillSendParam.getTitle());
2023-06-07 17:19:00 +08:00
emailContent.append(getBillTitle(salaryBillSendParam.getSalaryTemplate().getTheme(), salaryBillSendParam.getSalaryDate(), Long.valueOf(e.get("employeeId").toString())));
2023-05-08 09:27:20 +08:00
emailContent.append("</div>");
// 2.发送时间
emailContent.append("<div style='width: 100%;margin-top: 16px;text-align: center;height: 14px;font-family: PingFangSC-Regular;font-size: 14px;color: #999999;line-height: 14px;font-weight: 400;'>");
emailContent.append(SalaryDateUtil.getFormatLocalDateTime(LocalDateTime.now()));
emailContent.append("</div>");
// 3.背景图-base64
// if (!StringUtils.isEmpty(salaryBillSendParam.getBackgroundBase64())) {
// emailContent.append("<div style='margin-top: 32px;'><img src='data:image/jpg;base64,");
// emailContent.append(salaryBillSendParam.getBackgroundBase64());
// emailContent.append("'/></div>");
// }
// 3.背景图-url
2023-06-07 17:19:00 +08:00
// if (StringUtils.isNotEmpty(salaryBillSendParam.getSalaryTemplate().getBackground())) {
// emailContent.append("<div style='margin-top: 32px;'><img src='");
// emailContent.append(salaryBillSendParam.getPicUrl());
// emailContent.append("'/></div>");
// }
2023-05-08 09:27:20 +08:00
// 是否只有一个分组,如果是,则将文本内容放进薪资项目表格前后
boolean isOnlyOneGroup = salaryBillSendParam.getSalaryItemSetList().stream().filter(st -> CollectionUtils.isNotEmpty(st.getItems())).count() == 1;
if (isOnlyOneGroup) {
buildOnlyOneGroupMailMain(emailContent, e, salaryBillSendParam);
} else {
buildMailMain(emailContent, e, salaryBillSendParam);
}
emailContent.append("</div>");
return emailContent.toString();
}
/**
* 构建邮件内容主体
*
* @param emailContent
* @param e
* @param salaryBillSendParam
*/
private static void buildMailMain(StringBuilder emailContent, Map<String, Object> e, SalaryBillSendDTO salaryBillSendParam) {
// 薪资项是否显示
boolean isHideNull = salaryBillSendParam.getSalaryTemplate().getSalaryItemNullStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue());
boolean isHideZero = salaryBillSendParam.getSalaryTemplate().getSalaryItemZeroStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue());
// 3.文本内容-如果在薪资项目前
emailContent.append("<div style='width: 100%;margin-top: 16px;text-align: center;min-height: 12px;font-family: PingFangSC-Regular;font-size: 12px;color: #111111;");
emailContent.append(salaryBillSendParam.getSalaryTemplate().getTextContentPosition() == SalaryTemplateTextContentPositionEnum.BEFORE.getValue() ? "" : "display: none");
emailContent.append("'>");
emailContent.append(salaryBillSendParam.getSalaryTemplate().getTextContent());
emailContent.append("</div>");
// 4.薪资项目内容
emailContent.append("<div style='margin-top: 16px;width: 100%;'>");
for (SalaryTemplateSalaryItemSetListDTO salaryItemSet : salaryBillSendParam.getSalaryItemSetList()) {
if (CollectionUtils.isEmpty(salaryItemSet.getItems())) {
continue;
}
emailContent.append("<div style='margin-bottom: 16px;'>");
if (!salaryItemSet.getGroupId().equals(SalaryTemplateSalaryItemSetGroupConstant.NO_TYPE_GROUP_ID)) {
emailContent.append("<div style='padding: 0 16px;width: 100%;font-family: PingFangSC-Regular;font-size: 18px;box-sizing: border-box;'>");
// 4.1.薪资项目组名
emailContent.append(salaryItemSet.getGroupName());
emailContent.append("</div>");
}
emailContent.append("<div style='margin-top: 16px;width: 100%;display: flex;flex-direction: column;align-items: flex-start;box-sizing: border-box;'>");
for (int i = 0; i < salaryItemSet.getItems().size(); i++) {
SalaryTemplateSalaryItemListDTO salaryItem = salaryItemSet.getItems().get(i);
// 员工基本信息
if (salaryItemSet.getGroupId().equals(SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID) && salaryBillSendParam.getEmployeeInformation() != null) {
Optional<SalaryTemplateSalaryItemListDTO> optionalEmpItem = salaryBillSendParam.getEmployeeInformation().getItems().stream().filter(f -> f.getId().equals(salaryItem.getId())).findFirst();
// 4.2.员工信息
emailContent.append("<div style='border: 1px solid #e5e5e5;border-bottom: none;width: 100%;display: flex;justify-content: flex-start;align-items: center;box-sizing: border-box;");
emailContent.append(i == (salaryItemSet.getItems().size() - 1) ? "border-bottom: 1px solid #e5e5e5;" : "");
emailContent.append("'>");
emailContent.append("<div style='min-height: 60px;padding: 0 16px;flex: 2;background: #fbfbfb;border-right: 1px solid #e5e5e5;display: flex;align-items: center;justify-content: left;' title={name}>");
emailContent.append("<span class='text'>");
emailContent.append((optionalEmpItem.isPresent() ? optionalEmpItem.get().getName() : ""));
emailContent.append("</span>");
emailContent.append("</div>");
emailContent.append("<div style='min-height: 60px;flex: 8;padding-left: 16px;background: #ffffff;display: flex;align-items: center;justify-content: left;'>");
emailContent.append((optionalEmpItem.isPresent() ? optionalEmpItem.get().getSalaryItemValue() : ""));
emailContent.append("</div>");
emailContent.append("</div>");
} else {
for (Object keyName : e.keySet()) {
if ((salaryItem.getId() + SalaryArchiveConstant.DYNAMIC_SUFFIX).equals(keyName.toString())) {
boolean isHide = (isHideNull && e.get(keyName.toString()) != null) || (isHideZero && "0.00".equals(e.get(keyName.toString())));
// 4.2.薪资项目
emailContent.append("<div style='border: 1px solid #e5e5e5;border-bottom: none;width: 100%;display: flex;justify-content: flex-start;align-items: center;box-sizing: border-box;");
emailContent.append(i == (salaryItemSet.getItems().size() - 1) ? "border-bottom: 1px solid #e5e5e5;" : "");
emailContent.append((isHide ? "display: none" : ""));
emailContent.append("'>");
emailContent.append("<div style='min-height: 60px;padding: 0 16px;flex: 2;background: #fbfbfb;border-right: 1px solid #e5e5e5;display: flex;align-items: center;justify-content: left;' title={name}>");
emailContent.append("<span class='text'>");
emailContent.append(salaryItem.getName());
emailContent.append("</span>");
emailContent.append("</div>");
emailContent.append("<div style='min-height: 60px;flex: 8;padding-left: 16px;background: #ffffff;display: flex;align-items: center;justify-content: left;'>");
emailContent.append(e.get(keyName.toString()));
emailContent.append("</div>");
emailContent.append("</div>");
break;
}
}
}
}
emailContent.append("</div>");
emailContent.append("</div>");
}
emailContent.append("</div>");
// 5.文本内容-如果在薪资项目后
emailContent.append("<div style='width: 100%;margin-top: 16px;text-align: center;min-height: 12px;font-family: PingFangSC-Regular;font-size: 12px;color: #111111;");
emailContent.append(salaryBillSendParam.getSalaryTemplate().getTextContentPosition() == SalaryTemplateTextContentPositionEnum.AFTER.getValue() ? "" : "display: none");
emailContent.append("'>");
emailContent.append(salaryBillSendParam.getSalaryTemplate().getTextContent());
emailContent.append("</div>");
}
/**
* 构建邮件内容主体
* <p>
* 只有无分类则将文本内容放进薪资项目表格前后
*
* @param emailContent
* @param e
* @param salaryBillSendParam
*/
private static void buildOnlyOneGroupMailMain(StringBuilder emailContent, Map<String, Object> e, SalaryBillSendDTO salaryBillSendParam) {
// 薪资项是否显示
boolean isHideNull = salaryBillSendParam.getSalaryTemplate().getSalaryItemNullStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue());
boolean isHideZero = salaryBillSendParam.getSalaryTemplate().getSalaryItemZeroStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue());
// 4.薪资项目内容
emailContent.append("<div style='margin-top: 16px;width: 100%;'>");
for (SalaryTemplateSalaryItemSetListDTO salaryItemSet : salaryBillSendParam.getSalaryItemSetList()) {
if (CollectionUtils.isEmpty(salaryItemSet.getItems())) {
continue;
}
emailContent.append("<div style='margin-bottom: 16px;'>");
emailContent.append("<div style='margin-top: 16px;width: 100%;display: flex;flex-direction: column;align-items: flex-start;box-sizing: border-box;'>");
// 3.文本内容-如果在薪资项目前
emailContent.append("<div style='border: 1px solid #e5e5e5;border-bottom: none;width: 100%;display: flex;justify-content: flex-start;align-items: center;box-sizing: border-box;");
emailContent.append(salaryBillSendParam.getSalaryTemplate().getTextContentPosition() == SalaryTemplateTextContentPositionEnum.BEFORE.getValue() ? "" : "display: none");
emailContent.append("'>");
emailContent.append("<div style='min-height: 60px;padding: 0 16px;flex: 2;background: #fbfbfb;border-right: 1px solid #e5e5e5;display: flex;align-items: center;justify-content: left;align-self: stretch;' title={name}>");
emailContent.append("<span class='text'>");
emailContent.append(salaryBillSendParam.getRemarkI18n());
emailContent.append("</span>");
emailContent.append("</div>");
emailContent.append("<div style='min-height: 60px;flex: 8;padding-left: 16px;background: #ffffff;display: flex;align-items: center;justify-content: left;'>");
emailContent.append(salaryBillSendParam.getSalaryTemplate().getTextContent());
emailContent.append("</div>");
emailContent.append("</div>");
for (int i = 0; i < salaryItemSet.getItems().size(); i++) {
SalaryTemplateSalaryItemListDTO salaryItem = salaryItemSet.getItems().get(i);
for (Object keyName : e.keySet()) {
if ((salaryItem.getId() + SalaryArchiveConstant.DYNAMIC_SUFFIX).equals(keyName.toString())) {
boolean isHide = (isHideNull && e.get(keyName.toString()) != null) || (isHideZero && "0.00".equals(e.get(keyName.toString())));
// 4.2.薪资项目
emailContent.append("<div style='border: 1px solid #e5e5e5;border-bottom: none;width: 100%;display: flex;justify-content: flex-start;align-items: center;box-sizing: border-box;");
emailContent.append(i == (salaryItemSet.getItems().size() - 1) && salaryBillSendParam.getSalaryTemplate().getTextContentPosition() == SalaryTemplateTextContentPositionEnum.BEFORE.getValue() ? "border-bottom: 1px solid #e5e5e5;" : "");
emailContent.append((isHide ? "display: none" : ""));
emailContent.append("'>");
emailContent.append("<div style='min-height: 60px;padding: 0 16px;flex: 2;background: #fbfbfb;border-right: 1px solid #e5e5e5;display: flex;align-items: center;justify-content: left;' title={name}>");
emailContent.append("<span class='text'>");
emailContent.append(salaryItem.getName());
emailContent.append("</span>");
emailContent.append("</div>");
emailContent.append("<div style='min-height: 60px;flex: 8;padding-left: 16px;background: #ffffff;display: flex;align-items: center;justify-content: left;'>");
emailContent.append(e.get(keyName.toString()));
emailContent.append("</div>");
emailContent.append("</div>");
break;
}
}
}
// 5.文本内容-如果在薪资项目后
emailContent.append("<div style='border: 1px solid #e5e5e5;border-bottom: none;width: 100%;display: flex;justify-content: flex-start;align-items: center;box-sizing: border-box;");
emailContent.append(salaryBillSendParam.getSalaryTemplate().getTextContentPosition() == SalaryTemplateTextContentPositionEnum.AFTER.getValue() ? "border-bottom: 1px solid #e5e5e5;" : "display: none");
emailContent.append("'>");
emailContent.append("<div style='min-height: 60px;padding: 0 16px;flex: 2;background: #fbfbfb;border-right: 1px solid #e5e5e5;display: flex;align-items: center;justify-content: left;align-self: stretch;' title={name}>");
emailContent.append("<span class='text'>");
emailContent.append(salaryBillSendParam.getRemarkI18n());
emailContent.append("</span>");
emailContent.append("</div>");
emailContent.append("<div style='min-height: 60px;flex: 8;padding-left: 16px;background: #ffffff;display: flex;align-items: center;justify-content: left;'>");
emailContent.append(salaryBillSendParam.getSalaryTemplate().getTextContent());
emailContent.append("</div>");
emailContent.append("</div>");
emailContent.append("</div>");
emailContent.append("</div>");
}
emailContent.append("</div>");
}
}