水印 - 暂存2
This commit is contained in:
parent
76977331af
commit
7a40a31d6f
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
// 发送时已经处理好变量字段,可直接获取判断
|
||||
|
|
|
|||
Loading…
Reference in New Issue