diff --git a/resource/sqlupgrade/DM/sql202311150103.sql b/resource/sqlupgrade/DM/sql202311150103.sql new file mode 100644 index 000000000..b4b16bd0d --- /dev/null +++ b/resource/sqlupgrade/DM/sql202311150103.sql @@ -0,0 +1,3 @@ +ALTER TABLE hrsa_salary_template ADD sms_setting CLOB NULL; +/ + diff --git a/resource/sqlupgrade/GS/sql202311150103.sql b/resource/sqlupgrade/GS/sql202311150103.sql new file mode 100644 index 000000000..b4b16bd0d --- /dev/null +++ b/resource/sqlupgrade/GS/sql202311150103.sql @@ -0,0 +1,3 @@ +ALTER TABLE hrsa_salary_template ADD sms_setting CLOB NULL; +/ + diff --git a/resource/sqlupgrade/JC/sql202311150103.sql b/resource/sqlupgrade/JC/sql202311150103.sql new file mode 100644 index 000000000..b4b16bd0d --- /dev/null +++ b/resource/sqlupgrade/JC/sql202311150103.sql @@ -0,0 +1,3 @@ +ALTER TABLE hrsa_salary_template ADD sms_setting CLOB NULL; +/ + diff --git a/resource/sqlupgrade/Mysql/sql202311150103.sql b/resource/sqlupgrade/Mysql/sql202311150103.sql new file mode 100644 index 000000000..c14f2365d --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202311150103.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_salary_template ADD COLUMN sms_setting text NULL ; \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202311150103.sql b/resource/sqlupgrade/Oracle/sql202311150103.sql new file mode 100644 index 000000000..e3ce06470 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202311150103.sql @@ -0,0 +1,2 @@ +ALTER TABLE hrsa_salary_template ADD sms_setting CLOB NULL +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202311150103.sql b/resource/sqlupgrade/PG/sql202311150103.sql new file mode 100644 index 000000000..c14f2365d --- /dev/null +++ b/resource/sqlupgrade/PG/sql202311150103.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_salary_template ADD COLUMN sms_setting text NULL ; \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202311150103.sql b/resource/sqlupgrade/SQLServer/sql202311150103.sql new file mode 100644 index 000000000..4a7a693f7 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202311150103.sql @@ -0,0 +1,2 @@ +ALTER TABLE hrsa_salary_template ADD sms_setting text NULL +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202311150103.sql b/resource/sqlupgrade/ST/sql202311150103.sql new file mode 100644 index 000000000..b4b16bd0d --- /dev/null +++ b/resource/sqlupgrade/ST/sql202311150103.sql @@ -0,0 +1,3 @@ +ALTER TABLE hrsa_salary_template ADD sms_setting CLOB NULL; +/ + diff --git a/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java b/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java index d18c8759b..7d83f0348 100644 --- a/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java +++ b/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java @@ -72,6 +72,8 @@ public class DataCollectionEmployee { @SalaryFormulaVar(defaultLabel = "状态编码", labelId = 98624, dataType = "string") private String status; + + @SalaryFormulaVar(defaultLabel = "状态", labelId = 98622, dataType = "string") private String statusName; //工号 diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java index aab57656e..d2c95ca12 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java @@ -10,10 +10,7 @@ import com.engine.salary.constant.SalaryArchiveConstant; import com.engine.salary.constant.SalaryBillConstant; 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.dto.*; import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; import com.engine.salary.entity.salaryformula.dto.SalaryFormulaEmployeeDTO; import com.engine.salary.enums.salarybill.MessageChannelEnum; @@ -129,21 +126,21 @@ public class SalaryBillBO { if (employeeInformation == null || simpleEmployee == null) { return; } - if (org.apache.commons.collections.CollectionUtils.isNotEmpty(employeeInformation.getItems())) { + if (CollectionUtils.isNotEmpty(employeeInformation.getItems())) { //获取员工信息的字段名和中文描述的map关系 - SalaryFormulaEmployeeDTO salaryFormulaEmployeeDTO = SalaryFormulaEmployeeDTO.builder().employeeId(simpleEmployee.getEmployeeId()) + SalaryFormulaEmployeeDTO salaryFormulaEmployeeDTO = SalaryFormulaEmployeeDTO.builder() + .employeeId(simpleEmployee.getEmployeeId()) .taxAgentName(salaryBillSendParam.getTaxAgentName()) .departmentName(simpleEmployee.getDepartmentName()) - .email(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getEmail()) ? "" : simpleEmployee.getEmail()) -// .gradeName(simpleEmployee.getGrade() == null ? "" : simpleEmployee.getGrade().getName()) -// .hireDate(SalaryDateUtil.getFormatLocalDate(simpleEmployee.getHiredate())) -// .sex(simpleEmployee.getSex() == null ? "" : simpleEmployee.getSex().getDescription()) - .mobile(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getMobile()) ? "" : simpleEmployee.getMobile()) - .jobtitleName(simpleEmployee.getJobtitleName()) -// .status(StringUtils.isEmpty(simpleEmployee.getPersonnelStatus()) ? "" : simpleEmployee.getPersonnelStatus()) - .telephone(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getTelephone()) ? "" : simpleEmployee.getTelephone()) - .username(org.apache.commons.lang3.StringUtils.isEmpty(simpleEmployee.getUsername()) ? "" : simpleEmployee.getUsername()) + .email(StringUtils.isEmpty(simpleEmployee.getEmail()) ? "" : simpleEmployee.getEmail()) + .sex(simpleEmployee.getSex() == null ? "" : simpleEmployee.getSex()) + .mobile(StringUtils.isEmpty(simpleEmployee.getMobile()) ? "" : simpleEmployee.getMobile()).jobtitleName(simpleEmployee.getJobtitleName()) + .status(StringUtils.isEmpty(simpleEmployee.getStatus()) ? "" : simpleEmployee.getStatus()) + .telephone(StringUtils.isEmpty(simpleEmployee.getTelephone()) ? "" : simpleEmployee.getTelephone()) + .username(StringUtils.isEmpty(simpleEmployee.getUsername()) ? "" : simpleEmployee.getUsername()) .workcode(simpleEmployee.getWorkcode()) + .idNo(simpleEmployee.getIdNo()) + .statusName(simpleEmployee.getStatusName()) .build(); List items = employeeInformation.getItems(); // 1.SalaryAcctResultBO.buildEmployeeFieldName()的取法 @@ -152,7 +149,7 @@ public class SalaryBillBO { // Optional> 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)) { +// if (StringUtils.isNotBlank(key)) { // String getter = "get" + key.substring(0, 1).toUpperCase() + key.substring(1); // try { // Method method = salaryFormulaEmployeeDTO.getClass().getMethod(getter); @@ -203,9 +200,7 @@ public class SalaryBillBO { } } - return theme - .replace("${companyName}", companyName) - .replace("${salaryMonth}", new SimpleDateFormat("yyyy年MM月").format(salaryMonth)); + return theme.replace("${companyName}", companyName).replace("${salaryMonth}", new SimpleDateFormat("yyyy年MM月").format(salaryMonth)); } // /** @@ -289,7 +284,7 @@ public class SalaryBillBO { File touch = FileUtil.touch(htmlPath); FileUtil.appendUtf8String(content, touch); - String pdfPath = HrmSalaryPayrollConf.GEN_PATH + yyyyMM + File.separator+ sendId + File.separator + id + ".pdf"; + String pdfPath = HrmSalaryPayrollConf.GEN_PATH + yyyyMM + File.separator + sendId + File.separator + id + ".pdf"; FileUtil.del(pdfPath); HtmlToPdf.convert(HrmSalaryPayrollConf.TO_PDF_TOOL_PATH, htmlPath, pdfPath); } @@ -364,14 +359,37 @@ public class SalaryBillBO { public static void sendSMS(Map e, SalaryBillSendDTO salaryBillSendParam) { - System.out.println(111); -// try { -// MessageUtil.sendSMS(mobile, content); -// } catch (Exception e) { -// kqLog.info("SendSMS error.resourceId:" + resourceId + ">>>>>>mobile>>>>>>" + mobile); -// log.writeLog(e); -// } + SalaryTemplateSMSSetDTO smsSetting = salaryBillSendParam.getSmsSetting(); + String content = smsSetting != null ? smsSetting.getContent() : ""; + if (StringUtils.isBlank(content)) { + return; + } + + content = content.replace("{薪资所属月}", SalaryDateUtil.getFormatYearMonth(salaryBillSendParam.getSalaryDate())); + + for (SalaryTemplateSalaryItemListDTO item : salaryBillSendParam.getEmployeeInformation().getItems()) { + content = content.replace("{" + item.getName() + "}", item.getSalaryItemValue()); + } + + for (SalaryTemplateSalaryItemSetListDTO salaryTemplateSalaryItemSetListDTO : salaryBillSendParam.getSalaryItemSetList()) { + for (SalaryTemplateSalaryItemListDTO item : salaryTemplateSalaryItemSetListDTO.getItems()) { + if (content.contains("{" + item.getName() + "}")) { + content = content.replace("{" + item.getName() + "}", e.getOrDefault(item.getId() + SalaryArchiveConstant.DYNAMIC_SUFFIX, "").toString()); + } + } + } + + try { + log.info("发送短信内容, {}", content); + if (e.get("mobile") != null) { + MessageUtil.sendSMS(e.get("mobile").toString(), content); + } else { + log.error("发送短信失败,{}手机号为空", e.getOrDefault("username","")); + } + } catch (Exception ex) { + log.error("发送短信失败", ex); + } } // /** @@ -563,9 +581,7 @@ public class SalaryBillBO { InputStream imageInputStream = ImageFileManager.getInputStreamById(imagefileid); byte[] data = readInputStream(imageInputStream); String imageBase64 = "data:image/jpeg;base64," + Base64Utils.encodeToString(data); - emailContent.append("
\n" + - " " + - "
"); + emailContent.append("
\n" + " " + "
"); } } emailContent.append(""); diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryBillSendDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryBillSendDTO.java index 4d82ace0e..c77c0bd7a 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryBillSendDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryBillSendDTO.java @@ -64,6 +64,9 @@ public class SalaryBillSendDTO { //工资单模板-薪资项目设置 private List salaryItemSetList; + //短信模板 + private SalaryTemplateSMSSetDTO smsSetting; + //工资单模板-员工基本信息 private SalaryTemplateSalaryItemSetListDTO employeeInformation; @@ -74,7 +77,7 @@ public class SalaryBillSendDTO { private String remarkI18n; //邮件是否可以发送邮件 - private boolean isEnableEmail; +// private boolean isEnableEmail; //工资单发放 private SalarySendPO salarySend; diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSMSDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSMSDTO.java new file mode 100644 index 000000000..829c6c799 --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSMSDTO.java @@ -0,0 +1,23 @@ +package com.engine.salary.entity.salaryBill.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryTemplateSMSDTO { + + //展示名称 + private String itemName; + + //薪资项目 + private String itemKey; + + //来源 + private String source; +} diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSMSSetDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSMSSetDTO.java new file mode 100644 index 000000000..ef21fc2fb --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSMSSetDTO.java @@ -0,0 +1,26 @@ +package com.engine.salary.entity.salaryBill.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 短信模板设置 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryTemplateSMSSetDTO { + + /** + * 内容 + */ + private String content; +} diff --git a/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java b/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java index bbf16949e..7f13c13c6 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalaryTemplateSaveParam.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.salaryBill.param; +import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSMSSetDTO; import com.engine.salary.entity.salaryBill.dto.SalaryTemplateSalaryItemSetListDTO; import com.engine.salary.enums.salarybill.SalaryTemplateTextContentPositionEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -45,6 +46,9 @@ public class SalaryTemplateSaveParam { // 消息中心开启状态。false:关、true:开 private Boolean msgStatus; + // 短信开关 false:关、true:开 + private Boolean smsStatus; + // 主题 private String theme; @@ -78,6 +82,9 @@ public class SalaryTemplateSaveParam { // 薪资项目设置 private List salaryItemSetting; + //短信模板 + private SalaryTemplateSMSSetDTO smsSetting; + // 补发工资单模板名称 private String replenishName; @@ -100,7 +107,6 @@ public class SalaryTemplateSaveParam { /** * 反馈流程地址 - * */ private String feedbackUrl; @@ -153,11 +159,11 @@ public class SalaryTemplateSaveParam { } if (saveParam.getAutoSendStatus() == Boolean.TRUE) { - if(StringUtils.isBlank(saveParam.getAutoSendDayOfMonth())) + if (StringUtils.isBlank(saveParam.getAutoSendDayOfMonth())) throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(140509, "自动发放日期不能为空")); - if(Objects.isNull(saveParam.getAutoSendCycleType())) + if (Objects.isNull(saveParam.getAutoSendCycleType())) throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(140509, "自动发放周期不能为空")); - if(StringUtils.isBlank(saveParam.getAutoSendTimeOfDay())) + if (StringUtils.isBlank(saveParam.getAutoSendTimeOfDay())) throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(140509, "自动发放时间不能为空")); } } diff --git a/src/com/engine/salary/entity/salaryBill/po/SalaryTemplatePO.java b/src/com/engine/salary/entity/salaryBill/po/SalaryTemplatePO.java index fd8e1a1c9..a428a68ed 100644 --- a/src/com/engine/salary/entity/salaryBill/po/SalaryTemplatePO.java +++ b/src/com/engine/salary/entity/salaryBill/po/SalaryTemplatePO.java @@ -68,6 +68,11 @@ public class SalaryTemplatePO { */ private Integer smsStatus; + /** + * 短信模板设置 + */ + private String smsSetting; + /** * 薪酬水印 */ diff --git a/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml b/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml index 29a016b93..a88ac1600 100644 --- a/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml +++ b/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml @@ -26,6 +26,7 @@ + @@ -62,6 +63,7 @@ , t.update_time , t.creator , t.delete_type + , t.sms_setting