diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java index 8b062d538..f7646c6ae 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java @@ -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 e, Map allEmployeeMap, SalaryBillSendDTO salaryBillSendParam) { + StringBuilder emailContent = new StringBuilder(); + emailContent.append("
"); // 消息接收者 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("
"); 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 e, SalaryBillSendDTO salaryBillSendParam) { - StringBuilder emailContent = new StringBuilder(); + public static void buildEmailContent(StringBuilder emailContent, Map e, SalaryBillSendDTO salaryBillSendParam) { emailContent.append("
"); // 1.标题 emailContent.append("
"); @@ -453,7 +461,6 @@ public class SalaryBillBO { } emailContent.append("
"); - return emailContent.toString(); } /** @@ -619,4 +626,172 @@ public class SalaryBillBO { } emailContent.append("
"); } + + + 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 e, SalaryBillSendDTO salaryBillSendParam) { + if (Objects.isNull(salaryBillSendParam.getWatermarkSetting())) { + return; + } + String emailWmContentTemplate = salaryBillSendParam.getEmailWmContentTemplate(); + List 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 getWmTextFieldIds(String domain, SalaryBillWatermarkDTO salaryBillWatermark) { + List 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) salaryBillWatermark.getWmSetting().getOrDefault("wmSelectedFieldIds", Collections.emptyList()); + + List 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> wmImgs = Collections.emptyList(); + try { + wmImgs = (List>) salaryBillWatermark.getWmSetting().getOrDefault("wmImg", Collections.emptyList()); + } catch (Exception exception) { + log.error("工资单水印图片转换失败"); + } + if (CollectionUtils.isNotEmpty(wmImgs)) { + Map 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 = ""; + 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("
"); + emailWmContentTemp.append("
"); + for (int i = 0; i < 20; i++) { + emailWmContentTemp.append("
"); + for (int j = 0; j < 10; j++) { + emailWmContentTemp.append("
"); + // 赋值 + emailWmContentTemp.append(variable); + emailWmContentTemp.append("
"); + } + emailWmContentTemp.append("
"); + } + emailWmContentTemp.append("
"); + emailWmContentTemp.append("
"); + return emailWmContentTemp.toString(); + } + } diff --git a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java index 63cb1de4b..276c3ec87 100644 --- a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java @@ -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 { diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java index b3b0b26fe..a7c6c21db 100644 --- a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -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 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 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 ids, SalarySendPO salarySend, SalaryTemplatePO salaryTemplate) { + private void grantSendInfo(List ids, SalarySendPO salarySend, SalaryTemplatePO salaryTemplate, SalaryBillSendDTO salaryBillSendDTO) { + // 水印设置 + salaryTemplate.setSalaryWatermark(JsonUtil.toJsonString(salaryBillSendDTO.getWatermarkSetting())); + List> partition = Lists.partition(ids, 500); Date sendTime = new Date(); SalarySendInfoPO po = new SalarySendInfoPO(); diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 6e501eda1..359c6a92b 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -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; } // 发送时已经处理好变量字段,可直接获取判断