水印 - 暂存2

This commit is contained in:
Harryxzy 2023-06-12 15:19:24 +08:00
parent 76977331af
commit 7a40a31d6f
4 changed files with 209 additions and 9 deletions

View File

@ -8,6 +8,7 @@ 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.SalaryBillWatermarkDTO;
import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemListDTO;
import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemSetListDTO;
import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO;
@ -31,6 +32,7 @@ import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
@ -38,6 +40,7 @@ import java.util.*;
public class SalaryBillBO {
private static final Logger log = LoggerFactory.getLogger(SalaryBillBO.class);
@Override
public String toString() {
return "SalaryBillBO{}";
@ -251,16 +254,22 @@ public class SalaryBillBO {
}
public static void sendEmail(Map<String, Object> e, Map<String, DataCollectionEmployee> allEmployeeMap, SalaryBillSendDTO salaryBillSendParam) {
StringBuilder emailContent = new StringBuilder();
emailContent.append("<div class='container' style='position: relative; overflow: auto;'>");
// 消息接收者
String receivers = Optional.ofNullable(e.get("email")).orElse("").toString();
String title = getBillTitle(salaryBillSendParam.getSalaryTemplate().getTheme(), salaryBillSendParam.getSalaryDate(), Long.valueOf(e.get("employeeId").toString()));
String emailContent = SalaryBillBO.buildEmailContent(e, salaryBillSendParam);
SalaryBillBO.buildEmailContent(emailContent, e, salaryBillSendParam);
// 构建水印内容
buildEmailWatermarkContent(emailContent, e, salaryBillSendParam);
emailContent.append("</div>");
if (StringUtils.isNotBlank(receivers)) {
MessageUtil.sendEmail(receivers, title, emailContent);
MessageUtil.sendEmail(receivers, title, emailContent.toString());
}
}
public static void sendSMS(SalaryBillSendDTO salaryBillSendParam, Long id, Long employeeId) {
// try {
@ -419,8 +428,7 @@ public class SalaryBillBO {
* @param salaryBillSendParam
* @return
*/
public static String buildEmailContent(Map<String, Object> e, SalaryBillSendDTO salaryBillSendParam) {
StringBuilder emailContent = new StringBuilder();
public static void buildEmailContent(StringBuilder emailContent, Map<String, Object> e, SalaryBillSendDTO salaryBillSendParam) {
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;'>");
@ -453,7 +461,6 @@ public class SalaryBillBO {
}
emailContent.append("</div>");
return emailContent.toString();
}
/**
@ -619,4 +626,172 @@ public class SalaryBillBO {
}
emailContent.append("</div>");
}
public static String HRM_Name = "HRM_Name";
public static String HRM_Num = "HRM_Num";
public static String HRM_Mobile = "HRM_Mobile";
public static String HRM_Email = "HRM_Email";
public static String HRM_CurrentOperatorId = "HRM_CurrentOperatorId";
public static String HRM_Department = "HRM_Department";
public static String HRM_SecondDepartment = "HRM_SecondDepartment";
public static String HRM_CurrentDate = "HRM_CurrentDate";
public static String HRM_CurrentTime = "HRM_CurrentTime";
public static String HRM_prefix = "$";
/**
* 构建水印
*
* 当前所拥有的变量
* "HRM_Name",当前操作者姓名
* "HRM_Num",当前操作者编号
* "HRM_Mobile",当前操作者移动电话
* "HRM_Email",当前操作者电子邮件
* "HRM_CurrentOperatorId",当前操作者人员ID
* "HRM_Department",当前操作者部门
* "HRM_SecondDepartment",当前操作者分部
* "HRM_CurrentDate",当前日期
* "HRM_CurrentTime"当前时间
*
* @param emailContent
* @param e
* @param salaryBillSendParam
*/
private static void buildEmailWatermarkContent(StringBuilder emailContent, Map<String, Object> e, SalaryBillSendDTO salaryBillSendParam) {
if (Objects.isNull(salaryBillSendParam.getWatermarkSetting())) {
return;
}
String emailWmContentTemplate = salaryBillSendParam.getEmailWmContentTemplate();
List<String> wmTextFieldIds = salaryBillSendParam.getWmTextFieldIds();
// 没有变量则直接返回
if (CollectionUtils.isEmpty(wmTextFieldIds)) {
emailContent.append(emailWmContentTemplate);
} else {
for (String wmTextFieldId : wmTextFieldIds) {
// 当前操作者姓名
if (HRM_Name.equals(wmTextFieldId)) {
emailWmContentTemplate = emailWmContentTemplate.replace(HRM_prefix + HRM_Name, Optional.ofNullable(e.get("username")).orElse(StringUtils.EMPTY).toString());
// 当前操作者编号
} else if (HRM_Num.equals(wmTextFieldId)) {
emailWmContentTemplate = emailWmContentTemplate.replace(HRM_prefix + HRM_Num, Optional.ofNullable(e.get("jobNum")).orElse(StringUtils.EMPTY).toString());
// 当前操作者移动电话
} else if (HRM_Mobile.equals(wmTextFieldId)) {
emailWmContentTemplate = emailWmContentTemplate.replace(HRM_prefix + HRM_Mobile, Optional.ofNullable(e.get("mobile")).orElse(StringUtils.EMPTY).toString());
// 当前操作者电子邮件
} else if (HRM_Email.equals(wmTextFieldId)) {
emailWmContentTemplate = emailWmContentTemplate.replace(HRM_prefix + HRM_Email, Optional.ofNullable(e.get("email")).orElse(StringUtils.EMPTY).toString());
// 当前操作者人员ID
} else if (HRM_CurrentOperatorId.equals(wmTextFieldId)) {
emailWmContentTemplate = emailWmContentTemplate.replace(HRM_prefix + HRM_CurrentOperatorId, Optional.ofNullable(e.get("id")).orElse(StringUtils.EMPTY).toString());
// 当前操作者分部
} else if (HRM_Department.equals(wmTextFieldId)) {
emailWmContentTemplate = emailWmContentTemplate.replace(HRM_prefix + HRM_Department, Optional.ofNullable(e.get("department")).orElse(StringUtils.EMPTY).toString());
} else if (HRM_SecondDepartment.equals(wmTextFieldId)) {
emailWmContentTemplate = emailWmContentTemplate.replace(HRM_prefix + HRM_SecondDepartment, Optional.ofNullable(e.get("subCompanyName")).orElse(StringUtils.EMPTY).toString());
// 当前日期
} else if (HRM_CurrentDate.equals(wmTextFieldId)) {
emailWmContentTemplate = emailWmContentTemplate.replace(HRM_prefix + HRM_CurrentDate, SalaryDateUtil.getFormatLocalDate(LocalDate.now()));
// 当前时间
} else if (HRM_CurrentTime.equals(wmTextFieldId)) {
emailWmContentTemplate = emailWmContentTemplate.replace(HRM_prefix + HRM_CurrentTime, SalaryDateUtil.getFormatLocalDateTime(LocalDateTime.now()));
}
}
emailContent.append(emailWmContentTemplate);
}
}
/**
* 获取工资单水印文本动态变量
*
* @param domain
* @param salaryBillWatermark
* @return
*/
public static List<String> getWmTextFieldIds(String domain, SalaryBillWatermarkDTO salaryBillWatermark) {
List<String> wmTextFieldIds = Collections.emptyList();
// 没有水印关闭水印或者系统水印则不拼接
// if (Objects.isNull(salaryBillWatermark) || !salaryBillWatermark.getWatermarkStatus() || !SalaryTemplateWatermarkTypeEnum.CUSTOM.getValue().equals(salaryBillWatermark.getWatermarkType())) {
if (Objects.isNull(salaryBillWatermark) || !salaryBillWatermark.getWatermarkStatus() ) {
return wmTextFieldIds;
}
String wmClassify = salaryBillWatermark.getWmSetting().getOrDefault("wmClassify", StringUtils.EMPTY).toString();
if ("text".equals(wmClassify)) {
wmTextFieldIds = (List<String>) salaryBillWatermark.getWmSetting().getOrDefault("wmSelectedFieldIds", Collections.emptyList());
List<String> empFields = Arrays.asList(HRM_Name, HRM_Num, HRM_Mobile, HRM_Email, HRM_CurrentOperatorId, HRM_Department);
if (wmTextFieldIds.contains(HRM_SecondDepartment)) {
// 需要查分部
salaryBillWatermark.getWmSetting().put("needQuerySubDepart", true);
}
// 需要查人员
salaryBillWatermark.getWmSetting().put("needQueryEmp", wmTextFieldIds.stream().anyMatch(empFields::contains));
salaryBillWatermark.getWmSetting().remove("wmImg");
} else if ("image".equals(wmClassify)) {
List<Map<String, Object>> wmImgs = Collections.emptyList();
try {
wmImgs = (List<Map<String, Object>>) salaryBillWatermark.getWmSetting().getOrDefault("wmImg", Collections.emptyList());
} catch (Exception exception) {
log.error("工资单水印图片转换失败");
}
if (CollectionUtils.isNotEmpty(wmImgs)) {
Map<String, Object> map = wmImgs.get(0);
String fileid = map.getOrDefault("fileid", StringUtils.EMPTY).toString();
if (StringUtils.isNotEmpty(fileid)) {
String imgSrc = domain + String.format("/papi/file/preview?type=imgs&fileId=%s&random=123456", fileid);
salaryBillWatermark.getWmSetting().put("wmImg", imgSrc);
}
}
salaryBillWatermark.getWmSetting().remove("wmText");
salaryBillWatermark.getWmSetting().remove("wmSelectedFieldIds");
}
// 作为快照去掉不必要的属性节省空间
salaryBillWatermark.getWmSetting().remove("wmOriginText");
salaryBillWatermark.getWmSetting().remove("pureWmText");
return wmTextFieldIds;
}
public static String buildEmailWmContentTemplate(boolean isEnableEmail, SalaryBillWatermarkDTO watermarkSetting) {
String emailWmContentTemplate = StringUtils.EMPTY;
// 没有水印关闭水印则不拼接
if (!isEnableEmail || Objects.isNull(watermarkSetting) || !watermarkSetting.getWatermarkStatus() ) {
return emailWmContentTemplate;
}
String wmClassify = watermarkSetting.getWmSetting().getOrDefault("wmClassify", StringUtils.EMPTY).toString();
String variable = StringUtils.EMPTY;
if ("text".equals(wmClassify)) {
variable = watermarkSetting.getWmSetting().getOrDefault("wmText", StringUtils.EMPTY).toString();
} else if ("image".equals(wmClassify)) {
String imgSrc = watermarkSetting.getWmSetting().getOrDefault("wmImg", StringUtils.EMPTY).toString();
variable = "<img width='90%' src='" + imgSrc + "' />";
watermarkSetting.getWmSetting().put("wmImg", imgSrc);
}
if (StringUtils.isEmpty(variable)) {
return emailWmContentTemplate;
}
String wmNoTransparent = watermarkSetting.getWmSetting().getOrDefault("wmNoTransparent", "0.15").toString();
String wmRotate = watermarkSetting.getWmSetting().getOrDefault("wmRotate", 0).toString();
double deg = new Double(wmRotate) / 100.00;
StringBuilder emailWmContentTemp = new StringBuilder();
emailWmContentTemp.append("<div class='water-mark'>");
emailWmContentTemp.append("<div class='container' style='pointer-events: none; position: absolute; width: 100%; height: 100%; overflow: hidden; z-index: 9999; top: 0px; left: 0px;display: flex; flex-direction: column; justify-content: space-between; align-items: center;'>");
for (int i = 0; i < 20; i++) {
emailWmContentTemp.append("<div class='row' style='width: 100%; min-height: 180px ; overflow: hidden; display: flex;justify-content: center;justify-content: center;'>");
for (int j = 0; j < 10; j++) {
emailWmContentTemp.append("<div class='item' style='display: flex;flex-direction: column; align-items: center;justify-content: center; min-width: 280px; height: 180px;opacity: "+wmNoTransparent+"; transform: rotate(-"+deg+"deg);'>");
// 赋值
emailWmContentTemp.append(variable);
emailWmContentTemp.append("</div>");
}
emailWmContentTemp.append("</div>");
}
emailWmContentTemp.append("</div>");
emailWmContentTemp.append("</div>");
return emailWmContentTemp.toString();
}
}

View File

@ -62,6 +62,8 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB
if (saveParam.getWatermarkStatus()) {
if (SalaryTemplateWatermarkTypeEnum.CUSTOM.equals(saveParam.getWatermark())) {
wmSetting = JsonUtil.toJsonString(saveParam.getWmSetting());
}else{
// 系统默认水印 给一个默认的json
}
watermark = saveParam.getWatermark().getValue();
} else {

View File

@ -12,6 +12,7 @@ import com.engine.salary.entity.progress.ProgressDTO;
import com.engine.salary.entity.salaryBill.bo.SalaryBillBO;
import com.engine.salary.entity.salaryBill.bo.SalaryTemplateBO;
import com.engine.salary.entity.salaryBill.dto.SalaryBillSendDTO;
import com.engine.salary.entity.salaryBill.dto.SalaryBillWatermarkDTO;
import com.engine.salary.entity.salaryBill.dto.SalarySendInfoListDTO;
import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemSetListDTO;
import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam;
@ -25,6 +26,7 @@ import com.engine.salary.entity.salarysob.po.SalarySobPO;
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
import com.engine.salary.enums.salarybill.MessageChannelEnum;
import com.engine.salary.enums.salarybill.SalarySendStatusEnum;
import com.engine.salary.enums.salarybill.SalaryTemplateWhetherEnum;
import com.engine.salary.enums.salarysend.SalarySendGrantTypeEnum;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.mapper.salarybill.SalarySendInfoMapper;
@ -107,6 +109,11 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService
return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user);
}
private SalaryBillBaseSetService getSalaryBillBaseSetService(User user) {
return ServiceUtil.getService(SalaryBillBaseSetServiceImpl.class, user);
}
private SalarySendInfoBiz salarySendInfoMapper = new SalarySendInfoBiz();
private SalarySendBiz mapper = new SalarySendBiz();
@ -214,7 +221,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService
List<Long> successIds = sendMessage(enableSendList, salaryBillSendParam);
// 4.发放
grantSendInfo(successIds, salarySend, salaryTemplate);
grantSendInfo(successIds, salarySend, salaryTemplate, salaryBillSendParam);
// 5.更新数量
updateSendNum(salarySend, salarySob);
@ -290,6 +297,14 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService
.setTextContent(salaryTemplate.getTextContent().replace("${salaryMonth}", salaryMonth.getYear() + yearI18n + salaryMonth.getMonth() + monthI18n));
}
// 工资单水印设置
SalaryBillWatermarkDTO salaryBillWatermark = getSalaryBillBaseSetService(user).getWatermarkSetting();
// 工资单水印文本动态变量
List<String> wmTextFieldIds = SalaryBillBO.getWmTextFieldIds(domain, salaryBillWatermark);
// 邮件水印模板
boolean isEnableEmail = salaryTemplate.getEmailStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue());
String emailWmContentTemplate = SalaryBillBO.buildEmailWmContentTemplate(isEnableEmail, salaryBillWatermark);
return SalaryBillSendDTO.builder()
.salaryDate(salaryMonth)
// 消息标题
@ -326,6 +341,12 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService
// .incomeCategorys(incomeCategorys)
//薪资项目收入所得类型
// .salaryItemIncomeCategoryMap(salaryItemIncomeCategoryMap)
// 工资单水印设置
.watermarkSetting(salaryBillWatermark)
// 工资单水印文本动态变量
.wmTextFieldIds(wmTextFieldIds)
// 邮件水印模板
.emailWmContentTemplate(emailWmContentTemplate)
.build();
}
@ -599,7 +620,10 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService
* @param salarySend
* @param salaryTemplate
*/
private void grantSendInfo(List<Long> ids, SalarySendPO salarySend, SalaryTemplatePO salaryTemplate) {
private void grantSendInfo(List<Long> ids, SalarySendPO salarySend, SalaryTemplatePO salaryTemplate, SalaryBillSendDTO salaryBillSendDTO) {
// 水印设置
salaryTemplate.setSalaryWatermark(JsonUtil.toJsonString(salaryBillSendDTO.getWatermarkSetting()));
List<List<Long>> partition = Lists.partition(ids, 500);
Date sendTime = new Date();
SalarySendInfoPO po = new SalarySendInfoPO();

View File

@ -38,7 +38,6 @@ import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum;
import com.engine.salary.enums.salaryarchive.SalaryArchiveFieldTypeEnum;
import com.engine.salary.enums.salarybill.SalarySendStatusEnum;
import com.engine.salary.enums.salarybill.SalaryTemplateReplenishRuleEnum;
import com.engine.salary.enums.salarybill.SalaryTemplateWatermarkTypeEnum;
import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum;
import com.engine.salary.enums.salarysend.SalarySendGrantTypeEnum;
import com.engine.salary.exception.SalaryRunTimeException;
@ -593,7 +592,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
*/
private void handleSalaryWatermark(SalaryTemplatePO salaryTemplate, SalarySendInfoPO salarySendInfo) {
SalaryBillWatermarkDTO salaryBillWatermark = JsonUtil.parseObject(salaryTemplate.getSalaryWatermark(), SalaryBillWatermarkDTO.class);
if (Objects.isNull(salaryBillWatermark) || !salaryBillWatermark.getWatermarkStatus() || !salaryBillWatermark.getWatermarkType().equals(SalaryTemplateWatermarkTypeEnum.CUSTOM.getValue())) {
if (Objects.isNull(salaryBillWatermark) || !salaryBillWatermark.getWatermarkStatus() ) {
return;
}
// 发送时已经处理好变量字段可直接获取判断