From 7b3f7b2e39c390208a83785e1d31c9c10932d075 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 18 Sep 2023 10:25:43 +0800 Subject: [PATCH 01/18] =?UTF-8?q?=E7=AD=BE=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryBill/bo/SalaryBillBO.java | 76 +++++++++++-------- .../service/impl/SalaryBillServiceImpl.java | 2 +- src/com/engine/salary/util/pdf/HtmlToPdf.java | 66 ++++++++++++++++ 3 files changed, 110 insertions(+), 34 deletions(-) create mode 100644 src/com/engine/salary/util/pdf/HtmlToPdf.java diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java index c298b33fd..6b3a30fbb 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.salaryBill.bo; +import cn.hutool.core.io.FileUtil; import com.cloudstore.dev.api.bean.MessageBean; import com.cloudstore.dev.api.bean.MessageType; import com.cloudstore.dev.api.util.Util_Message; @@ -19,6 +20,7 @@ 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.engine.salary.util.pdf.HtmlToPdf; import com.google.common.collect.Maps; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -29,6 +31,7 @@ import weaver.email.EmailWorkRunnable; import weaver.hrm.company.SubCompanyComInfo; import weaver.hrm.resource.ResourceComInfo; +import java.io.File; import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; @@ -255,24 +258,36 @@ public class SalaryBillBO { } } - public static void sendEmail(Map e, Map allEmployeeMap, SalaryBillSendDTO salaryBillSendParam) { + public static void sendEmail(Map e, SalaryBillSendDTO salaryBillSendParam) { StringBuilder emailContent = new StringBuilder(); + emailContent.append(""); 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())); SalaryBillBO.buildEmailContent(emailContent, e, salaryBillSendParam); // 构建水印内容 buildEmailWatermarkContent(emailContent, e, salaryBillSendParam); 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())); + + + //生成html + Object id = e.getOrDefault("id", 1L); + String htmlPath = "D:\\" + id + ".html"; + File touch = FileUtil.touch(htmlPath); + FileUtil.appendUtf8String(emailContent.toString(), touch); + + String pdfPath = "D:\\" + id + ".pdf"; + HtmlToPdf.convert(htmlPath,pdfPath); + if (StringUtils.isNotBlank(receivers)) { -// MessageUtil.sendEmail(receivers, title, emailContent.toString()); EmailWorkRunnable.threadModeReminder(receivers, title, emailContent.toString()); } } - public static void sendSMS(SalaryBillSendDTO salaryBillSendParam, Long id, Long employeeId) { // try { @@ -462,7 +477,10 @@ public class SalaryBillBO { } else { buildMailMain(emailContent, e, salaryBillSendParam); } - + //签章 + emailContent.append("
\n" + + " \n" + + "
"); emailContent.append(""); } @@ -491,27 +509,25 @@ public class SalaryBillBO { } emailContent.append("
"); if (!salaryItemSet.getGroupId().equals(SalaryTemplateSalaryItemSetGroupConstant.NO_TYPE_GROUP_ID)) { - emailContent.append("
"); + emailContent.append("
"); // 4.1.薪资项目组名 emailContent.append(salaryItemSet.getGroupName()); emailContent.append("
"); } - emailContent.append("
"); + emailContent.append("
"); 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 optionalEmpItem = salaryBillSendParam.getEmployeeInformation().getItems().stream().filter(f -> f.getId().equals(salaryItem.getId())).findFirst(); // 4.2.员工信息 - emailContent.append("
"); - emailContent.append("
"); + emailContent.append("
"); + emailContent.append("
"); emailContent.append(""); emailContent.append((optionalEmpItem.isPresent() ? optionalEmpItem.get().getName() : "")); emailContent.append(""); emailContent.append("
"); - emailContent.append("
"); + emailContent.append("
"); emailContent.append((optionalEmpItem.isPresent() ? optionalEmpItem.get().getSalaryItemValue() : "")); emailContent.append("
"); emailContent.append("
"); @@ -520,16 +536,13 @@ public class SalaryBillBO { 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("
"); - emailContent.append("
"); + emailContent.append("
"); + emailContent.append("
"); emailContent.append(""); emailContent.append(salaryItem.getName()); emailContent.append(""); emailContent.append("
"); - emailContent.append("
"); + emailContent.append("
"); emailContent.append(e.get(keyName.toString())); emailContent.append("
"); emailContent.append("
"); @@ -592,16 +605,13 @@ public class SalaryBillBO { 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("
"); - emailContent.append("
"); + emailContent.append("
"); + emailContent.append("
"); emailContent.append(""); emailContent.append(salaryItem.getName()); emailContent.append(""); emailContent.append("
"); - emailContent.append("
"); + emailContent.append("
"); emailContent.append(e.get(keyName.toString())); emailContent.append("
"); emailContent.append("
"); @@ -644,7 +654,7 @@ public class SalaryBillBO { /** * 构建水印 - * + *

* 当前所拥有的变量 * "HRM_Name",当前操作者姓名 * "HRM_Num",当前操作者编号 @@ -715,7 +725,7 @@ public class SalaryBillBO { List wmTextFieldIds = Collections.emptyList(); // 没有水印、关闭水印、或者系统水印,则不拼接 // if (Objects.isNull(salaryBillWatermark) || !salaryBillWatermark.getWatermarkStatus() || !SalaryTemplateWatermarkTypeEnum.CUSTOM.getValue().equals(salaryBillWatermark.getWatermarkType())) { - if (Objects.isNull(salaryBillWatermark) || !salaryBillWatermark.getWatermarkStatus() ) { + if (Objects.isNull(salaryBillWatermark) || !salaryBillWatermark.getWatermarkStatus()) { return wmTextFieldIds; } String wmClassify = salaryBillWatermark.getWmSetting().getOrDefault("wmClassify", StringUtils.EMPTY).toString(); @@ -762,7 +772,7 @@ public class SalaryBillBO { public static String buildEmailWmContentTemplate(boolean isEnableEmail, SalaryBillWatermarkDTO watermarkSetting) { String emailWmContentTemplate = StringUtils.EMPTY; // 没有水印、关闭水印,则不拼接 - if (!isEnableEmail || Objects.isNull(watermarkSetting) || !watermarkSetting.getWatermarkStatus() ) { + if (!isEnableEmail || Objects.isNull(watermarkSetting) || !watermarkSetting.getWatermarkStatus()) { return emailWmContentTemplate; } String wmClassify = watermarkSetting.getWmSetting().getOrDefault("wmClassify", StringUtils.EMPTY).toString(); @@ -789,7 +799,7 @@ public class SalaryBillBO { for (int i = 0; i < 20; i++) { emailWmContentTemp.append("

"); for (int j = 0; j < 8; j++) { - emailWmContentTemp.append("
"); + emailWmContentTemp.append("
"); // 赋值 emailWmContentTemp.append(variable); emailWmContentTemp.append("
"); @@ -801,7 +811,7 @@ public class SalaryBillBO { return emailWmContentTemp.toString(); } - public static String handleWmText(String wmText, List wmTextFieldIds, DataCollectionEmployee simpleEmployee){ + public static String handleWmText(String wmText, List wmTextFieldIds, DataCollectionEmployee simpleEmployee) { for (String wmTextFieldId : wmTextFieldIds) { // 当前操作者姓名 if (SalaryBillConstant.HRM_Name.equals(wmTextFieldId)) { @@ -820,10 +830,10 @@ public class SalaryBillBO { wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_CurrentOperatorId, Objects.isNull(simpleEmployee) ? StringUtils.EMPTY : simpleEmployee.getEmployeeId().toString()); // 当前操作者部门 } else if (SalaryBillConstant.HRM_Department.equals(wmTextFieldId)) { - wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_Department, Objects.isNull(simpleEmployee) || Objects.isNull(simpleEmployee.getDepartmentName()) ? StringUtils.EMPTY : simpleEmployee.getDepartmentName()); + wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_Department, Objects.isNull(simpleEmployee) || Objects.isNull(simpleEmployee.getDepartmentName()) ? StringUtils.EMPTY : simpleEmployee.getDepartmentName()); // 当前操作者分部 } else if (SalaryBillConstant.HRM_SecondDepartment.equals(wmTextFieldId)) { - wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_SecondDepartment, Objects.isNull(simpleEmployee) || Objects.isNull(simpleEmployee.getSubcompanyName()) ? StringUtils.EMPTY : simpleEmployee.getSubcompanyName()); + wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_SecondDepartment, Objects.isNull(simpleEmployee) || Objects.isNull(simpleEmployee.getSubcompanyName()) ? StringUtils.EMPTY : simpleEmployee.getSubcompanyName()); // 当前日期 } else if (SalaryBillConstant.HRM_CurrentDate.equals(wmTextFieldId)) { wmText = wmText.replace(SalaryBillConstant.HRM_prefix + SalaryBillConstant.HRM_CurrentDate, SalaryDateUtil.getFormatLocalDate(LocalDate.now())); diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java index 6b438b564..e2af35851 100644 --- a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -528,7 +528,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService if (sendChannels.contains(MessageChannelEnum.EMAIL)) { // 构建发送消息 SalaryBillBO.buildEmployeeInfo(salaryBillSendParam, allEmployeeMap.get(e.get("employeeId").toString())); - SalaryBillBO.sendEmail(e, allEmployeeMap, salaryBillSendParam); + SalaryBillBO.sendEmail(e, salaryBillSendParam); } diff --git a/src/com/engine/salary/util/pdf/HtmlToPdf.java b/src/com/engine/salary/util/pdf/HtmlToPdf.java new file mode 100644 index 000000000..8603e7b1c --- /dev/null +++ b/src/com/engine/salary/util/pdf/HtmlToPdf.java @@ -0,0 +1,66 @@ +package com.engine.salary.util.pdf; + +import com.engine.workflow.biz.requestForm.HtmlToPdfInterceptor; +import lombok.extern.slf4j.Slf4j; + +import java.io.File; + +@Slf4j +public class HtmlToPdf { + + // wkhtmltopdf在系统中的路径 + private static final String toPdfTool = "H:\\tools\\wkhtmltox\\bin\\wkhtmltopdf.exe"; + + /** + * html转pdf + * + * @param srcPath html路径,可以是硬盘上的路径,也可以是网络路径 + * @param destPath pdf保存路径 + * @return 转换成功返回true + */ + public static boolean convert(String srcPath, String destPath) { + File file = new File(destPath); + File parent = file.getParentFile(); + //如果pdf保存路径不存在,则创建路径 + if (!parent.exists()) { + parent.mkdirs(); + } + StringBuilder cmd = new StringBuilder(); + cmd.append(toPdfTool); + cmd.append(" "); + cmd.append(" --header-line");//页眉下面的线 + cmd.append(" --margin-top 3cm ");//设置页面上边距 (default 10mm) + // cmd.append(" --header-html file:///"+WebUtil.getServletContext().getRealPath("")+FileUtil.convertSystemFilePath("\\style\\pdf\\head.html"));// (添加一个HTML页眉,后面是网址) + cmd.append(" --header-spacing 5 --orientation Portrait ");// (设置页眉和内容的距离,默认0) + //cmd.append(" --footer-center (设置在中心位置的页脚内容)");//设置在中心位置的页脚内容 + //cmd.append(" --footer-html file:///"+WebUtil.getServletContext().getRealPath("")+FileUtil.convertSystemFilePath("\\style\\pdf\\foter.html"));// (添加一个HTML页脚,后面是网址) + cmd.append(" --footer-line");//* 显示一条线在页脚内容上) + cmd.append(" --footer-spacing 5 ");// (设置页脚和内容的距离) + //--orientation Portrait --footer-center [page]/[topage] --footer-line + cmd.append(srcPath); + cmd.append(" "); + cmd.append(destPath); + boolean result = true; + try { + Process proc = Runtime.getRuntime().exec(cmd.toString()); + HtmlToPdfInterceptor error = new HtmlToPdfInterceptor(proc.getErrorStream()); + HtmlToPdfInterceptor output = new HtmlToPdfInterceptor(proc.getInputStream()); + error.start(); + output.start(); + proc.waitFor(); + } catch (Exception e) { + result = false; + e.printStackTrace(); + } + + return result; + } + + public static void main(String[] args) { + String sourcePath = "C:\\Users\\钱涛\\Desktop\\1(1).html"; + HtmlToPdf.convert(sourcePath, "C:\\Users\\钱涛\\Desktop\\1.pdf"); + System.out.println("0000"); + } + + +} From 12480f8306421276b52075cf536ccd360b076cf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 18 Sep 2023 18:45:59 +0800 Subject: [PATCH 02/18] =?UTF-8?q?=E7=94=9F=E6=88=90=E5=B7=A5=E8=B5=84?= =?UTF-8?q?=E5=8D=95pdf=E7=AD=BE=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WEB-INF/prop/hrmSalaryPayroll.properties | 4 + .../entity/salaryBill/bo/SalaryBillBO.java | 217 +++++++++++------- src/com/engine/salary/util/pdf/HtmlToPdf.java | 13 +- 3 files changed, 145 insertions(+), 89 deletions(-) create mode 100644 resource/WEB-INF/prop/hrmSalaryPayroll.properties diff --git a/resource/WEB-INF/prop/hrmSalaryPayroll.properties b/resource/WEB-INF/prop/hrmSalaryPayroll.properties new file mode 100644 index 000000000..ac20aedaa --- /dev/null +++ b/resource/WEB-INF/prop/hrmSalaryPayroll.properties @@ -0,0 +1,4 @@ +genPdf=1 +hasSign=1 +toPdfToolPath=H:\\tools\\wkhtmltox\\bin\\wkhtmltopdf.exe +genPath=D:\\ diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java index 6b3a30fbb..c321cab31 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java @@ -21,18 +21,26 @@ import com.engine.salary.enums.salarybill.SalaryTemplateWhetherEnum; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.pdf.HtmlToPdf; +import com.fapiao.neon.util.Base64Utils; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import weaver.common.MessageUtil; +import weaver.conn.RecordSet; import weaver.email.EmailWorkRunnable; +import weaver.file.ImageFileManager; +import weaver.general.BaseBean; import weaver.hrm.company.SubCompanyComInfo; import weaver.hrm.resource.ResourceComInfo; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; +import java.io.InputStream; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -259,6 +267,36 @@ public class SalaryBillBO { } public static void sendEmail(Map e, SalaryBillSendDTO salaryBillSendParam) { + String content = genPayrollHtmlContent(e, salaryBillSendParam); + genPdf(e, salaryBillSendParam); + // 消息接收者 + String receivers = Optional.ofNullable(e.get("email")).orElse("").toString(); + String title = getBillTitle(salaryBillSendParam.getSalaryTemplate().getTheme(), salaryBillSendParam.getSalaryDate(), Long.valueOf(e.get("employeeId").toString())); + + if (StringUtils.isNotBlank(receivers)) { + EmailWorkRunnable.threadModeReminder(receivers, title, content); + } + } + + public static void genPdf(Map e, SalaryBillSendDTO salaryBillSendParam) { + String content = genPayrollHtmlContent(e, salaryBillSendParam); + BaseBean baseBean = new BaseBean(); + boolean genPdf = "1".equals(baseBean.getPropValue("hrmSalaryPayroll", "genPdf")); + boolean hasSign = "1".equals(baseBean.getPropValue("hrmSalaryPayroll", "hasSign")); + String genPath = baseBean.getPropValue("hrmSalaryPayroll", "genPath"); + String toPdfTool = new BaseBean().getPropValue("hrmSalaryPayroll", "toPdfToolPath"); + //生成html + Object id = e.getOrDefault("id", 1L); + String htmlPath = genPath + id + ".html"; + File touch = FileUtil.touch(htmlPath); + FileUtil.appendUtf8String(content, touch); + String pdfPath = genPath + id + ".pdf"; + HtmlToPdf.convert(toPdfTool, htmlPath, pdfPath); + } + + + @NotNull + private static String genPayrollHtmlContent(Map e, SalaryBillSendDTO salaryBillSendParam) { StringBuilder emailContent = new StringBuilder(); emailContent.append(""); emailContent.append("
"); @@ -266,28 +304,30 @@ public class SalaryBillBO { // 构建水印内容 buildEmailWatermarkContent(emailContent, e, salaryBillSendParam); 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())); - - - //生成html - Object id = e.getOrDefault("id", 1L); - String htmlPath = "D:\\" + id + ".html"; - File touch = FileUtil.touch(htmlPath); - FileUtil.appendUtf8String(emailContent.toString(), touch); - - String pdfPath = "D:\\" + id + ".pdf"; - HtmlToPdf.convert(htmlPath,pdfPath); - - if (StringUtils.isNotBlank(receivers)) { - EmailWorkRunnable.threadModeReminder(receivers, title, emailContent.toString()); - } + return emailContent.toString(); } + public static byte[] readInputStream(InputStream is) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int length = 0; + try { + while ((length = is.read(buffer)) != -1) { + baos.write(buffer, 0, length); + } + baos.flush(); + } catch (IOException e) { + } + byte[] data = baos.toByteArray(); + try { + is.close(); + baos.close(); + } catch (IOException e) { + } + return data; + } + public static void sendSMS(SalaryBillSendDTO salaryBillSendParam, Long id, Long employeeId) { // try { @@ -447,7 +487,7 @@ public class SalaryBillBO { * @return */ public static void buildEmailContent(StringBuilder emailContent, Map e, SalaryBillSendDTO salaryBillSendParam) { - emailContent.append("
"); + emailContent.append("
"); // 1.标题 emailContent.append("
"); // emailContent.append(salaryBillSendParam.getTitle()); @@ -478,9 +518,18 @@ public class SalaryBillBO { buildMailMain(emailContent, e, salaryBillSendParam); } //签章 - emailContent.append("
\n" + - " \n" + - "
"); + RecordSet rs = new RecordSet(); + rs.execute("select * from DocSignature where hrmresid=" + e.getOrDefault("employeeId", "1") + " order by markid"); + if (rs.next()) { + int imagefileid = rs.getInt("imagefileid"); + InputStream imageInputStream = ImageFileManager.getInputStreamById(imagefileid); + byte[] data = readInputStream(imageInputStream); + String imageBase64 = "data:image/jpeg;base64," + Base64Utils.encodeToString(data); + emailContent.append("
\n" + + " " + + "
"); + } + emailContent.append("
"); } @@ -507,51 +556,53 @@ public class SalaryBillBO { if (CollectionUtils.isEmpty(salaryItemSet.getItems())) { continue; } - emailContent.append("
"); + emailContent.append("
"); if (!salaryItemSet.getGroupId().equals(SalaryTemplateSalaryItemSetGroupConstant.NO_TYPE_GROUP_ID)) { - emailContent.append("
"); + emailContent.append("
"); // 4.1.薪资项目组名 emailContent.append(salaryItemSet.getGroupName()); emailContent.append("
"); } - emailContent.append("
"); - 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 optionalEmpItem = salaryBillSendParam.getEmployeeInformation().getItems().stream().filter(f -> f.getId().equals(salaryItem.getId())).findFirst(); - // 4.2.员工信息 - emailContent.append("
"); - emailContent.append("
"); - emailContent.append(""); - emailContent.append((optionalEmpItem.isPresent() ? optionalEmpItem.get().getName() : "")); - emailContent.append(""); - emailContent.append("
"); - emailContent.append("
"); - emailContent.append((optionalEmpItem.isPresent() ? optionalEmpItem.get().getSalaryItemValue() : "")); - emailContent.append("
"); - emailContent.append("
"); - } 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("
"); - emailContent.append("
"); - emailContent.append(""); - emailContent.append(salaryItem.getName()); - emailContent.append(""); - emailContent.append("
"); - emailContent.append("
"); - emailContent.append(e.get(keyName.toString())); - emailContent.append("
"); - emailContent.append("
"); - break; + emailContent.append(""); + emailContent.append(""); + List items = salaryItemSet.getItems(); + List> itemsPartition = Lists.partition(items, 3); + itemsPartition.forEach(itemPartition -> { + emailContent.append(""); + for (int i = 0; i < itemPartition.size(); i++) { + SalaryTemplateSalaryItemListDTO salaryItem = itemPartition.get(i); + // 员工基本信息 + if (salaryItemSet.getGroupId().equals(SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID) && salaryBillSendParam.getEmployeeInformation() != null) { + Optional optionalEmpItem = salaryBillSendParam.getEmployeeInformation().getItems().stream().filter(f -> f.getId().equals(salaryItem.getId())).findFirst(); + // 4.2.员工信息 + emailContent.append(""); + + emailContent.append(""); + } 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(""); + + emailContent.append(""); + break; + } } } } - } - emailContent.append(""); + emailContent.append(""); + }); + emailContent.append(""); + emailContent.append("
"); + emailContent.append((optionalEmpItem.isPresent() ? optionalEmpItem.get().getName() : "")); + emailContent.append(""); + emailContent.append((optionalEmpItem.isPresent() ? optionalEmpItem.get().getSalaryItemValue() : "")); + emailContent.append(""); + emailContent.append(salaryItem.getName()); + emailContent.append(""); + emailContent.append(e.get(keyName.toString())); + emailContent.append("
"); emailContent.append("
"); } emailContent.append("
"); @@ -599,26 +650,36 @@ public class SalaryBillBO { emailContent.append("
"); emailContent.append("
"); - 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("
"); - emailContent.append("
"); - emailContent.append(""); - emailContent.append(salaryItem.getName()); - emailContent.append(""); - emailContent.append("
"); - emailContent.append("
"); - emailContent.append(e.get(keyName.toString())); - emailContent.append("
"); - emailContent.append("
"); - break; + emailContent.append(""); + emailContent.append(""); + List items = salaryItemSet.getItems(); + List> itemsPartition = Lists.partition(items, 3); + itemsPartition.forEach(itemPartition -> { + emailContent.append(""); + for (int i = 0; i < itemPartition.size(); i++) { + SalaryTemplateSalaryItemListDTO salaryItem = itemPartition.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(""); + + emailContent.append(""); + break; + } } } - } + emailContent.append(""); + }); + + + emailContent.append(""); + emailContent.append("
"); + emailContent.append(salaryItem.getName()); + emailContent.append(""); + emailContent.append(e.get(keyName.toString())); + emailContent.append("
"); + // 5.文本内容-如果在薪资项目后 emailContent.append("
\n" + - " " + - "
"); - } + //签章 + boolean hasSign = "1".equals(HrmSalaryPayrollConf.HAS_SIGN); + if (hasSign) { + RecordSet rs = new RecordSet(); + rs.execute("select * from DocSignature where hrmresid=" + e.getOrDefault("employeeId", "1") + " order by markid"); + if (rs.next()) { + int imagefileid = rs.getInt("imagefileid"); + InputStream imageInputStream = ImageFileManager.getInputStreamById(imagefileid); + byte[] data = readInputStream(imageInputStream); + String imageBase64 = "data:image/jpeg;base64," + Base64Utils.encodeToString(data); + emailContent.append("
\n" + + " " + + "
"); + } + } emailContent.append("
"); } diff --git a/src/com/engine/salary/entity/salaryBill/param/SalaryExportPdfParam.java b/src/com/engine/salary/entity/salaryBill/param/SalaryExportPdfParam.java new file mode 100644 index 000000000..a7085efad --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/param/SalaryExportPdfParam.java @@ -0,0 +1,26 @@ +package com.engine.salary.entity.salaryBill.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 工资单导出pdf参数 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryExportPdfParam { + + /** + * 工资单发放Id + */ + private Long salarySendId; + + /** + * 主键id + */ + private Long id; +} diff --git a/src/com/engine/salary/service/SalaryBillService.java b/src/com/engine/salary/service/SalaryBillService.java index 0f8b9030a..394b2994d 100644 --- a/src/com/engine/salary/service/SalaryBillService.java +++ b/src/com/engine/salary/service/SalaryBillService.java @@ -1,5 +1,6 @@ package com.engine.salary.service; +import com.engine.salary.entity.salaryBill.param.SalaryExportPdfParam; import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam; import java.util.List; @@ -42,6 +43,9 @@ public interface SalaryBillService { */ void feedBackSalaryBill(Long salaryInfoId); + + String exportPdf(SalaryExportPdfParam param); + /** * 工资单撤回 * diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java index e2af35851..821bec203 100644 --- a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -7,6 +7,7 @@ import com.engine.core.impl.Service; import com.engine.salary.biz.SalarySendBiz; import com.engine.salary.biz.SalarySendInfoBiz; import com.engine.salary.cache.SalaryCacheKey; +import com.engine.salary.constant.HrmSalaryPayrollConf; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.progress.ProgressDTO; import com.engine.salary.entity.salaryBill.bo.SalaryBillBO; @@ -15,6 +16,7 @@ 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.SalaryExportPdfParam; import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam; import com.engine.salary.entity.salaryBill.param.SalarySendInfoQueryParam; import com.engine.salary.entity.salaryBill.po.SalarySendInfoPO; @@ -31,6 +33,7 @@ import com.engine.salary.mapper.salarybill.SalarySendInfoMapper; import com.engine.salary.mapper.salarybill.SalarySendMapper; import com.engine.salary.service.*; import com.engine.salary.util.JsonUtil; +import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.google.common.collect.Lists; @@ -45,6 +48,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import weaver.hrm.User; +import java.io.File; import java.lang.reflect.InvocationTargetException; import java.math.BigDecimal; import java.util.*; @@ -129,7 +133,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService * 工资单发放 start **********************************************************************/ @Override - public Map grant(SalarySendGrantParam param) { + public Map grant(SalarySendGrantParam param) { // 1.检查和获取工资单发放 SalarySendPO salarySend = checkAndGetSalarySend(param.getSalarySendId()); // // 已经冻结不能操作 @@ -219,6 +223,9 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService // 3.发送消息:先修改数据再发消息,避免出错后无法撤回 List successIds = sendMessage(enableSendList, salaryBillSendParam); + //生成pdf + genPdf(salaryBillSendParam, enableSendList); + // 4.发放 grantSendInfo(successIds, salarySend, salaryTemplate, salaryBillSendParam); @@ -232,8 +239,6 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService + SalaryI18nUtil.getI18nLabel(134808, "失败条数") + "[" + (total - successCount) + "]"; // 发送进度完成 getProgressService(user).finish(SalaryCacheKey.SALARY_GRANT_PROGRESS + "_" + salarySend.getId(), true, messsage); -// log.info("工资单发送组装耗时:{}毫秒;工资单发送消息中心耗时:{}毫秒;工资单数据更改总耗时:{}毫秒;工资单发送总耗时:{}毫秒;工资单云桥图片地址:{}", l3 - l2, l4 - l3, l5 - l4, System.currentTimeMillis() - l, -// salaryBillSendParam == null ? "" : salaryBillSendParam.getPicUrl()); } catch (Exception e) { log.info("发送出错:{}", e.getMessage(), e); // 发送进度失败 @@ -242,6 +247,32 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService } } + private void genPdf(SalaryBillSendDTO salaryBillSendParam, List> enableSendList) { + boolean genPdf = "1".equals(HrmSalaryPayrollConf.GEN_PDF); + if (genPdf) { + LocalRunnable localRunnable = new LocalRunnable() { + @Override + public void execute() { + //生成工资单pdf + enableSendList.forEach(e -> { + SalaryBillBO.genPdf(e, salaryBillSendParam); + }); + + //合并工资单pdf + //1、先获取所有工资单 + Long id = salaryBillSendParam.getSalarySend().getId(); + List salarySendInfos = getSalarySendInfoMapper().listSome(SalarySendInfoPO.builder().salarySendId(id).sendStatus(1).build()); + //2、工资单pdf转为路径 + String yyyyMM = SalaryDateUtil.getFormatYearMonth(salaryBillSendParam.getSalaryDate()); + List filesToMerge = salarySendInfos.stream().map(po -> HrmSalaryPayrollConf.GEN_PATH + yyyyMM + File.separator + po.getId() + ".pdf").collect(Collectors.toList()); + String pdfPath = HrmSalaryPayrollConf.GEN_PATH + yyyyMM + File.separator + id + ".pdf"; + SalaryBillBO.mergePdf(pdfPath, filesToMerge); + } + }; + ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "salaryBillGenPdf", localRunnable); + } + } + /** * 构建发送参数 * @@ -301,7 +332,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService // 工资单水印文本动态变量 List wmTextFieldIds = SalaryBillBO.getWmTextFieldIds(domain, salaryBillWatermark); // 邮件水印模板 - boolean isEnableEmail = salaryTemplate.getEmailStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue()); + boolean isEnableEmail = salaryTemplate.getEmailStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue()); String emailWmContentTemplate = SalaryBillBO.buildEmailWmContentTemplate(isEnableEmail, salaryBillWatermark); return SalaryBillSendDTO.builder() @@ -428,7 +459,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService @Override public void confirmSalaryBill(Long salaryInfoId) { SalarySendInfoPO sendInfoPO = getSalarySendInfoMapper().getById(salaryInfoId); - if(ObjectUtils.isEmpty(sendInfoPO)){ + if (ObjectUtils.isEmpty(sendInfoPO)) { throw new SalaryRunTimeException("工资单不存在或已被删除!"); } sendInfoPO.setBillConfirmStatus(BillConfimStatusEnum.CONFIRMED.getValue()); @@ -439,7 +470,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService @Override public void feedBackSalaryBill(Long salaryInfoId) { SalarySendInfoPO sendInfoPO = getSalarySendInfoMapper().getById(salaryInfoId); - if(ObjectUtils.isEmpty(sendInfoPO)){ + if (ObjectUtils.isEmpty(sendInfoPO)) { throw new SalaryRunTimeException("工资单不存在或已被删除!"); } sendInfoPO.setBillConfirmStatus(BillConfimStatusEnum.FEEDBACK.getValue()); @@ -447,6 +478,20 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService getSalarySendInfoMapper().updateIgnoreNull(sendInfoPO); } + @Override + public String exportPdf(SalaryExportPdfParam param) { + SalarySendPO salarySend = checkAndGetSalarySend(param.getSalarySendId()); + String yearMonth = SalaryDateUtil.getFormatYearMonth(salarySend.getSalaryMonth()); + String path = HrmSalaryPayrollConf.GEN_PATH + File.separator + yearMonth + File.separator + "%s" + ".pdf"; + Long id = param.getId(); + if (id == null) { + path = String.format(path, param.getSalarySendId()); + } else { + path = String.format(path, id); + } + return path; + } + public List> getSendInfoList(Long sendId, List ids) { SalarySendPO salarySend = getSalarySendMapper().getById(sendId); diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index f8a7ce21d..1fe1403c4 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -29,8 +29,11 @@ import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.StreamingOutput; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.Paths; import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; @@ -521,6 +524,47 @@ public class SalaryBillController { return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); } +// @GET +// @Path("/exportPdf") +// @Produces({"application/pdf"}) +// public Response getPDF(@Context HttpServletRequest request, @Context HttpServletResponse response) { +// +// File f = new File("D:\\gzd\\2023-02\\1695104948592.pdf"); +// return Response.ok(f, "application/pdf").build(); +// +// } + + @GET + @Path("/exportPdf") + public Response downloadPdfFile(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + SalaryExportPdfParam salaryExportPdfParam = new SalaryExportPdfParam(); + String id = request.getParameter("id"); + if(StringUtils.isNotBlank(id)){ + salaryExportPdfParam.setId(Long.valueOf(id)); + } + String salarySendId = request.getParameter("salarySendId"); + if(StringUtils.isNotBlank(salarySendId)){ + salaryExportPdfParam.setSalarySendId(Long.valueOf(salarySendId)); + } + + StreamingOutput fileStream = new StreamingOutput() { + @Override + public void write(java.io.OutputStream output) throws IOException, WebApplicationException + { + String pdfPath = getSalarySendWrapper(user).exportPdf(salaryExportPdfParam); + java.nio.file.Path path = Paths.get(pdfPath); + byte[] data = Files.readAllBytes(path); + output.write(data); + output.flush(); + } + }; + return Response + .ok(fileStream, MediaType.APPLICATION_OCTET_STREAM) + .header("content-disposition","attachment; filename = myfile.pdf") + .build(); + } + /** * 我的工资单列表 * diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index 1d890905a..c1f84e730 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -14,7 +14,6 @@ import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.constant.SalaryItemConstant; -import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryBill.dto.*; import com.engine.salary.entity.salaryBill.param.*; import com.engine.salary.entity.salaryBill.po.SalarySendPO; @@ -698,4 +697,8 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy } getSalaryBillService(user).feedBackSalaryBill(salaryInfoId); } + + public String exportPdf(SalaryExportPdfParam param) { + return getSalaryBillService(user).exportPdf(param); + } } From 1de83a57c24548a005858199e2697cc278a97573 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 26 Sep 2023 10:00:00 +0800 Subject: [PATCH 04/18] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95pdf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/constant/HrmSalaryPayrollConf.java | 4 ++-- .../salary/entity/salaryBill/bo/SalaryBillBO.java | 5 +++-- .../salary/service/impl/SalaryBillServiceImpl.java | 11 ++++++----- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/com/engine/salary/constant/HrmSalaryPayrollConf.java b/src/com/engine/salary/constant/HrmSalaryPayrollConf.java index 0b0139420..e8bc9e341 100644 --- a/src/com/engine/salary/constant/HrmSalaryPayrollConf.java +++ b/src/com/engine/salary/constant/HrmSalaryPayrollConf.java @@ -6,8 +6,8 @@ public class HrmSalaryPayrollConf { public static final BaseBean baseBean = new BaseBean(); - public static final String GEN_PDF = baseBean.getPropValue("hrmSalaryPayroll", "genPdf"); - public static final String HAS_SIGN = baseBean.getPropValue("hrmSalaryPayroll", "hasSign"); + public static final boolean GEN_PDF = "1".equals(baseBean.getPropValue("hrmSalaryPayroll", "genPdf")); + public static final boolean HAS_SIGN = "1".equals(baseBean.getPropValue("hrmSalaryPayroll", "hasSign")); public static final String TO_PDF_TOOL_PATH = baseBean.getPropValue("hrmSalaryPayroll", "toPdfToolPath"); public static final String GEN_PATH = baseBean.getPropValue("hrmSalaryPayroll", "genPath"); diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java index cef9101a2..71344e181 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java @@ -47,6 +47,8 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; +import static com.engine.salary.constant.HrmSalaryPayrollConf.HAS_SIGN; + public class SalaryBillBO { private static final Logger log = LoggerFactory.getLogger(SalaryBillBO.class); @@ -550,8 +552,7 @@ public class SalaryBillBO { } //签章 - boolean hasSign = "1".equals(HrmSalaryPayrollConf.HAS_SIGN); - if (hasSign) { + if (HAS_SIGN) { RecordSet rs = new RecordSet(); rs.execute("select * from DocSignature where hrmresid=" + e.getOrDefault("employeeId", "1") + " order by markid"); if (rs.next()) { diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java index 821bec203..1d30061d3 100644 --- a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -55,6 +55,8 @@ import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; +import static com.engine.salary.constant.HrmSalaryPayrollConf.GEN_PDF; + /** * 工资单发放 *

Copyright: Copyright (c) 2022

@@ -248,8 +250,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService } private void genPdf(SalaryBillSendDTO salaryBillSendParam, List> enableSendList) { - boolean genPdf = "1".equals(HrmSalaryPayrollConf.GEN_PDF); - if (genPdf) { + if (GEN_PDF) { LocalRunnable localRunnable = new LocalRunnable() { @Override public void execute() { @@ -437,7 +438,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService // 更新进度 getProgressService(user).getAndAddCalculatedQty(SalaryCacheKey.SALARY_GRANT_PROGRESS + "_" + salarySend.getId(), part.size()); /** 注意只有邮件才需要加密的核算数据 */ - if (isEnableEmail) { + if (isEnableEmail || GEN_PDF) { List acctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIdsAndEmployeeIds(Collections.singletonList(salarySend.getSalaryAccountingId()), part); salaryAcctEmployees.addAll(acctEmployees); salaryAcctResultValues.addAll(getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(SalaryEntityUtil.properties(acctEmployees, SalaryAcctEmployeePO::getId, Collectors.toList()))); @@ -445,7 +446,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService } } else { /** 注意只有邮件才需要加密的核算数据 */ - if (isEnableEmail) { + if (isEnableEmail || GEN_PDF) { salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salarySend.getSalaryAccountingId()); salaryAcctResultValues = getSalaryAcctResultService(user).listBySalaryAcctRecordIds(Collections.singletonList(salarySend.getSalaryAccountingId())); } @@ -570,7 +571,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService SalaryBillBO.sendMsg(salaryBillSendParam, Long.valueOf(e.get("id").toString()), Long.valueOf(e.get("employeeId").toString())); } - if (sendChannels.contains(MessageChannelEnum.EMAIL)) { + if (sendChannels.contains(MessageChannelEnum.EMAIL) || GEN_PDF) { // 构建发送消息 SalaryBillBO.buildEmployeeInfo(salaryBillSendParam, allEmployeeMap.get(e.get("employeeId").toString())); SalaryBillBO.sendEmail(e, salaryBillSendParam); From e37922c52fd09f1af4504a329b7d9274d41cf131 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 26 Sep 2023 10:26:12 +0800 Subject: [PATCH 05/18] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95pdf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java | 5 +++-- .../engine/salary/service/impl/SalaryBillServiceImpl.java | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java index 71344e181..13d873527 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java @@ -281,14 +281,15 @@ public class SalaryBillBO { String content = genPayrollHtmlContent(e, salaryBillSendParam); String yyyyMM = SalaryDateUtil.getFormatYearMonth(salaryBillSendParam.getSalaryDate()); + Long sendId = salaryBillSendParam.getSalarySend().getId(); Object id = e.getOrDefault("id", 1L); - String htmlPath = HrmSalaryPayrollConf.GEN_PATH + yyyyMM + File.separator + id + ".html"; + String htmlPath = HrmSalaryPayrollConf.GEN_PATH + yyyyMM + File.separator + sendId + File.separator + id + ".html"; FileUtil.del(htmlPath); File touch = FileUtil.touch(htmlPath); FileUtil.appendUtf8String(content, touch); - String pdfPath = HrmSalaryPayrollConf.GEN_PATH + yyyyMM + 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); } diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java index 1d30061d3..ce6f2eced 100644 --- a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -265,8 +265,8 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService List salarySendInfos = getSalarySendInfoMapper().listSome(SalarySendInfoPO.builder().salarySendId(id).sendStatus(1).build()); //2、工资单pdf转为路径 String yyyyMM = SalaryDateUtil.getFormatYearMonth(salaryBillSendParam.getSalaryDate()); - List filesToMerge = salarySendInfos.stream().map(po -> HrmSalaryPayrollConf.GEN_PATH + yyyyMM + File.separator + po.getId() + ".pdf").collect(Collectors.toList()); - String pdfPath = HrmSalaryPayrollConf.GEN_PATH + yyyyMM + File.separator + id + ".pdf"; + List filesToMerge = salarySendInfos.stream().map(po -> HrmSalaryPayrollConf.GEN_PATH + yyyyMM + File.separator + id+ File.separator + po.getId() + ".pdf").collect(Collectors.toList()); + String pdfPath = HrmSalaryPayrollConf.GEN_PATH + yyyyMM + File.separator + id+ File.separator + id + ".pdf"; SalaryBillBO.mergePdf(pdfPath, filesToMerge); } }; From f99bb21bab8bdef266649bd594f6b8fdbe01e514 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 26 Sep 2023 14:29:12 +0800 Subject: [PATCH 06/18] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E6=95=88=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryAcctCalculateServiceImpl.java | 38 ++++++++++++- .../impl/SalaryAcctResultServiceImpl.java | 56 ++++++++++++------- .../impl/SalaryAcctResultTempServiceImpl.java | 17 ++++-- 3 files changed, 81 insertions(+), 30 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index 018702a7a..e61e15346 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -34,6 +34,7 @@ import org.apache.commons.collections4.ListUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; +import org.springframework.util.StopWatch; import weaver.general.BaseBean; import weaver.hrm.User; import weaver.wechat.util.Utils; @@ -111,17 +112,23 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc @Override public void calculate(SalaryAcctCalculateBO salaryAcctCalculateBO, DataCollectionEmployee simpleEmployee, List salarySobBackItems) { + StopWatch sw = new StopWatch(); Date now = new Date(); try { // 数据库字段加密用 // 1、查询人员信息 + sw.start("核算耗时查询人员信息"); List employeeIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getSalaryAcctEmployeePOS(), SalaryAcctEmployeePO::getEmployeeId, Collectors.toList()); List simpleEmployees = getSalaryEmployeeService(user).getEmployeeByIdsAll(employeeIds); SalarySobCycleDTO salarySobCycleDTO = salaryAcctCalculateBO.getSalarySobCycleDTO(); Long taxAgentId = salaryAcctCalculateBO.getSalarySobPO().getTaxAgentId(); + sw.stop(); // 2、查询薪资档案的数据 + sw.start("核算耗时查询薪资档案的数据"); List salaryArchiveData = getSalaryArchiveService(user).getSalaryArchiveData(salarySobCycleDTO.getSalaryCycle(), employeeIds, taxAgentId); + sw.stop(); // 3、查询往期累计情况(查询的是上个税款所属期的的累计情况) + sw.start("核算耗时查询往期累计情况"); List addUpSituationPOS; if (salarySobCycleDTO.getTaxCycle().getMonth() == Month.JANUARY) { // 3.1、如果当前税款所属期是本年度第一个税款所属期,就不需要查询往期累计情况 @@ -129,19 +136,30 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc } else { addUpSituationPOS = getAddUpSituationService(user).getAddUpSituationList(salarySobCycleDTO.getTaxCycle().plusMonths(-1), employeeIds); } + sw.stop(); // 4、查询累计专项附加扣除 + sw.start("核算耗时查询累计专项附加扣除"); List addUpDeductionPOS = getAddUpDeductionService(user).getAddUpDeductionList(salarySobCycleDTO.getTaxCycle(), employeeIds, taxAgentId); + sw.stop(); // 5、查询其他免税扣除 + sw.start("核算耗时查询其他免税扣除"); List otherDeductionPOS = getOtherDeductionService(user).getOtherDeductionList(salarySobCycleDTO.getTaxCycle(), employeeIds, taxAgentId); + sw.stop(); //6、查询社保福利 + sw.start("核算耗时查询社保福利"); List> welfareData = getSIAccountService(user).welfareData(salarySobCycleDTO.getSocialSecurityCycle().toString(), employeeIds, taxAgentId); + sw.stop(); // 7、查询考勤数据 + sw.start("核算耗时查询考勤数据"); List attendQuoteDataDTOS = getAttendQuoteDataService(user).getAttendQuoteData(salarySobCycleDTO.getSalaryMonth(), salarySobCycleDTO.getSalarySobId(), employeeIds); + sw.stop(); // 8、查询薪资核算人员的薪资核算结果 + sw.start("核算耗时查询薪资核算人员的薪资核算结果"); List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getSalaryAcctEmployeePOS(), SalaryAcctEmployeePO::getId, Collectors.toList()); List salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); - + sw.stop(); // 薪资回算时回算前的核算结果 (没有回算项) + sw.start("核算耗时查询薪资回算时回算前的核算结果"); Map> collect = salaryAcctResultPOS.stream().collect(Collectors.groupingBy(k -> k.getEmployeeId() + "-" + k.getTaxAgentId() + "-" + k.getSalaryItemId())); Map salaryAcctResultPOMap = new HashMap<>(); for (Map.Entry> et : collect.entrySet()) { @@ -150,18 +168,24 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc //核算锁定的值 Map salaryAcctLockResultPOS = MapUtils.emptyIfNull(salaryAcctCalculateBO.getSalaryAcctLockResultPOS()); List lockSalaryItemIds = ListUtils.emptyIfNull(salaryAcctCalculateBO.getLockSalaryItemIds()); + sw.stop(); // 9、查询相同税款所属期内涉及合并计税的其他薪资核算结果 + sw.start("核算耗时查询相同税款所属期内涉及合并计税的其他薪资核算结果"); Set otherSalaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getOtherSalaryAcctRecordPOS(), SalaryAcctRecordPO::getId); List otherSalaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIdsAndEmployeeIds(otherSalaryAcctRecordIds, employeeIds); Map> otherSalaryAcctResultPOMap = SalaryEntityUtil.group2Map(otherSalaryAcctResultPOS, e -> e.getEmployeeId() + "_" + e.getTaxAgentId()); + sw.stop(); // 9.1、查询相同税款所属期内设计合并计税的其他薪资核算人员 + sw.start("核算耗时查询相同税款所属期内设计合并计税的其他薪资核算人员"); List otherSalaryAcctEmployeePOS = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIdsAndEmployeeIds(otherSalaryAcctRecordIds, employeeIds); Map> otherSalaryAcctEmployeePOMap = SalaryEntityUtil.group2Map(otherSalaryAcctEmployeePOS, salaryAcctEmployeePO -> salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId()); - + sw.stop(); // 10、转换成公式编辑器中的变量 + sw.start("核算耗时转换成公式编辑器中的变量"); CalculateFormulaVarBO calculateFormulaVarBO = new CalculateFormulaVarBO(simpleEmployees, salaryArchiveData, addUpSituationPOS, addUpDeductionPOS, otherDeductionPOS, welfareData, attendQuoteDataDTOS, salaryAcctResultPOS); Map> formulaVarMap = calculateFormulaVarBO.convert2FormulaVar(salaryAcctCalculateBO); - + sw.stop(); + sw.start("核算耗时数据结构准备"); // 本次薪资核算所用的薪资账套下的薪资项目 Map salaryItemIdKeySalarySobItemPOMap = SalaryEntityUtil.convert2Map(salaryAcctCalculateBO.getSalarySobItemPOS(), SalarySobItemPO::getSalaryItemId); // 本次薪资核算所用的公式 @@ -172,7 +196,9 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc Set salarySobBackItemIds = SalaryEntityUtil.properties(salarySobBackItems, SalarySobBackItemPO::getSalaryItemId); Map salarySobBackItemMap = SalaryEntityUtil.convert2Map(salarySobBackItems, SalarySobBackItemPO::getSalaryItemId); List salaryAcctResultTempPOS = Lists.newArrayList(); + sw.stop(); // 开始核算 + sw.start("核算耗时核算耗时"); StringBuffer noticeMsg = new StringBuffer(); for (SalaryAcctEmployeePO salaryAcctEmployeePO : salaryAcctCalculateBO.getSalaryAcctEmployeePOS()) { Long salaryAcctEmployeePOId = salaryAcctEmployeePO.getId(); @@ -262,13 +288,19 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc } } } + sw.stop(); // 保存新的薪资核算结果(临时存储) + sw.start("核算耗时保存新的薪资核算结果(临时存储)"); getSalaryAcctResultTempService(user).batchSave(salaryAcctResultTempPOS); + sw.stop(); // 更新薪资核算进度 + sw.start("更新薪资核算进度"); getSalaryAcctProgressService(user).getAndAddCalculatedQty(SalaryCacheKey.ACCT_PROGRESS + salaryAcctCalculateBO.getSalaryAcctRecordPO().getId(), salaryAcctCalculateBO.getSalaryAcctEmployeePOS().size(), noticeMsg.toString() ); + sw.stop(); + log.info("核算耗时明细" + sw.prettyPrint()); // 记录子线程执行结果 salaryAcctCalculateBO.getResults().add(new SalaryAcctCalculateBO.Result(true, StringUtils.EMPTY)); } catch (Exception e) { diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 717cfc917..1674d2b0b 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -55,6 +55,7 @@ import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import org.springframework.util.StopWatch; import weaver.hrm.User; import java.math.BigDecimal; @@ -331,7 +332,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); Map salaryItemIdKeySalarySobItemPOMap = SalaryEntityUtil.convert2Map(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); - if(Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), NumberUtils.INTEGER_ONE)){ + if (Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), NumberUtils.INTEGER_ONE)) { // 是回算,获取回算项 List salarySobBackItemPOS = getSalarySobBackItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); salaryItemIds.addAll(salarySobBackItemPOS.stream().map(SalarySobBackItemPO::getSalaryItemId).collect(Collectors.toList())); @@ -339,7 +340,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe List salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds); // 查询薪资核算结果 - List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId,Collectors.toList()); + List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId, Collectors.toList()); List salaryAcctResultPOS = listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); Map map = new HashMap<>(); @@ -396,7 +397,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } List salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds); // 查询薪资核算结果 - List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId,Collectors.toList()); + List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId, Collectors.toList()); List salaryAcctResultPOS = listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); // 查询人员信息 List employeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getEmployeeId, Collectors.toList()); @@ -477,7 +478,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user).listByRecordIdsAndEmpIdAndTaxAgentId(salaryAcctRecordIds, salaryAcctEmployeePO.getEmployeeId(), salaryAcctEmployeePO.getTaxAgentId()); } // 查询薪资核算人员的薪资核算结果 - List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId,Collectors.toList()); + List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId, Collectors.toList()); List salaryAcctResultPOS = listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); // 查询薪资核算人员所有合并计税的薪资核算记录所用的账套 Set salarySobIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getSalarySobId); @@ -555,13 +556,13 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // 保存参数转换成薪资核算结果po List salaryAcctResultPOS = SalaryAcctResultBO.convert2PO(salaryAcctResultPOSOld, saveParam, salaryAcctEmployeePO, (long) user.getUID()); SalarySysConfPO autoLock = getSalarySysConfService(user).getOneByCode(SalarySysConstant.EDIT_IMPORT_AUTO_LOCK); - if(autoLock != null && StringUtils.equals(autoLock.getConfValue(),"1")){ + if (autoLock != null && StringUtils.equals(autoLock.getConfValue(), "1")) { // 对比核算结果提取修改了哪些薪资项目 Set needLockItems = new HashSet<>(); Map oldResutMap = SalaryEntityUtil.convert2Map(salaryAcctResultPOSOld, SalaryAcctResultPO::getSalaryItemId); salaryAcctResultPOS.stream().forEach(PO -> { String oldValue = Optional.ofNullable(oldResutMap.get(PO.getSalaryItemId())).map(SalaryAcctResultPO::getResultValue).orElse(""); - if(!StringUtils.equals(oldValue,PO.getResultValue())){ + if (!StringUtils.equals(oldValue, PO.getResultValue())) { needLockItems.add(PO.getSalaryItemId()); } }); @@ -601,7 +602,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // 存储薪资核算结果数据来源日志 salaryAcctResultPOS = getSalaryAcctRecordService(user).listBySalaryAcctEmpId(saveParam.getSalaryAcctEmpId()); - saveSalaryAcctResultLog(salaryAcctResultPOSOld,salaryAcctResultPOS); + saveSalaryAcctResultLog(salaryAcctResultPOSOld, salaryAcctResultPOS); // 查询操作日志的targetName // String targetName = getSalaryAcctRecordService(user).getLogTargetNameById(salaryAcctEmployeePO.getSalaryAcctRecordId()); @@ -623,6 +624,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe /** * 存储薪资核算结果数据来源日志 + * * @param salaryAcctResultPOSOld * @param salaryAcctResultPOS */ @@ -631,11 +633,11 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe List editItems = new ArrayList<>(); Map oldResutMap = SalaryEntityUtil.convert2Map(salaryAcctResultPOSOld, SalaryAcctResultPO::getSalaryItemId); salaryAcctResultPOS.stream().forEach(PO -> { - if(oldResutMap.get(PO.getSalaryItemId()) == null){ + if (oldResutMap.get(PO.getSalaryItemId()) == null) { editItems.add(PO); - }else{ + } else { String oldValue = oldResutMap.get(PO.getSalaryItemId()).getResultValue(); - if(!StringUtils.equals(oldValue,PO.getResultValue())){ + if (!StringUtils.equals(oldValue, PO.getResultValue())) { editItems.add(PO); } } @@ -676,7 +678,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe @Override public void calculate(SalaryAcctCalculateParam calculateParam, DataCollectionEmployee simpleEmployee) { + StopWatch stopWatch = new StopWatch(); try { + stopWatch.start("核算总耗时数据准备"); // 1、查询薪资核算记录 SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(calculateParam.getSalaryAcctRecordId()); if (Objects.isNull(salaryAcctRecordPO)) { @@ -746,6 +750,10 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe if (CollectionUtils.isEmpty(salaryAcctEmployeePOS)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(103378, "薪资核算人员不能为空")); } + + stopWatch.stop(); + stopWatch.start("核算完毕计时"); + // 11.1、初始化进度 ProgressDTO initProgress = new ProgressDTO().setTitle(SalaryI18nUtil.getI18nLabel(97515, "核算中")).setTitleLabelId(97515L).setTotalQuantity(salaryAcctEmployeePOS.size() * 2 + 1).setCalculatedQuantity(0).setProgress(BigDecimal.ZERO).setStatus(true).setMessage(StringUtils.EMPTY); getSalaryAcctProgressService(user).initProgress(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId(), initProgress); @@ -792,6 +800,10 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } // 13、等待所有子线程执行完毕 childMonitor.await(); + + stopWatch.stop(); + stopWatch.start("核算入库计时"); + // 14、判断子线程执行结果 boolean allSuccess = calculateResults.stream().allMatch(SalaryAcctCalculateBO.Result::isStatus); if (!allSuccess) { @@ -812,6 +824,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // Thread.sleep(10); getSalaryAcctProgressService(user).finish(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId(), true); + stopWatch.stop(); + log.info(stopWatch.prettyPrint()); // 存储薪资核算数据来源日志 new Thread() { public void run() { @@ -819,8 +833,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe List salaryAcctEmployeeIds = salaryAcctEmployeePOS.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); exceptItemIds.addAll(lockSalaryItemIds); exceptItemIds.addAll(salaryItemPOS.stream().filter(PO -> Objects.equals(PO.getValueType(), NumberUtils.INTEGER_ONE) && - Objects.equals(PO.getUseInEmployeeSalary(),0)) - .map(SalaryItemPO::getId).collect(Collectors.toList()) ); + Objects.equals(PO.getUseInEmployeeSalary(), 0)) + .map(SalaryItemPO::getId).collect(Collectors.toList())); getSalaryAcctResultLogService(user).deleteBySalaryAcctEmpIdExceptItemIds(salaryAcctEmployeeIds, exceptItemIds); } }.start(); @@ -940,9 +954,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // } Set salaryItemIds; - if(CollectionUtils.isNotEmpty(updateParam.getSalaryItemIds())){ + if (CollectionUtils.isNotEmpty(updateParam.getSalaryItemIds())) { salaryItemIds = updateParam.getSalaryItemIds(); - }else{ + } else { salaryItemIds = Collections.singleton(updateParam.getSalaryItemId()); } if (updateParam.getLockStatus() == LockStatusEnum.LOCK) { @@ -981,10 +995,10 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe @Override public List listByAcctEmployeeIdsAndSalaryItemIds(List salaryAcctEmployeeIds, Collection salaryItemIds) { - if(CollectionUtils.isEmpty(salaryAcctEmployeeIds)){ + if (CollectionUtils.isEmpty(salaryAcctEmployeeIds)) { return Collections.emptyList(); } - List> partition = Lists.partition((List)salaryAcctEmployeeIds, 200); + List> partition = Lists.partition((List) salaryAcctEmployeeIds, 200); List result = new ArrayList<>(); partition.forEach(empIds -> { SalaryAcctResultPO build = SalaryAcctResultPO.builder().salaryAcctEmpIds(empIds).salaryItemIds(salaryItemIds).build(); @@ -1007,10 +1021,10 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe @Override public List listAcctEmpIdByAcctEmpId(List salaryAcctEmployeeIds) { - if(CollectionUtils.isEmpty(salaryAcctEmployeeIds)){ + if (CollectionUtils.isEmpty(salaryAcctEmployeeIds)) { return Collections.emptyList(); } - List> partition = Lists.partition((List)salaryAcctEmployeeIds, 1000); + List> partition = Lists.partition((List) salaryAcctEmployeeIds, 1000); List result = new ArrayList<>(); partition.forEach(empIds -> { result.addAll(getSalaryAcctResultMapper().getAcctEmpIsExist(empIds)); @@ -1047,15 +1061,15 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe public Boolean checkAuth(Long salaryAcctRecordId) { // 获取该核算记录的个税扣缴义务 SalaryAcctRecordPO recordPO = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); - if(Objects.isNull(recordPO)) { + if (Objects.isNull(recordPO)) { return false; } SalarySobPO salarySobPO = getSalarySobService(user).getById(recordPO.getSalarySobId()); Long taxAgentId = salarySobPO.getTaxAgentId(); List adminTaxAgentList = getTaxAgentAdminService(user).listByEmployeeId(Long.valueOf(user.getUID())); Optional canOperate = adminTaxAgentList.stream().filter(po -> NumberUtils.compare(taxAgentId, po.getTaxAgentId()) == 0).findFirst(); - if(!canOperate.isPresent()){ - return false; + if (!canOperate.isPresent()) { + return false; } return true; } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultTempServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultTempServiceImpl.java index da0c96c09..0509e5a35 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultTempServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultTempServiceImpl.java @@ -8,6 +8,7 @@ import com.engine.salary.util.db.MapperProxyFactory; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; import java.util.Collection; import java.util.List; @@ -21,17 +22,17 @@ import java.util.List; * @version 1.0 **/ public class SalaryAcctResultTempServiceImpl extends Service implements SalaryAcctResultTempService { + boolean isSqlserver = "sqlserver".equalsIgnoreCase(new RecordSet().getDBType()); - private SalaryAcctResultTempMapper getSalaryAcctResultTempMapper(){ + private SalaryAcctResultTempMapper getSalaryAcctResultTempMapper() { return MapperProxyFactory.getProxy(SalaryAcctResultTempMapper.class); } - - + @Override public List listByCalculateKey(String calculateKey) { - if (StringUtils.isBlank(calculateKey)){ + if (StringUtils.isBlank(calculateKey)) { return Lists.newArrayList(); } return getSalaryAcctResultTempMapper().listSome(SalaryAcctResultTempPO.builder().calculateKey(calculateKey).build()); @@ -42,8 +43,12 @@ public class SalaryAcctResultTempServiceImpl extends Service implements SalaryAc @Override public void batchSave(Collection salaryAcctResultTempPOS) { if (CollectionUtils.isNotEmpty(salaryAcctResultTempPOS)) { - List> partition = Lists.partition((List) salaryAcctResultTempPOS, 100); - partition.forEach(p->getSalaryAcctResultTempMapper().batchInsert(p)); + if (isSqlserver) { + List> partition = Lists.partition((List) salaryAcctResultTempPOS, 100); + partition.forEach(p -> getSalaryAcctResultTempMapper().batchInsert(p)); + } else { + getSalaryAcctResultTempMapper().batchInsert(salaryAcctResultTempPOS); + } } } From a7e8498b988b688576e2c0d617e57d705258821b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 26 Sep 2023 17:18:27 +0800 Subject: [PATCH 07/18] =?UTF-8?q?=E5=8F=96=E6=B6=88=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/SalaryAcctResultService.java | 2 +- .../impl/SalaryAcctCalculateServiceImpl.java | 2 +- .../impl/SalaryAcctResultServiceImpl.java | 108 +++++------------- .../impl/SalarySysConfServiceImpl.java | 23 ++-- 4 files changed, 47 insertions(+), 88 deletions(-) diff --git a/src/com/engine/salary/service/SalaryAcctResultService.java b/src/com/engine/salary/service/SalaryAcctResultService.java index 20b9ad2f8..0925db0b6 100644 --- a/src/com/engine/salary/service/SalaryAcctResultService.java +++ b/src/com/engine/salary/service/SalaryAcctResultService.java @@ -118,7 +118,7 @@ public interface SalaryAcctResultService { * * @param salaryAcctResultPOS 薪资核算结果 */ - void batchSave(Collection salaryAcctResultPOS); + void batchSave(List salaryAcctResultPOS); /** * 根据薪资核算人员id删除薪资核算结果 diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index e61e15346..c6469f75d 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -112,7 +112,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc @Override public void calculate(SalaryAcctCalculateBO salaryAcctCalculateBO, DataCollectionEmployee simpleEmployee, List salarySobBackItems) { - StopWatch sw = new StopWatch(); + StopWatch sw = new StopWatch(salaryAcctCalculateBO.getSalaryAcctRecordPO().getId()+""); Date now = new Date(); try { // 数据库字段加密用 diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 1674d2b0b..557b029aa 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -346,13 +346,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe Map map = new HashMap<>(); Map> acctResultMap = SalaryEntityUtil.group2Map(salaryAcctResultPOS, SalaryAcctResultPO::getSalaryItemId); salaryItemPOS.stream().filter(item -> SalaryDataTypeEnum.NUMBER.getValue().equals(item.getDataType())).forEach(item -> { - BigDecimal sum = Optional.ofNullable(acctResultMap.get(item.getId())) - .orElse(new ArrayList<>()) - .stream() - .map(SalaryAcctResultPO::getResultValue) - .filter(NumberUtils::isCreatable) - .map(BigDecimal::new) - .reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal sum = Optional.ofNullable(acctResultMap.get(item.getId())).orElse(new ArrayList<>()).stream().map(SalaryAcctResultPO::getResultValue).filter(NumberUtils::isCreatable).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add); map.put(item.getId().toString(), SalaryAcctFormulaBO.roundResultValue(sum.toString(), item, Collections.emptyList(), Collections.emptyMap(), salaryItemIdKeySalarySobItemPOMap)); }); return map; @@ -439,8 +433,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe }); // 转换成薪资核算结果列表 - return SalaryAcctResultBO.buildTableData(salaryItemPOS, salarySobEmpFieldPOS, simpleEmployees, salaryAcctEmployeePOS, salaryAcctResultPOS, taxAgentPOS, - salaryAcctEmployeeIds4ConsolidatedTax, customParameters, customBackCalcParameters, isBackCalc); + return SalaryAcctResultBO.buildTableData(salaryItemPOS, salarySobEmpFieldPOS, simpleEmployees, salaryAcctEmployeePOS, salaryAcctResultPOS, taxAgentPOS, salaryAcctEmployeeIds4ConsolidatedTax, customParameters, customBackCalcParameters, isBackCalc); } @@ -504,22 +497,12 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe for (SalarySobItemIncomeCategoryDTO incomeCategoryDTO : salarySobItemAggregateDTO.getIncomeCategories()) { for (SalarySobItemGroupDTO salarySobItemGroupDTO : incomeCategoryDTO.getItemGroups()) { for (SalarySobItemDTO salarySobItemDTO : salarySobItemGroupDTO.getItems()) { - SalaryAcctResultListColumnDTO salaryAcctResultListColumnDTO = new SalaryAcctResultListColumnDTO() - .setColumnName(salarySobItemDTO.getName()) - .setFormulaId(salarySobItemDTO.getFormulaId()) - .setFormulaContent(salarySobItemDTO.getFormulaContent()) - .setShowLock((!Objects.equals(salarySobItemDTO.getFormulaId(), NumberUtils.LONG_ZERO) && salarySobItemDTO.isCanEdit()) - || Objects.equals(salarySobItemDTO.getUseInEmployeeSalary(), NumberUtils.INTEGER_ONE)); + SalaryAcctResultListColumnDTO salaryAcctResultListColumnDTO = new SalaryAcctResultListColumnDTO().setColumnName(salarySobItemDTO.getName()).setFormulaId(salarySobItemDTO.getFormulaId()).setFormulaContent(salarySobItemDTO.getFormulaContent()).setShowLock((!Objects.equals(salarySobItemDTO.getFormulaId(), NumberUtils.LONG_ZERO) && salarySobItemDTO.isCanEdit()) || Objects.equals(salarySobItemDTO.getUseInEmployeeSalary(), NumberUtils.INTEGER_ONE)); resultMap.put("" + salarySobItemDTO.getSalaryItemId(), salaryAcctResultListColumnDTO); } } for (SalarySobItemDTO salarySobItemDTO : incomeCategoryDTO.getItems()) { - SalaryAcctResultListColumnDTO salaryAcctResultListColumnDTO = new SalaryAcctResultListColumnDTO() - .setColumnName(salarySobItemDTO.getName()) - .setFormulaId(salarySobItemDTO.getFormulaId()) - .setFormulaContent(salarySobItemDTO.getFormulaContent()) - .setShowLock((!Objects.equals(salarySobItemDTO.getFormulaId(), NumberUtils.LONG_ZERO) && salarySobItemDTO.isCanEdit()) - || Objects.equals(salarySobItemDTO.getUseInEmployeeSalary(), NumberUtils.INTEGER_ONE)); + SalaryAcctResultListColumnDTO salaryAcctResultListColumnDTO = new SalaryAcctResultListColumnDTO().setColumnName(salarySobItemDTO.getName()).setFormulaId(salarySobItemDTO.getFormulaId()).setFormulaContent(salarySobItemDTO.getFormulaContent()).setShowLock((!Objects.equals(salarySobItemDTO.getFormulaId(), NumberUtils.LONG_ZERO) && salarySobItemDTO.isCanEdit()) || Objects.equals(salarySobItemDTO.getUseInEmployeeSalary(), NumberUtils.INTEGER_ONE)); resultMap.put("" + salarySobItemDTO.getSalaryItemId(), salaryAcctResultListColumnDTO); } } @@ -527,11 +510,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe if (Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), 1)) { List backCalcItems = salarySobItemAggregateDTO.getBackCalcItems(); for (SalarySobItemDTO backCalcItem : backCalcItems) { - SalaryAcctResultListColumnDTO salaryAcctResultListColumnDTO = new SalaryAcctResultListColumnDTO() - .setColumnName(backCalcItem.getName()) - .setFormulaId(backCalcItem.getFormulaId()) - .setFormulaContent(backCalcItem.getFormulaContent()) - .setShowLock(true); + SalaryAcctResultListColumnDTO salaryAcctResultListColumnDTO = new SalaryAcctResultListColumnDTO().setColumnName(backCalcItem.getName()).setFormulaId(backCalcItem.getFormulaId()).setFormulaContent(backCalcItem.getFormulaContent()).setShowLock(true); resultMap.put("" + backCalcItem.getSalaryItemId(), salaryAcctResultListColumnDTO); } } @@ -568,10 +547,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe }); // 编辑的列都自动锁定 - SalaryAcctResultUpdateLockStatusParam updateLockStatusParam = SalaryAcctResultUpdateLockStatusParam.builder() - .salaryItemIds(needLockItems) - .salaryAcctRecordId(salaryAcctEmployeePO.getSalaryAcctRecordId()) - .lockStatus(LockStatusEnum.LOCK).build(); + SalaryAcctResultUpdateLockStatusParam updateLockStatusParam = SalaryAcctResultUpdateLockStatusParam.builder().salaryItemIds(needLockItems).salaryAcctRecordId(salaryAcctEmployeePO.getSalaryAcctRecordId()).lockStatus(LockStatusEnum.LOCK).build(); getSalaryAcctResultService(user).updateLockStatusByParam(updateLockStatusParam); } // SalaryAcctRecordPO byId = getSalaryAcctRecordService(user).getById(salaryAcctEmployeePO.getSalaryAcctRecordId()); @@ -648,12 +624,11 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe @Override - public void batchSave(Collection salaryAcctResultPOS) { + public void batchSave(List salaryAcctResultPOS) { if (CollectionUtils.isNotEmpty(salaryAcctResultPOS)) { - List list = (List) salaryAcctResultPOS; // 数据加密 - encryptUtil.encryptList(list, SalaryAcctResultPO.class); - List> partition = Lists.partition(list, 100); + encryptUtil.encryptList(salaryAcctResultPOS, SalaryAcctResultPO.class); + List> partition = Lists.partition(salaryAcctResultPOS, 100); partition.forEach(getSalaryAcctResultMapper()::batchInsert); } @@ -678,7 +653,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe @Override public void calculate(SalaryAcctCalculateParam calculateParam, DataCollectionEmployee simpleEmployee) { - StopWatch stopWatch = new StopWatch(); + StopWatch stopWatch = new StopWatch(calculateParam.getSalaryAcctRecordId()+""); try { stopWatch.start("核算总耗时数据准备"); // 1、查询薪资核算记录 @@ -722,11 +697,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe if (CollectionUtils.isNotEmpty(lockSalaryItemIds)) { List acctResultPOS = listBySalaryAcctRecordIdsAndSalaryItemIds(Collections.singleton(calculateParam.getSalaryAcctRecordId()), lockSalaryItemIds); // List acctResultPOS = listBySalaryAcctRecordIds(Collections.singleton(calculateParam.getSalaryAcctRecordId())); - acctResults = Optional.ofNullable(acctResultPOS) - .orElse(new ArrayList<>()) - .stream() - .filter(po -> lockSalaryItemIds.contains(po.getSalaryItemId())) - .collect(Collectors.toMap(po -> po.getSalaryItemId() + "_" + po.getSalaryAcctEmpId(), a -> a, (a, b) -> a)); + acctResults = Optional.ofNullable(acctResultPOS).orElse(new ArrayList<>()).stream().filter(po -> lockSalaryItemIds.contains(po.getSalaryItemId())).collect(Collectors.toMap(po -> po.getSalaryItemId() + "_" + po.getSalaryAcctEmpId(), a -> a, (a, b) -> a)); } // 8、查询公式详情 @@ -769,26 +740,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe TaxDeclarationFunctionEnum taxDeclarationFunction = getSalarySysConfService(user).getTaxDeclaration(); // 12.5、多线程运算,运算结果存放在临时表中 for (List acctEmployeePOS : partition) { - SalaryAcctCalculateBO salaryAcctCalculateBO = new SalaryAcctCalculateBO() - .setSalaryAcctRecordPO(salaryAcctRecordPO) - .setSalarySobPO(salarySobPO) - .setSalarySobCycleDTO(salarySobCycleDTO) - .setOtherSalaryAcctRecordPOS(otherSalaryAcctRecordPOS) - .setSalaryAcctLockResultPOS(MapUtils.emptyIfNull(acctResults)) - .setLockSalaryItemIds(lockSalaryItemIds) - .setSalarySobItemPOS(salarySobItemPOS) - .setSalaryItemIdWithPriorityList(salarySobItemsWithPriority) - .setExpressFormulas(expressFormulas) - .setSalaryItemPOS(salaryItemPOS) - .setSalarySobAdjustRulePOS(salarySobAdjustRulePOS) - .setWelfareColumns(MapUtils.emptyIfNull(welfareColumns)) - .setAttendQuoteFieldListDTOS(attendQuoteFieldListDTOS) - .setSalaryAcctEmployeePOS(acctEmployeePOS) - .setIssuedFieldIds(issuedFieldIds) - .setChildMonitor(childMonitor) - .setResults(calculateResults) - .setCalculateKey(calculateKey) - .setTaxDeclarationFunction(taxDeclarationFunction); + SalaryAcctCalculateBO salaryAcctCalculateBO = new SalaryAcctCalculateBO().setSalaryAcctRecordPO(salaryAcctRecordPO).setSalarySobPO(salarySobPO).setSalarySobCycleDTO(salarySobCycleDTO).setOtherSalaryAcctRecordPOS(otherSalaryAcctRecordPOS).setSalaryAcctLockResultPOS(MapUtils.emptyIfNull(acctResults)).setLockSalaryItemIds(lockSalaryItemIds).setSalarySobItemPOS(salarySobItemPOS).setSalaryItemIdWithPriorityList(salarySobItemsWithPriority).setExpressFormulas(expressFormulas).setSalaryItemPOS(salaryItemPOS).setSalarySobAdjustRulePOS(salarySobAdjustRulePOS).setWelfareColumns(MapUtils.emptyIfNull(welfareColumns)).setAttendQuoteFieldListDTOS(attendQuoteFieldListDTOS).setSalaryAcctEmployeePOS(acctEmployeePOS).setIssuedFieldIds(issuedFieldIds).setChildMonitor(childMonitor).setResults(calculateResults).setCalculateKey(calculateKey).setTaxDeclarationFunction(taxDeclarationFunction); List finalSalarySobBackItems = salarySobBackItems; LocalRunnable localRunnable = new LocalRunnable() { @Override @@ -832,9 +784,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe List exceptItemIds = new ArrayList<>(); List salaryAcctEmployeeIds = salaryAcctEmployeePOS.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); exceptItemIds.addAll(lockSalaryItemIds); - exceptItemIds.addAll(salaryItemPOS.stream().filter(PO -> Objects.equals(PO.getValueType(), NumberUtils.INTEGER_ONE) && - Objects.equals(PO.getUseInEmployeeSalary(), 0)) - .map(SalaryItemPO::getId).collect(Collectors.toList())); + exceptItemIds.addAll(salaryItemPOS.stream().filter(PO -> Objects.equals(PO.getValueType(), NumberUtils.INTEGER_ONE) && Objects.equals(PO.getUseInEmployeeSalary(), 0)).map(SalaryItemPO::getId).collect(Collectors.toList())); getSalaryAcctResultLogService(user).deleteBySalaryAcctEmpIdExceptItemIds(salaryAcctEmployeeIds, exceptItemIds); } }.start(); @@ -864,31 +814,35 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe * @param calculateKey */ private void handleSalaryAcctResultTemp(SalaryAcctCalculateParam calculateParam, String calculateKey) { -// TransactionStatus status = dataSourceTransactionManager.getTransaction(new DefaultTransactionDefinition()); -// try { + StopWatch sw = new StopWatch(calculateParam.getSalaryAcctRecordId()+""); // 查询薪资核算结果的临时存储 + sw.start("处理核算数据,查询薪资核算结果的临时存储"); List salaryAcctResultTempPOS = getSalaryAcctResultTempService(user).listByCalculateKey(calculateKey); + sw.stop(); // 删除原来的薪资核算结果 + sw.start("处理核算数据,删除原来的薪资核算结果"); if (CollectionUtils.isNotEmpty(calculateParam.getIds())) { getSalaryAcctResultMapper().deleteBySalaryAcctEmpIds(calculateParam.getIds()); } else { getSalaryAcctResultMapper().deleteBySalaryAcctRecordIds(Collections.singleton(calculateParam.getSalaryAcctRecordId())); getSalaryAcctReportService(user).deleteBySalaryAcctRecordId(calculateParam.getSalaryAcctRecordId()); } + sw.stop(); // 保存薪资的薪资核算结果 + sw.start("处理核算数据,保存薪资的薪资核算结果"); List salaryAcctResultPOS = SalaryAcctResultBO.convert2ResultPO(salaryAcctResultTempPOS); batchSave(salaryAcctResultPOS); - //保存核算报表数据 - List salaryAcctResultReportPOS = SalaryAcctResultReportBO.convert2ReportPO(salaryAcctResultTempPOS, calculateParam.getEmps()); - getSalaryAcctReportService(user).batchSave(salaryAcctResultReportPOS); + sw.stop(); +// //保存核算报表数据 +// sw.start("处理核算数据,保存核算报表数据"); +// List salaryAcctResultReportPOS = SalaryAcctResultReportBO.convert2ReportPO(salaryAcctResultTempPOS, calculateParam.getEmps()); +// getSalaryAcctReportService(user).batchSave(salaryAcctResultReportPOS); +// sw.stop(); // 删除薪资核算临时存储表中的数据 + sw.start("处理核算数据,删除薪资核算临时存储表中的数据"); getSalaryAcctResultTempService(user).deleteByCalculateKey(calculateKey); -// // 提交事务 -// dataSourceTransactionManager.commit(status); -// } catch (Exception e) { -// dataSourceTransactionManager.rollback(status); -// throw e; -// } + sw.stop(); + log.info(sw.prettyPrint()); } @Override @@ -896,8 +850,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe if (CollectionUtils.isEmpty(salaryAcctRecordIds)) { return Collections.emptyList(); } - return encryptUtil.decryptList(getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctRecordIds(salaryAcctRecordIds).taxAgentIds(taxAgentIds).build()), - SalaryAcctResultPO.class); + return encryptUtil.decryptList(getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctRecordIds(salaryAcctRecordIds).taxAgentIds(taxAgentIds).build()), SalaryAcctResultPO.class); } @@ -977,8 +930,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe SalaryAcctResultPO build = SalaryAcctResultPO.builder().salaryAcctRecordId(id).deleteType(0).build(); List salaryAcctResultPOS = getSalaryAcctResultMapper().listSome(build); // 回算前的薪资核算结果 - salaryAcctResultPOS.forEach(salaryAcctResult -> - salaryAcctResult.setOriginResultValue(salaryAcctResult.getResultValue())); + salaryAcctResultPOS.forEach(salaryAcctResult -> salaryAcctResult.setOriginResultValue(salaryAcctResult.getResultValue())); // 批量更新 batchUpdateOriginResultValue(salaryAcctResultPOS); } diff --git a/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java b/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java index 2a141497f..998790f7f 100644 --- a/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java +++ b/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java @@ -74,6 +74,9 @@ import static java.util.concurrent.Executors.newFixedThreadPool; **/ @Slf4j public class SalarySysConfServiceImpl extends Service implements SalarySysConfService { + + private static volatile Boolean encryptStatus = null; + private EncryptUtil encryptUtil = new EncryptUtil(); private SalarySysConfMapper getSalarySysConfMapper() { @@ -382,11 +385,15 @@ public class SalarySysConfServiceImpl extends Service implements SalarySysConfSe @Override public boolean encryptIsOpen() { - SalarySysConfPO sysConfPo = getOneByCode(SalarySysConstant.OPEN_APPLICATION_ENCRYPT); - if (sysConfPo != null && sysConfPo.getConfValue().equals(OpenEnum.OFF.getValue())) { - return false; + if (encryptStatus == null) { + SalarySysConfPO sysConfPo = getOneByCode(SalarySysConstant.OPEN_APPLICATION_ENCRYPT); + if (sysConfPo != null && sysConfPo.getConfValue().equals(OpenEnum.OFF.getValue())) { + encryptStatus = false; + } else { + encryptStatus = true; + } } - return true; + return encryptStatus; } @Override @@ -447,7 +454,7 @@ public class SalarySysConfServiceImpl extends Service implements SalarySysConfSe @Override public List getListByCodes(List codes) { - if(CollectionUtils.isEmpty(codes)){ + if (CollectionUtils.isEmpty(codes)) { return Collections.emptyList(); } return getSalarySysConfMapper().getListByCodes(codes); @@ -519,11 +526,11 @@ public class SalarySysConfServiceImpl extends Service implements SalarySysConfSe } SalarySysConfPO salaryAcctEmployeeRule = salarySysConfMap.get(SALARY_ACCT_EMPLOYEE_RULE); - if (salaryAcctEmployeeRule == null ) { + if (salaryAcctEmployeeRule == null) { // 薪资核算人员匹配规则 appSettingVO.setSalaryAcctEmployeeRule(SalaryAcctEmployeeRuleEnum.BYPAYENDTIME.getValue()); } else { - appSettingVO.setSalaryAcctEmployeeRule( SalaryAcctEmployeeRuleEnum.parseByValue(salaryAcctEmployeeRule.getConfValue()).getValue() ); + appSettingVO.setSalaryAcctEmployeeRule(SalaryAcctEmployeeRuleEnum.parseByValue(salaryAcctEmployeeRule.getConfValue()).getValue()); } SalarySysConfPO withDrawRule = salarySysConfMap.get(WITHDRAW_TAX_DECLARATION); @@ -544,7 +551,7 @@ public class SalarySysConfServiceImpl extends Service implements SalarySysConfSe SalarySysConfPO salarySendFeedbackPO = salarySysConfMap.get(SALARY_SEND_FEEDBACK); - if (salarySendFeedbackPO == null ) { + if (salarySendFeedbackPO == null) { // 是否开启工资单反馈,默认不开启 appSettingVO.setSalarySendFeedback("0"); } else { From 309e89ceaa7acf055e3478a99ed873ba10a7a996 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 26 Sep 2023 17:35:23 +0800 Subject: [PATCH 08/18] =?UTF-8?q?=E5=BC=82=E6=AD=A5=E5=A4=84=E7=90=86?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=E6=8A=A5=E8=A1=A8=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryAcctResultServiceImpl.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 557b029aa..35a9253cb 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -653,7 +653,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe @Override public void calculate(SalaryAcctCalculateParam calculateParam, DataCollectionEmployee simpleEmployee) { - StopWatch stopWatch = new StopWatch(calculateParam.getSalaryAcctRecordId()+""); + StopWatch stopWatch = new StopWatch(calculateParam.getSalaryAcctRecordId() + ""); try { stopWatch.start("核算总耗时数据准备"); // 1、查询薪资核算记录 @@ -814,7 +814,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe * @param calculateKey */ private void handleSalaryAcctResultTemp(SalaryAcctCalculateParam calculateParam, String calculateKey) { - StopWatch sw = new StopWatch(calculateParam.getSalaryAcctRecordId()+""); + StopWatch sw = new StopWatch(calculateParam.getSalaryAcctRecordId() + ""); // 查询薪资核算结果的临时存储 sw.start("处理核算数据,查询薪资核算结果的临时存储"); List salaryAcctResultTempPOS = getSalaryAcctResultTempService(user).listByCalculateKey(calculateKey); @@ -833,11 +833,13 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe List salaryAcctResultPOS = SalaryAcctResultBO.convert2ResultPO(salaryAcctResultTempPOS); batchSave(salaryAcctResultPOS); sw.stop(); -// //保存核算报表数据 -// sw.start("处理核算数据,保存核算报表数据"); -// List salaryAcctResultReportPOS = SalaryAcctResultReportBO.convert2ReportPO(salaryAcctResultTempPOS, calculateParam.getEmps()); -// getSalaryAcctReportService(user).batchSave(salaryAcctResultReportPOS); -// sw.stop(); + new Thread() { + public void run() { + //保存核算报表数据 + List salaryAcctResultReportPOS = SalaryAcctResultReportBO.convert2ReportPO(salaryAcctResultTempPOS, calculateParam.getEmps()); + getSalaryAcctReportService(user).batchSave(salaryAcctResultReportPOS); + } + }.start(); // 删除薪资核算临时存储表中的数据 sw.start("处理核算数据,删除薪资核算临时存储表中的数据"); getSalaryAcctResultTempService(user).deleteByCalculateKey(calculateKey); From 763393983c6e948a36457bbbf40ec861fc033f17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 26 Sep 2023 17:52:46 +0800 Subject: [PATCH 09/18] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95pdf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SalaryBillServiceImpl.java | 6 ++--- .../salary/web/SalaryBillController.java | 25 ++++++++++++------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java index ce6f2eced..ca8b344e7 100644 --- a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -265,8 +265,8 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService List salarySendInfos = getSalarySendInfoMapper().listSome(SalarySendInfoPO.builder().salarySendId(id).sendStatus(1).build()); //2、工资单pdf转为路径 String yyyyMM = SalaryDateUtil.getFormatYearMonth(salaryBillSendParam.getSalaryDate()); - List filesToMerge = salarySendInfos.stream().map(po -> HrmSalaryPayrollConf.GEN_PATH + yyyyMM + File.separator + id+ File.separator + po.getId() + ".pdf").collect(Collectors.toList()); - String pdfPath = HrmSalaryPayrollConf.GEN_PATH + yyyyMM + File.separator + id+ File.separator + id + ".pdf"; + List filesToMerge = salarySendInfos.stream().map(po -> HrmSalaryPayrollConf.GEN_PATH + yyyyMM + File.separator + id + File.separator + po.getId() + ".pdf").collect(Collectors.toList()); + String pdfPath = HrmSalaryPayrollConf.GEN_PATH + yyyyMM + File.separator + id + File.separator + id + ".pdf"; SalaryBillBO.mergePdf(pdfPath, filesToMerge); } }; @@ -483,7 +483,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService public String exportPdf(SalaryExportPdfParam param) { SalarySendPO salarySend = checkAndGetSalarySend(param.getSalarySendId()); String yearMonth = SalaryDateUtil.getFormatYearMonth(salarySend.getSalaryMonth()); - String path = HrmSalaryPayrollConf.GEN_PATH + File.separator + yearMonth + File.separator + "%s" + ".pdf"; + String path = HrmSalaryPayrollConf.GEN_PATH + File.separator + yearMonth + File.separator + salarySend.getId() + File.separator + "%s" + ".pdf"; Long id = param.getId(); if (id == null) { path = String.format(path, param.getSalarySendId()); diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index 1fe1403c4..382f93636 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -540,18 +540,17 @@ public class SalaryBillController { User user = HrmUserVarify.getUser(request, response); SalaryExportPdfParam salaryExportPdfParam = new SalaryExportPdfParam(); String id = request.getParameter("id"); - if(StringUtils.isNotBlank(id)){ + if (StringUtils.isNotBlank(id)) { salaryExportPdfParam.setId(Long.valueOf(id)); } String salarySendId = request.getParameter("salarySendId"); - if(StringUtils.isNotBlank(salarySendId)){ + if (StringUtils.isNotBlank(salarySendId)) { salaryExportPdfParam.setSalarySendId(Long.valueOf(salarySendId)); } - StreamingOutput fileStream = new StreamingOutput() { + StreamingOutput fileStream = new StreamingOutput() { @Override - public void write(java.io.OutputStream output) throws IOException, WebApplicationException - { + public void write(java.io.OutputStream output) throws IOException, WebApplicationException { String pdfPath = getSalarySendWrapper(user).exportPdf(salaryExportPdfParam); java.nio.file.Path path = Paths.get(pdfPath); byte[] data = Files.readAllBytes(path); @@ -559,9 +558,16 @@ public class SalaryBillController { output.flush(); } }; + + String fileName = "工资单"; + try { + fileName = URLEncoder.encode(fileName + ".pdf", "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } return Response .ok(fileStream, MediaType.APPLICATION_OCTET_STREAM) - .header("content-disposition","attachment; filename = myfile.pdf") + .header("content-disposition", "attachment; filename =" + fileName) .build(); } @@ -681,6 +687,7 @@ public class SalaryBillController { /** * 校验验证码 + * * @param request * @param response * @param param @@ -705,7 +712,7 @@ public class SalaryBillController { @Path("/baseSet/getForm") @Produces(MediaType.APPLICATION_JSON) // @ApiOperation("获取工资单基础设置表单") - public String getBaseSetForm( @Context HttpServletRequest request, @Context HttpServletResponse response ) { + public String getBaseSetForm(@Context HttpServletRequest request, @Context HttpServletResponse response) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult(user).run(getSalaryBillBaseSetWrapper(user)::getBaseSetForm); } @@ -718,7 +725,7 @@ public class SalaryBillController { @POST @Path("/baseSet/previewWaterMark") @Produces(MediaType.APPLICATION_JSON) - public String getBaseSetForm( @Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryBaseSetSaveParam saveParam ) { + public String getBaseSetForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryBaseSetSaveParam saveParam) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult(user).run(getSalaryBillBaseSetWrapper(user)::previewWaterMark, saveParam); } @@ -733,7 +740,7 @@ public class SalaryBillController { @Path("/baseSet/save") @Produces(MediaType.APPLICATION_JSON) // @ApiOperation("保存工资单基础设置") - public String saveBaseSet( @Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryBaseSetSaveParam saveParam) { + public String saveBaseSet(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryBaseSetSaveParam saveParam) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult(user).run(getSalaryBillBaseSetWrapper(user)::saveBaseSet, saveParam); } From 568c62122a3ef62b389233e45ea45e00bf1b9686 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 27 Sep 2023 10:49:55 +0800 Subject: [PATCH 10/18] =?UTF-8?q?=E5=8F=96=E6=B6=88sqlserver=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=88=86=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SalaryAcctResultTempServiceImpl.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultTempServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultTempServiceImpl.java index 0509e5a35..c26172ac3 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultTempServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultTempServiceImpl.java @@ -43,12 +43,8 @@ public class SalaryAcctResultTempServiceImpl extends Service implements SalaryAc @Override public void batchSave(Collection salaryAcctResultTempPOS) { if (CollectionUtils.isNotEmpty(salaryAcctResultTempPOS)) { - if (isSqlserver) { - List> partition = Lists.partition((List) salaryAcctResultTempPOS, 100); - partition.forEach(p -> getSalaryAcctResultTempMapper().batchInsert(p)); - } else { - getSalaryAcctResultTempMapper().batchInsert(salaryAcctResultTempPOS); - } + List> partition = Lists.partition((List) salaryAcctResultTempPOS, 100); + partition.forEach(p -> getSalaryAcctResultTempMapper().batchInsert(p)); } } From 07291fb20a79141a58406745268c4078456094d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 27 Sep 2023 10:50:05 +0800 Subject: [PATCH 11/18] =?UTF-8?q?=E5=8F=96=E6=B6=88sqlserver=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=88=86=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryAcctResultTempServiceImpl.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultTempServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultTempServiceImpl.java index c26172ac3..def14c03e 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultTempServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultTempServiceImpl.java @@ -8,7 +8,6 @@ import com.engine.salary.util.db.MapperProxyFactory; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import weaver.conn.RecordSet; import java.util.Collection; import java.util.List; @@ -22,8 +21,6 @@ import java.util.List; * @version 1.0 **/ public class SalaryAcctResultTempServiceImpl extends Service implements SalaryAcctResultTempService { - boolean isSqlserver = "sqlserver".equalsIgnoreCase(new RecordSet().getDBType()); - private SalaryAcctResultTempMapper getSalaryAcctResultTempMapper() { return MapperProxyFactory.getProxy(SalaryAcctResultTempMapper.class); } From 6e889ccc70c13dd968fb7afe65bbc247407f7f09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 27 Sep 2023 17:17:56 +0800 Subject: [PATCH 12/18] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E5=88=B0=E9=A1=B9=E7=9B=AE=E5=85=AC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SalaryItemServiceImpl.java | 83 +++++++++++-------- 1 file changed, 50 insertions(+), 33 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index 2ca312be7..3031ffeae 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -148,13 +148,13 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService .sorted(new Comparator() { @Override public int compare(SalaryItemPO o1, SalaryItemPO o2) { - if(o1.getSortedIndex() == null && o2.getSortedIndex() == null){ - Integer systemType1=o1.getSystemType() == null ? 0 : o1.getSystemType(); - Integer systemType2=o2.getSystemType() == null ? 0 : o2.getSystemType(); + if (o1.getSortedIndex() == null && o2.getSortedIndex() == null) { + Integer systemType1 = o1.getSystemType() == null ? 0 : o1.getSystemType(); + Integer systemType2 = o2.getSystemType() == null ? 0 : o2.getSystemType(); return systemType1.compareTo(systemType2); - }else{ - Integer sortedIndex1=o1.getSortedIndex() == null ? 0 : o1.getSortedIndex(); - Integer sortedIndex2=o2.getSortedIndex() == null ? 0 : o2.getSortedIndex(); + } else { + Integer sortedIndex1 = o1.getSortedIndex() == null ? 0 : o1.getSortedIndex(); + Integer sortedIndex2 = o2.getSortedIndex() == null ? 0 : o2.getSortedIndex(); return sortedIndex2.compareTo(sortedIndex1); } } @@ -263,35 +263,24 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService if (!StringUtils.equals(oldName, newName)) { //薪资项目 - String itemPrefix = newSalaryItemPO.getUseInEmployeeSalary() == 0 ? "salaryItem_" : "salaryArchives_"; - String fieldNamePrefix = newSalaryItemPO.getUseInEmployeeSalary() == 0 ? "{薪资项目.%s}" : "{薪资档案.%s}"; - String code = itemPrefix + salaryItemPO.getCode(); - Date now = new Date(); - List formulaVars = getSalaryFormulaService(user).listByCode(code); - formulaVars.forEach(v -> { - FormulaVar formulaVar = FormulaVar.builder() - .id(v.getId()) - .name(newName) - .fieldName(String.format(fieldNamePrefix, newName)) - .updateTime(now) - .build(); - getSalaryFormulaService(user).updateVar(formulaVar); - }); + if (newSalaryItemPO.getUseInEmployeeSalary() == 0) { + String itemPrefix = "salaryItem_"; + String fieldNamePrefix = "{薪资项目.%s}"; + changeName(salaryItemPO, oldName, newName, itemPrefix, fieldNamePrefix); + } - List formulaIds = SalaryEntityUtil.properties(formulaVars, FormulaVar::getFormulaId, Collectors.toList()); - List formulaPOS = getSalaryFormulaService(user).listByIds(formulaIds); - formulaPOS.forEach(f -> { - String formula = f.getFormula(); - formula = formula.replace(String.format(fieldNamePrefix, oldName), String.format(fieldNamePrefix, newName)); - FormulaPO formulaPO = FormulaPO.builder() - .id(f.getId()) - .formula(formula) - .updateTime(now) - .build(); - getSalaryFormulaService(user).update(formulaPO); - }); + if (newSalaryItemPO.getUseInEmployeeSalary() == 1) { + //引用档案 + String itemPrefix = "salaryArchives_"; + String fieldNamePrefix = "{薪资档案.%s}"; + changeName(salaryItemPO, oldName, newName, itemPrefix, fieldNamePrefix); + //引用项目 + itemPrefix = "salaryItem_"; + fieldNamePrefix = "{薪资项目.%s}"; + changeName(salaryItemPO, oldName, newName, itemPrefix, fieldNamePrefix); + } } @@ -307,6 +296,34 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService // salaryItemLoggerTemplate.write(loggerContext); } + private void changeName(SalaryItemPO salaryItemPO, String oldName, String newName, String itemPrefix, String fieldNamePrefix) { + String code = itemPrefix + salaryItemPO.getCode(); + Date now = new Date(); + List formulaVars = getSalaryFormulaService(user).listByCode(code); + formulaVars.forEach(v -> { + FormulaVar formulaVar = FormulaVar.builder() + .id(v.getId()) + .name(newName) + .fieldName(String.format(fieldNamePrefix, newName)) + .updateTime(now) + .build(); + getSalaryFormulaService(user).updateVar(formulaVar); + }); + + List formulaIds = SalaryEntityUtil.properties(formulaVars, FormulaVar::getFormulaId, Collectors.toList()); + List formulaPOS = getSalaryFormulaService(user).listByIds(formulaIds); + formulaPOS.forEach(f -> { + String formula = f.getFormula(); + formula = formula.replace(String.format(fieldNamePrefix, oldName), String.format(fieldNamePrefix, newName)); + FormulaPO formulaPO = FormulaPO.builder() + .id(f.getId()) + .formula(formula) + .updateTime(now) + .build(); + getSalaryFormulaService(user).update(formulaPO); + }); + } + @Override public void deleteByIds(Collection ids) { SalaryItemServiceImpl.UsingItem usingItem = getUsingItem(); @@ -423,7 +440,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService } // 获取薪资账套中薪资项目信息 List salarySobItemPOS = getSalarySobItemService(user).listBySalaryItemIds(Collections.singleton(param.getSalaryItemId())); - salarySobItemPOS = salarySobItemPOS.stream().filter( po -> param.getSalarySobIds().contains(po.getSalarySobId())).collect(Collectors.toList()); + salarySobItemPOS = salarySobItemPOS.stream().filter(po -> param.getSalarySobIds().contains(po.getSalarySobId())).collect(Collectors.toList()); // 更新薪资账套中的薪资项目信息 Date now = new Date(); for (SalarySobItemPO sobItem : salarySobItemPOS) { From 52419721512c10d708127dab2b95ced61c083bb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Sat, 7 Oct 2023 14:46:28 +0800 Subject: [PATCH 13/18] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E6=97=B6?= =?UTF-8?q?=E6=95=88=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryBill/dto/SalaryBaseSetFormDTO.java | 3 + .../dto/SalaryBillViewingLimitDTO.java | 28 +++++++++ .../param/SalaryBaseSetSaveParam.java | 4 ++ .../param/SalaryBillQueryParam.java | 5 +- .../salarybill/SalarySendInfoMapper.xml | 3 + .../service/SalaryBillBaseSetService.java | 9 +++ .../impl/SalaryBillBaseSetServiceImpl.java | 26 ++++++-- .../service/impl/SalarySendServiceImpl.java | 59 ++++++++++++++----- .../sys/constant/SalarySysConstant.java | 5 ++ .../salary/web/SalaryBillController.java | 2 - .../wrapper/SalaryBillBaseSetWrapper.java | 3 + 11 files changed, 123 insertions(+), 24 deletions(-) create mode 100644 src/com/engine/salary/entity/salaryBill/dto/SalaryBillViewingLimitDTO.java diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryBaseSetFormDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryBaseSetFormDTO.java index 5bc07f1e1..a8a575c3e 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryBaseSetFormDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryBaseSetFormDTO.java @@ -32,4 +32,7 @@ public class SalaryBaseSetFormDTO { // 工资单反馈设置 private SalaryBillAckFeedbackDTO ackFeedbackSetting; + //工资单时效查看限制 + private SalaryBillViewingLimitDTO salaryBillViewingLimitDTO; + } diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryBillViewingLimitDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryBillViewingLimitDTO.java new file mode 100644 index 000000000..2d216b566 --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryBillViewingLimitDTO.java @@ -0,0 +1,28 @@ +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 SalaryBillViewingLimitDTO { + + + /** + * 查看几月内的工资单 + */ + private Integer limitMonth; + +} diff --git a/src/com/engine/salary/entity/salaryBill/param/SalaryBaseSetSaveParam.java b/src/com/engine/salary/entity/salaryBill/param/SalaryBaseSetSaveParam.java index 4716f9958..6b21dddee 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalaryBaseSetSaveParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalaryBaseSetSaveParam.java @@ -1,6 +1,7 @@ package com.engine.salary.entity.salaryBill.param; import com.engine.salary.entity.salaryBill.dto.SalaryBillAckFeedbackDTO; +import com.engine.salary.entity.salaryBill.dto.SalaryBillViewingLimitDTO; import com.engine.salary.enums.salarybill.SalaryTemplateWatermarkTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.util.SalaryI18nUtil; @@ -37,6 +38,9 @@ public class SalaryBaseSetSaveParam { // 工资单确认反馈设置 private SalaryBillAckFeedbackDTO ackFeedbackSetting; + //工资单时效性 + private SalaryBillViewingLimitDTO salaryBillViewingLimitSetting; + public static void checkParam(SalaryBaseSetSaveParam saveParam) { if (Objects.isNull(saveParam.getWatermarkStatus())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(220418, "是否启用水印必传")); diff --git a/src/com/engine/salary/entity/salaryBill/param/SalaryBillQueryParam.java b/src/com/engine/salary/entity/salaryBill/param/SalaryBillQueryParam.java index 5ff6833c3..4b43d69fc 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalaryBillQueryParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalaryBillQueryParam.java @@ -6,8 +6,6 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.LocalDate; -import java.time.YearMonth; import java.util.Date; import java.util.List; @@ -30,6 +28,9 @@ public class SalaryBillQueryParam extends BaseQueryParam { // @JsonIgnore private List salaryMonth; + + private Date startSalaryMonth; + // @JsonIgnore private Long employeeId; diff --git a/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml b/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml index 0895b3560..594f6f1e8 100644 --- a/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml +++ b/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml @@ -604,6 +604,9 @@ AND (t1.salary_month BETWEEN #{param.salaryMonth[0]} AND #{param.salaryMonth[1]}) + + AND t1.salary_month >= #{param.startSalaryMonth} + ORDER BY t1.id DESC diff --git a/src/com/engine/salary/service/SalaryBillBaseSetService.java b/src/com/engine/salary/service/SalaryBillBaseSetService.java index 4ea8ef0a6..596956bd7 100644 --- a/src/com/engine/salary/service/SalaryBillBaseSetService.java +++ b/src/com/engine/salary/service/SalaryBillBaseSetService.java @@ -1,6 +1,7 @@ package com.engine.salary.service; import com.engine.salary.entity.salaryBill.dto.SalaryBillAckFeedbackDTO; +import com.engine.salary.entity.salaryBill.dto.SalaryBillViewingLimitDTO; import com.engine.salary.entity.salaryBill.dto.SalaryBillWatermarkDTO; import com.engine.salary.entity.salaryBill.param.SalaryBaseSetSaveParam; @@ -48,4 +49,12 @@ public interface SalaryBillBaseSetService { * @return */ SalaryBillAckFeedbackDTO getDefaultAckFeedbackSetting(); + + /** + * 获取工资单失效限制 + * @return + */ + SalaryBillViewingLimitDTO getSalaryBillViewingLimitSetting(); + + } diff --git a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java index 73a5a184b..07675550e 100644 --- a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java @@ -7,6 +7,7 @@ import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryBill.bo.SalaryBillBO; import com.engine.salary.entity.salaryBill.dto.SalaryBillAckFeedbackDTO; +import com.engine.salary.entity.salaryBill.dto.SalaryBillViewingLimitDTO; import com.engine.salary.entity.salaryBill.dto.SalaryBillWatermarkDTO; import com.engine.salary.entity.salaryBill.param.SalaryBaseSetSaveParam; import com.engine.salary.entity.salaryBill.po.SalaryBillWatermarkPO; @@ -25,6 +26,7 @@ import dm.jdbc.util.IdGenerator; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.math.NumberUtils; import org.apache.commons.lang3.StringUtils; +import weaver.general.Util; import weaver.hrm.User; import java.util.*; @@ -80,7 +82,7 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB if (saveParam.getWatermarkStatus()) { if (SalaryTemplateWatermarkTypeEnum.CUSTOM.equals(saveParam.getWatermark())) { wmSetting = JsonUtil.toJsonString(saveParam.getWmSetting()); - }else{ + } else { // 系统默认水印 给一个默认的json wmSetting = "{\"wmWidth\":100,\"wmRotate\":30,\"wmSelectedFieldIds\":[\"HRM_Name\"],\"pureWmText\":\" 当前操作者姓名 \",\"wmText\":\"

 $HRM_Name 

\",\"wmClassify\":\"text\",\"wmHeight\":100,\"wmOriginText\":\"

 当前操作者姓名 

\",\"wmNoTransparent\":15}"; } @@ -109,12 +111,16 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB SalaryBillAckFeedbackDTO ackFeedbackSetting = saveParam.getAckFeedbackSetting(); // 1.保存确认反馈开关状态 getSalarySysConfService(user).saveSettingByType(ackFeedbackSetting.getAckStatus(), SALARY_SEND_FEEDBACK, "工资单确认反馈状态", "billSend"); - if(StringUtils.equals(ackFeedbackSetting.getAckStatus(),"1")){ + if (StringUtils.equals(ackFeedbackSetting.getAckStatus(), "1")) { // 2.保存反馈地址 getSalarySysConfService(user).saveSettingByType(ackFeedbackSetting.getFeedBackUrl(), SALARY_FEEDBACK_URL, "工资单反馈地址", "billSend"); // 3.保存自动确认时间 getSalarySysConfService(user).saveSettingByType(ackFeedbackSetting.getAutoAckDays().toString(), SALARY_AUTO_ACK_DAYS, "工资单反馈自动确认", "billSend"); } + + // 工资单时效性设置 + SalaryBillViewingLimitDTO salaryBillViewingLimitDTO = saveParam.getSalaryBillViewingLimitSetting(); + getSalarySysConfService(user).saveSettingByType(Util.null2String(salaryBillViewingLimitDTO.getLimitMonth()), SALARY_BILL_VIEWING_LIMIT_MONTH, "工资单时效性设置", "billSend"); return StringUtils.EMPTY; } @@ -133,12 +139,12 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB public SalaryBillAckFeedbackDTO getDefaultAckFeedbackSetting() { // 获取反馈开启状态、自动确认时长、反馈地址 List codes = Arrays.asList(SalarySysConstant.SALARY_SEND_FEEDBACK, SalarySysConstant.SALARY_AUTO_ACK_DAYS, SalarySysConstant.SALARY_FEEDBACK_URL); - List sysConfList= getSalarySysConfService(user).getListByCodes(codes); + List sysConfList = getSalarySysConfService(user).getListByCodes(codes); Map sysConfMap = SalaryEntityUtil.convert2Map(sysConfList, SalarySysConfPO::getConfKey, SalarySysConfPO::getConfValue); SalaryBillAckFeedbackDTO defaultAckFeedBackDTO = SalaryBillAckFeedbackDTO.builder().build(); String ackStatus = sysConfMap.getOrDefault(SalarySysConstant.SALARY_SEND_FEEDBACK, "0"); - if (StringUtils.equals(ackStatus,"0")) { + if (StringUtils.equals(ackStatus, "0")) { // 未开启工资单确认 defaultAckFeedBackDTO.setAckStatus("0"); defaultAckFeedBackDTO.setAutoAckDays(0); @@ -154,4 +160,16 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB defaultAckFeedBackDTO.setFeedBackUrl(feedbackUrl); return defaultAckFeedBackDTO; } + + @Override + public SalaryBillViewingLimitDTO getSalaryBillViewingLimitSetting() { + + SalarySysConfPO limitMonthSetting = getSalarySysConfService(user).getOneByCode(SALARY_BILL_VIEWING_LIMIT_MONTH); + + int limitMonth = 0; + if (limitMonthSetting != null&&NumberUtils.isNumber(limitMonthSetting.getConfValue())) { + limitMonth = Integer.parseInt(limitMonthSetting.getConfValue()); + } + return SalaryBillViewingLimitDTO.builder().limitMonth(limitMonth).build(); + } } diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index f1efc0554..4c29c4e57 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -80,6 +80,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.math.BigDecimal; import java.text.SimpleDateFormat; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.util.*; @@ -185,6 +186,10 @@ public class SalarySendServiceImpl extends Service implements SalarySendService return ServiceUtil.getService(SalaryCacheServiceImpl.class, user); } + private SalaryBillBaseSetService getSalaryBillBaseSetService(User user) { + return ServiceUtil.getService(SalaryBillBaseSetServiceImpl.class, user); + } + @Override public SalarySendPO getById(Long salarySendId) { return mapper.getById(salarySendId); @@ -477,13 +482,21 @@ public class SalarySendServiceImpl extends Service implements SalarySendService throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100511, "当前账号无法查看此工资单")); } SalarySendInfoPO salarySendInfo = salarySendInfos.get(0); + + //工资单查看时效性 + Date limitMonth = getLimitMonth(); + if (limitMonth != null && limitMonth.after(salarySendInfo.getSalaryMonth())) { + SalaryBillViewingLimitDTO salaryBillViewingLimitSetting = getSalaryBillBaseSetService(user).getSalaryBillViewingLimitSetting(); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100511, "仅能查看" + salaryBillViewingLimitSetting.getLimitMonth() + "月内的工资单")); + } + // 获取默认模板信息 SalarySendPO salarySendPO = getSalarySendMapper().getById(salarySendInfo.getSalarySendId()); - if(ObjectUtils.isEmpty(salarySendPO)){ + if (ObjectUtils.isEmpty(salarySendPO)) { throw new SalaryRunTimeException("工资单不存在"); } // 更新查看状态 - if (salarySendInfo.getBillReadStatus() == null || NumberUtils.compare(salarySendInfo.getBillReadStatus(),BillReadStatusEnum.UNREAD.getValue()) == 0) { + if (salarySendInfo.getBillReadStatus() == null || NumberUtils.compare(salarySendInfo.getBillReadStatus(), BillReadStatusEnum.UNREAD.getValue()) == 0) { salarySendInfo.setBillReadStatus(BillReadStatusEnum.READED.getValue()); salarySendInfo.setUpdateTime(new Date()); getSalarySendInfoMapper().updateIgnoreNull(salarySendInfo); @@ -612,7 +625,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService map.put("salaryTemplate", salaryTemplate); map.put("salaryAcctResult", salaryAcctResultS); // 工资单发送人、是否已确认 - if (NumberUtils.compare(salaryTemplate.getAckFeedbackStatus(),1) == 0) { + if (NumberUtils.compare(salaryTemplate.getAckFeedbackStatus(), 1) == 0) { // 反馈后还可以确认或反馈按钮,确认后2个按钮消失 Integer confirmStatus = salarySendInfo.getBillConfirmStatus(); if (confirmStatus == null || confirmStatus != BillConfimStatusEnum.CONFIRMED.getValue()) { @@ -621,13 +634,23 @@ public class SalarySendServiceImpl extends Service implements SalarySendService map.put("confirmStatus", "1"); } map.put("sendEmployeeId", salarySendInfo.getSendEmployeeId()); - }else{ + } else { map.put("confirmStatus", "1"); } return map; } + private Date getLimitMonth() { + //工资单时效性 + SalaryBillViewingLimitDTO salaryBillViewingLimitSetting = getSalaryBillBaseSetService(user).getSalaryBillViewingLimitSetting(); + if (salaryBillViewingLimitSetting.getLimitMonth() != 0) { + LocalDate localDate = LocalDate.now().plusMonths(-salaryBillViewingLimitSetting.getLimitMonth()).withDayOfMonth(1); + return SalaryDateUtil.localDateToDate(localDate); + } + return null; + } + /** * 工资单水印文本型动态变量 == 处理 @@ -637,7 +660,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService */ private void handleSalaryWatermark(SalaryTemplatePO salaryTemplate, SalarySendInfoPO salarySendInfo, Long currentEmployeeId) { SalaryBillWatermarkDTO salaryBillWatermark = JsonUtil.parseObject(salaryTemplate.getSalaryWatermark(), SalaryBillWatermarkDTO.class); - if (Objects.isNull(salaryBillWatermark) || Boolean.FALSE.equals(salaryBillWatermark.getWatermarkStatus()) ) { + if (Objects.isNull(salaryBillWatermark) || Boolean.FALSE.equals(salaryBillWatermark.getWatermarkStatus())) { return; } // 发送时已经处理好变量字段,可直接获取判断 @@ -672,27 +695,27 @@ public class SalarySendServiceImpl extends Service implements SalarySendService PageInfo pageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), page, SalarySendInfoListDTO.class); SalarySendPO salarySendPO = getSalarySendMapper().getById(queryParam.getSalarySendId()); - if (ObjectUtils.isEmpty(salarySendPO)){ + if (ObjectUtils.isEmpty(salarySendPO)) { throw new SalaryRunTimeException("工资单不存在或已被删除"); } List salaryTemplates = getSalaryTemplateService(user).getDefaultTemplates(Collections.singletonList(salarySendPO.getSalarySobId())); - if(CollectionUtils.isEmpty(salaryTemplates)){ + if (CollectionUtils.isEmpty(salaryTemplates)) { throw new SalaryRunTimeException("请先设置工资单模板"); } Integer ackFeedbackStatus = salaryTemplates.get(0).getAckFeedbackStatus(); - if (ackFeedbackStatus!=null && NumberUtils.compare(ackFeedbackStatus,1) == 0) { + if (ackFeedbackStatus != null && NumberUtils.compare(ackFeedbackStatus, 1) == 0) { // 默认为空时,未读未确认 pageInfo.getList().stream().forEach(obj -> { SalarySendInfoListDTO dto = (SalarySendInfoListDTO) obj; - if (StringUtils.isBlank( dto.getBillReadStatus() )){ + if (StringUtils.isBlank(dto.getBillReadStatus())) { dto.setBillReadStatus(BillReadStatusEnum.UNREAD.getDefaultLabel()); } else { - dto.setBillReadStatus(BillReadStatusEnum.getDefaultLabelByValue( Integer.valueOf(dto.getBillReadStatus()) )); + dto.setBillReadStatus(BillReadStatusEnum.getDefaultLabelByValue(Integer.valueOf(dto.getBillReadStatus()))); } - if (StringUtils.isBlank(dto.getBillConfirmStatus())){ + if (StringUtils.isBlank(dto.getBillConfirmStatus())) { dto.setBillConfirmStatus(BillConfimStatusEnum.UNCONFIRMED.getDefaultLabel()); } else { - dto.setBillConfirmStatus(BillConfimStatusEnum.getDefaultLabelByValue( Integer.valueOf(dto.getBillConfirmStatus()) )); + dto.setBillConfirmStatus(BillConfimStatusEnum.getDefaultLabelByValue(Integer.valueOf(dto.getBillConfirmStatus()))); } }); } @@ -720,7 +743,11 @@ public class SalarySendServiceImpl extends Service implements SalarySendService @Override public PageInfo mySalaryBillListPage(SalaryBillQueryParam queryParam) { + //工资单时效 + queryParam.setStartSalaryMonth(getLimitMonth()); + List list = salarySendInfoMapper.mySalaryBillList(queryParam); + PageInfo pageInfo = new PageInfo<>(list, SalaryMySalaryBillListDTO.class); pageInfo.setTotal(list.size()); pageInfo.setPageNum(queryParam.getCurrent()); @@ -1041,7 +1068,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService List salaryTemplateShowSetData = JsonUtil.parseList(salaryTemplate.getReplenishSalaryItemSetting(), SalaryTemplateSalaryItemSetListDTO.class); salaryTemplateShowSetData.stream().filter(f -> !f.getGroupId().equals(SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID)).forEach(e -> - salaryItems.addAll(e.getItems()) + salaryItems.addAll(e.getItems()) ); } return salaryItems; @@ -1675,14 +1702,14 @@ public class SalarySendServiceImpl extends Service implements SalarySendService @Override public List listUnConfirmedSendInfo(List salarySobIds) { - if(CollectionUtils.isEmpty(salarySobIds)) + if (CollectionUtils.isEmpty(salarySobIds)) return Collections.emptyList(); return getSalarySendInfoMapper().listUnConfirmedSendInfo(salarySobIds); } @Override public void autoConfirmSalaryBill(List needAutoSendIds) { - if(CollectionUtils.isEmpty(needAutoSendIds)){ + if (CollectionUtils.isEmpty(needAutoSendIds)) { return; } List> partition = Lists.partition((List) needAutoSendIds, 500); @@ -1691,7 +1718,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService @Override public List getByIds(List salarySendId) { - if(CollectionUtils.isEmpty(salarySendId)){ + if (CollectionUtils.isEmpty(salarySendId)) { return Collections.emptyList(); } return getSalarySendMapper().getByIds(salarySendId); diff --git a/src/com/engine/salary/sys/constant/SalarySysConstant.java b/src/com/engine/salary/sys/constant/SalarySysConstant.java index b6d49d941..f8a34ec45 100644 --- a/src/com/engine/salary/sys/constant/SalarySysConstant.java +++ b/src/com/engine/salary/sys/constant/SalarySysConstant.java @@ -90,9 +90,14 @@ public class SalarySysConstant { * 工资单反馈自动确认 */ public static final String SALARY_AUTO_ACK_DAYS = "SALARY_AUTO_ACK_DAYS"; + /** * 工资单反馈地址 */ public static final String SALARY_FEEDBACK_URL = "SALARY_FEEDBACK_URL"; + /** + * 工资单查询限制 + */ + public static final String SALARY_BILL_VIEWING_LIMIT_MONTH = "SALARY_BILL_VIEWING_LIMIT_MONTH"; } diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index f8a7ce21d..0985cfc64 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -660,7 +660,6 @@ public class SalaryBillController { @GET @Path("/baseSet/getForm") @Produces(MediaType.APPLICATION_JSON) -// @ApiOperation("获取工资单基础设置表单") public String getBaseSetForm( @Context HttpServletRequest request, @Context HttpServletResponse response ) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult(user).run(getSalaryBillBaseSetWrapper(user)::getBaseSetForm); @@ -688,7 +687,6 @@ public class SalaryBillController { @POST @Path("/baseSet/save") @Produces(MediaType.APPLICATION_JSON) -// @ApiOperation("保存工资单基础设置") public String saveBaseSet( @Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryBaseSetSaveParam saveParam) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult(user).run(getSalaryBillBaseSetWrapper(user)::saveBaseSet, saveParam); diff --git a/src/com/engine/salary/wrapper/SalaryBillBaseSetWrapper.java b/src/com/engine/salary/wrapper/SalaryBillBaseSetWrapper.java index 63f0b3d37..c5b49e6f8 100644 --- a/src/com/engine/salary/wrapper/SalaryBillBaseSetWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryBillBaseSetWrapper.java @@ -4,6 +4,7 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.entity.salaryBill.dto.SalaryBaseSetFormDTO; import com.engine.salary.entity.salaryBill.dto.SalaryBillAckFeedbackDTO; +import com.engine.salary.entity.salaryBill.dto.SalaryBillViewingLimitDTO; import com.engine.salary.entity.salaryBill.dto.SalaryBillWatermarkDTO; import com.engine.salary.entity.salaryBill.param.SalaryBaseSetSaveParam; import com.engine.salary.service.SalaryBillBaseSetService; @@ -47,6 +48,7 @@ public class SalaryBillBaseSetWrapper extends Service { SalaryBaseSetFormDTO dto = new SalaryBaseSetFormDTO(); SalaryBillWatermarkDTO salaryBillWatermark = getSalaryBillBaseSetService(user).getWatermarkSetting(); SalaryBillAckFeedbackDTO salaryBillAckFeedback = getSalaryBillBaseSetService(user).getDefaultAckFeedbackSetting(); + SalaryBillViewingLimitDTO salaryBillViewingLimitDTO = getSalaryBillBaseSetService(user).getSalaryBillViewingLimitSetting(); if (Objects.isNull(salaryBillWatermark)) { dto.setWatermarkStatus(false); @@ -62,6 +64,7 @@ public class SalaryBillBaseSetWrapper extends Service { // 工资单反馈默认设置 dto.setAckFeedbackSetting(salaryBillAckFeedback); } + dto.setSalaryBillViewingLimitDTO(salaryBillViewingLimitDTO); return dto; } From 67a9d45630ed4a70db0f5a6c6d2393d4d34030da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Sat, 7 Oct 2023 14:47:32 +0800 Subject: [PATCH 14/18] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E6=97=B6?= =?UTF-8?q?=E6=95=88=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryBillBaseSetServiceImpl.java | 26 +++++-------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java index 07675550e..2a1b03b47 100644 --- a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java @@ -61,11 +61,7 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB if (Objects.isNull(watermarkPO)) { return null; } - return SalaryBillWatermarkDTO.builder() - .watermarkStatus(NumberUtils.INTEGER_ONE.equals(watermarkPO.getWatermarkStatus())) - .watermarkType(watermarkPO.getWatermarkType()) - .wmSetting(JsonUtil.parseMap(watermarkPO.getWatermarkSetting(), Object.class)) - .build(); + return SalaryBillWatermarkDTO.builder().watermarkStatus(NumberUtils.INTEGER_ONE.equals(watermarkPO.getWatermarkStatus())).watermarkType(watermarkPO.getWatermarkType()).wmSetting(JsonUtil.parseMap(watermarkPO.getWatermarkSetting(), Object.class)).build(); } @Override @@ -94,17 +90,7 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB // 将当前生效的水印信息都删除 getSalaryBillWatermarkService(user).deleteAll(); // 保存最新的水印信息 - getSalaryBillWatermarkService(user).insertIgnoreNull(SalaryBillWatermarkPO.builder() - .id(IdGenerator.generate()) - .watermarkStatus(watermarkStatus) - .watermarkType(watermark) - .watermarkSetting(wmSetting) - .createTime(now) - .updateTime(now) - .creator(Long.valueOf(user.getUID())) - .deleteType(NumberUtils.INTEGER_ZERO) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build()); + getSalaryBillWatermarkService(user).insertIgnoreNull(SalaryBillWatermarkPO.builder().id(IdGenerator.generate()).watermarkStatus(watermarkStatus).watermarkType(watermark).watermarkSetting(wmSetting).createTime(now).updateTime(now).creator(Long.valueOf(user.getUID())).deleteType(NumberUtils.INTEGER_ZERO).tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).build()); // 工资单确认和反馈 =========================================================== @@ -117,10 +103,12 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB // 3.保存自动确认时间 getSalarySysConfService(user).saveSettingByType(ackFeedbackSetting.getAutoAckDays().toString(), SALARY_AUTO_ACK_DAYS, "工资单反馈自动确认", "billSend"); } - + // 工资单时效性设置 SalaryBillViewingLimitDTO salaryBillViewingLimitDTO = saveParam.getSalaryBillViewingLimitSetting(); - getSalarySysConfService(user).saveSettingByType(Util.null2String(salaryBillViewingLimitDTO.getLimitMonth()), SALARY_BILL_VIEWING_LIMIT_MONTH, "工资单时效性设置", "billSend"); + if (salaryBillViewingLimitDTO != null) { + getSalarySysConfService(user).saveSettingByType(Util.null2String(salaryBillViewingLimitDTO.getLimitMonth()), SALARY_BILL_VIEWING_LIMIT_MONTH, "工资单时效性设置", "billSend"); + } return StringUtils.EMPTY; } @@ -167,7 +155,7 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB SalarySysConfPO limitMonthSetting = getSalarySysConfService(user).getOneByCode(SALARY_BILL_VIEWING_LIMIT_MONTH); int limitMonth = 0; - if (limitMonthSetting != null&&NumberUtils.isNumber(limitMonthSetting.getConfValue())) { + if (limitMonthSetting != null && NumberUtils.isNumber(limitMonthSetting.getConfValue())) { limitMonth = Integer.parseInt(limitMonthSetting.getConfValue()); } return SalaryBillViewingLimitDTO.builder().limitMonth(limitMonth).build(); From 37e9b3c33ce032477d354fdb6c9a13421074b07d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Sat, 7 Oct 2023 17:00:02 +0800 Subject: [PATCH 15/18] =?UTF-8?q?sql=E5=8F=AF=E4=BB=A5=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E8=96=AA=E8=B5=84=E9=A1=B9=E7=9B=AE=E4=BD=9C=E4=B8=BA=E5=8F=98?= =?UTF-8?q?=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/enums/salaryformula/SalarySQLReferenceEnum.java | 3 ++- .../engine/salary/service/impl/RemoteExcelServiceImpl.java | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/enums/salaryformula/SalarySQLReferenceEnum.java b/src/com/engine/salary/enums/salaryformula/SalarySQLReferenceEnum.java index f08a583d2..79a99b1f9 100644 --- a/src/com/engine/salary/enums/salaryformula/SalarySQLReferenceEnum.java +++ b/src/com/engine/salary/enums/salaryformula/SalarySQLReferenceEnum.java @@ -17,7 +17,8 @@ public enum SalarySQLReferenceEnum implements BaseEnum { EMPLOYEE_INFO("employeeInfo", "员工基本信息", 85366), SALARY_ACCT_EMPLOYEE("salaryAcctEmployee", "核算基本信息", 85368), - SALARY_CYCLE("SalaryCycle", "核算日期", 85368); + SALARY_CYCLE("SalaryCycle", "核算日期", 85368), + SALARY_ITEM("salaryItem", "薪资项目", 85368); private String value; private String defaultLabel; diff --git a/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java b/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java index d0c6a69eb..b38a6d302 100644 --- a/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java @@ -120,6 +120,9 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic case SALARY_CYCLE: vars = convert2FormulaVar(SalarySobCycleDTO.class, referenceEnum.getValue() + ""); break; + case SALARY_ITEM: + vars = salaryItem2FormulaVar(SalaryFormulaReferenceEnum.SALARY_ITEM, extendParam); + break; default: break; } @@ -219,6 +222,8 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic convert2FormulaVar(SalaryAcctEmployeePO.class, SalarySQLReferenceEnum.SALARY_ACCT_EMPLOYEE.getValue() + "")); result.put(SalarySQLReferenceEnum.SALARY_CYCLE.getDefaultLabel(), convert2FormulaVar(SalarySobCycleDTO.class, SalarySQLReferenceEnum.SALARY_CYCLE.getValue() + "")); + result.put(SalarySQLReferenceEnum.SALARY_ITEM.getDefaultLabel(), + salaryItem2FormulaVar(SalaryFormulaReferenceEnum.SALARY_ITEM, null)); return result; } From 138f8325375cb1aa7891cfa16e365825b7e5d711 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Sun, 8 Oct 2023 10:11:07 +0800 Subject: [PATCH 16/18] =?UTF-8?q?=E6=97=B6=E6=95=88=E6=80=A7=E8=BF=87?= =?UTF-8?q?=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryBill/dto/SalaryBaseSetFormDTO.java | 2 +- ...ngLimitDTO.java => salaryBillViewingLimitSetting.java} | 2 +- .../entity/salaryBill/param/SalaryBaseSetSaveParam.java | 3 +-- .../engine/salary/service/SalaryBillBaseSetService.java | 4 ++-- .../salary/service/impl/SalaryBillBaseSetServiceImpl.java | 8 ++++---- .../engine/salary/service/impl/SalarySendServiceImpl.java | 4 ++-- .../engine/salary/wrapper/SalaryBillBaseSetWrapper.java | 6 +++--- 7 files changed, 14 insertions(+), 15 deletions(-) rename src/com/engine/salary/entity/salaryBill/dto/{SalaryBillViewingLimitDTO.java => salaryBillViewingLimitSetting.java} (90%) diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryBaseSetFormDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryBaseSetFormDTO.java index a8a575c3e..af7ee8655 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryBaseSetFormDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryBaseSetFormDTO.java @@ -33,6 +33,6 @@ public class SalaryBaseSetFormDTO { private SalaryBillAckFeedbackDTO ackFeedbackSetting; //工资单时效查看限制 - private SalaryBillViewingLimitDTO salaryBillViewingLimitDTO; + private com.engine.salary.entity.salaryBill.dto.salaryBillViewingLimitSetting salaryBillViewingLimitSetting; } diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryBillViewingLimitDTO.java b/src/com/engine/salary/entity/salaryBill/dto/salaryBillViewingLimitSetting.java similarity index 90% rename from src/com/engine/salary/entity/salaryBill/dto/SalaryBillViewingLimitDTO.java rename to src/com/engine/salary/entity/salaryBill/dto/salaryBillViewingLimitSetting.java index 2d216b566..34bf14572 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryBillViewingLimitDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/salaryBillViewingLimitSetting.java @@ -17,7 +17,7 @@ import lombok.NoArgsConstructor; @Builder @NoArgsConstructor @AllArgsConstructor -public class SalaryBillViewingLimitDTO { +public class salaryBillViewingLimitSetting { /** diff --git a/src/com/engine/salary/entity/salaryBill/param/SalaryBaseSetSaveParam.java b/src/com/engine/salary/entity/salaryBill/param/SalaryBaseSetSaveParam.java index 6b21dddee..34ff4a72c 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalaryBaseSetSaveParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalaryBaseSetSaveParam.java @@ -1,7 +1,6 @@ package com.engine.salary.entity.salaryBill.param; import com.engine.salary.entity.salaryBill.dto.SalaryBillAckFeedbackDTO; -import com.engine.salary.entity.salaryBill.dto.SalaryBillViewingLimitDTO; import com.engine.salary.enums.salarybill.SalaryTemplateWatermarkTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.util.SalaryI18nUtil; @@ -39,7 +38,7 @@ public class SalaryBaseSetSaveParam { private SalaryBillAckFeedbackDTO ackFeedbackSetting; //工资单时效性 - private SalaryBillViewingLimitDTO salaryBillViewingLimitSetting; + private com.engine.salary.entity.salaryBill.dto.salaryBillViewingLimitSetting salaryBillViewingLimitSetting; public static void checkParam(SalaryBaseSetSaveParam saveParam) { if (Objects.isNull(saveParam.getWatermarkStatus())) { diff --git a/src/com/engine/salary/service/SalaryBillBaseSetService.java b/src/com/engine/salary/service/SalaryBillBaseSetService.java index 596956bd7..f0d41e8dd 100644 --- a/src/com/engine/salary/service/SalaryBillBaseSetService.java +++ b/src/com/engine/salary/service/SalaryBillBaseSetService.java @@ -1,7 +1,7 @@ package com.engine.salary.service; import com.engine.salary.entity.salaryBill.dto.SalaryBillAckFeedbackDTO; -import com.engine.salary.entity.salaryBill.dto.SalaryBillViewingLimitDTO; +import com.engine.salary.entity.salaryBill.dto.salaryBillViewingLimitSetting; import com.engine.salary.entity.salaryBill.dto.SalaryBillWatermarkDTO; import com.engine.salary.entity.salaryBill.param.SalaryBaseSetSaveParam; @@ -54,7 +54,7 @@ public interface SalaryBillBaseSetService { * 获取工资单失效限制 * @return */ - SalaryBillViewingLimitDTO getSalaryBillViewingLimitSetting(); + salaryBillViewingLimitSetting getSalaryBillViewingLimitSetting(); } diff --git a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java index 2a1b03b47..e5f6d51d3 100644 --- a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java @@ -7,7 +7,7 @@ import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryBill.bo.SalaryBillBO; import com.engine.salary.entity.salaryBill.dto.SalaryBillAckFeedbackDTO; -import com.engine.salary.entity.salaryBill.dto.SalaryBillViewingLimitDTO; +import com.engine.salary.entity.salaryBill.dto.salaryBillViewingLimitSetting; import com.engine.salary.entity.salaryBill.dto.SalaryBillWatermarkDTO; import com.engine.salary.entity.salaryBill.param.SalaryBaseSetSaveParam; import com.engine.salary.entity.salaryBill.po.SalaryBillWatermarkPO; @@ -105,7 +105,7 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB } // 工资单时效性设置 - SalaryBillViewingLimitDTO salaryBillViewingLimitDTO = saveParam.getSalaryBillViewingLimitSetting(); + salaryBillViewingLimitSetting salaryBillViewingLimitDTO = saveParam.getSalaryBillViewingLimitSetting(); if (salaryBillViewingLimitDTO != null) { getSalarySysConfService(user).saveSettingByType(Util.null2String(salaryBillViewingLimitDTO.getLimitMonth()), SALARY_BILL_VIEWING_LIMIT_MONTH, "工资单时效性设置", "billSend"); } @@ -150,7 +150,7 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB } @Override - public SalaryBillViewingLimitDTO getSalaryBillViewingLimitSetting() { + public salaryBillViewingLimitSetting getSalaryBillViewingLimitSetting() { SalarySysConfPO limitMonthSetting = getSalarySysConfService(user).getOneByCode(SALARY_BILL_VIEWING_LIMIT_MONTH); @@ -158,6 +158,6 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB if (limitMonthSetting != null && NumberUtils.isNumber(limitMonthSetting.getConfValue())) { limitMonth = Integer.parseInt(limitMonthSetting.getConfValue()); } - return SalaryBillViewingLimitDTO.builder().limitMonth(limitMonth).build(); + return salaryBillViewingLimitSetting.builder().limitMonth(limitMonth).build(); } } diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 4c29c4e57..e100232ed 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -486,7 +486,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService //工资单查看时效性 Date limitMonth = getLimitMonth(); if (limitMonth != null && limitMonth.after(salarySendInfo.getSalaryMonth())) { - SalaryBillViewingLimitDTO salaryBillViewingLimitSetting = getSalaryBillBaseSetService(user).getSalaryBillViewingLimitSetting(); + salaryBillViewingLimitSetting salaryBillViewingLimitSetting = getSalaryBillBaseSetService(user).getSalaryBillViewingLimitSetting(); throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100511, "仅能查看" + salaryBillViewingLimitSetting.getLimitMonth() + "月内的工资单")); } @@ -643,7 +643,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService private Date getLimitMonth() { //工资单时效性 - SalaryBillViewingLimitDTO salaryBillViewingLimitSetting = getSalaryBillBaseSetService(user).getSalaryBillViewingLimitSetting(); + salaryBillViewingLimitSetting salaryBillViewingLimitSetting = getSalaryBillBaseSetService(user).getSalaryBillViewingLimitSetting(); if (salaryBillViewingLimitSetting.getLimitMonth() != 0) { LocalDate localDate = LocalDate.now().plusMonths(-salaryBillViewingLimitSetting.getLimitMonth()).withDayOfMonth(1); return SalaryDateUtil.localDateToDate(localDate); diff --git a/src/com/engine/salary/wrapper/SalaryBillBaseSetWrapper.java b/src/com/engine/salary/wrapper/SalaryBillBaseSetWrapper.java index c5b49e6f8..0cf2f3495 100644 --- a/src/com/engine/salary/wrapper/SalaryBillBaseSetWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryBillBaseSetWrapper.java @@ -4,7 +4,7 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.entity.salaryBill.dto.SalaryBaseSetFormDTO; import com.engine.salary.entity.salaryBill.dto.SalaryBillAckFeedbackDTO; -import com.engine.salary.entity.salaryBill.dto.SalaryBillViewingLimitDTO; +import com.engine.salary.entity.salaryBill.dto.salaryBillViewingLimitSetting; import com.engine.salary.entity.salaryBill.dto.SalaryBillWatermarkDTO; import com.engine.salary.entity.salaryBill.param.SalaryBaseSetSaveParam; import com.engine.salary.service.SalaryBillBaseSetService; @@ -48,7 +48,7 @@ public class SalaryBillBaseSetWrapper extends Service { SalaryBaseSetFormDTO dto = new SalaryBaseSetFormDTO(); SalaryBillWatermarkDTO salaryBillWatermark = getSalaryBillBaseSetService(user).getWatermarkSetting(); SalaryBillAckFeedbackDTO salaryBillAckFeedback = getSalaryBillBaseSetService(user).getDefaultAckFeedbackSetting(); - SalaryBillViewingLimitDTO salaryBillViewingLimitDTO = getSalaryBillBaseSetService(user).getSalaryBillViewingLimitSetting(); + salaryBillViewingLimitSetting salaryBillViewingLimitSetting = getSalaryBillBaseSetService(user).getSalaryBillViewingLimitSetting(); if (Objects.isNull(salaryBillWatermark)) { dto.setWatermarkStatus(false); @@ -64,7 +64,7 @@ public class SalaryBillBaseSetWrapper extends Service { // 工资单反馈默认设置 dto.setAckFeedbackSetting(salaryBillAckFeedback); } - dto.setSalaryBillViewingLimitDTO(salaryBillViewingLimitDTO); + dto.setSalaryBillViewingLimitSetting(salaryBillViewingLimitSetting); return dto; } From 26e9fc90e146c4ec9e83f5f71b5f2b2a9b83787c Mon Sep 17 00:00:00 2001 From: sy Date: Sun, 8 Oct 2023 11:12:16 +0800 Subject: [PATCH 17/18] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E5=8F=B0=E8=B4=A6=EF=BC=8C=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=9C=AA=E8=AE=BE=E7=BD=AE=E5=9F=BA=E6=95=B0=E6=83=85=E5=86=B5?= =?UTF-8?q?=E4=B8=8B=E5=AD=98=E5=9C=A8=E7=9A=84=E6=A0=B8=E7=AE=97=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIAccountBiz.java | 31 +++++++++++---------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/com/engine/salary/biz/SIAccountBiz.java b/src/com/engine/salary/biz/SIAccountBiz.java index a07390040..d32a556b2 100644 --- a/src/com/engine/salary/biz/SIAccountBiz.java +++ b/src/com/engine/salary/biz/SIAccountBiz.java @@ -52,6 +52,7 @@ import dm.jdbc.util.IdGenerator; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.math.NumberUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import weaver.hrm.User; @@ -630,7 +631,7 @@ public class SIAccountBiz extends Service { needArchivesPerson.stream().forEach(e -> { InsuranceSchemeDetailPO po = otherPerson.get(e); BigDecimal paymentProportion = new BigDecimal(StringUtils.isBlank(po.getPaymentProportion()) ? "0" : po.getPaymentProportion()).divide(new BigDecimal("100")); - BigDecimal paymentNum = new BigDecimal(StringUtils.isBlank(archivesPerson.get(String.valueOf(e))) ? "0" : archivesPerson.get(String.valueOf(e))); + BigDecimal paymentNum = new BigDecimal((ObjectUtils.isEmpty(archivesPerson) || StringUtils.isBlank(archivesPerson.get(String.valueOf(e)))) ? "0" : archivesPerson.get(String.valueOf(e))); BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); // BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); @@ -700,7 +701,7 @@ public class SIAccountBiz extends Service { needArchivesCom.stream().forEach(e -> { InsuranceSchemeDetailPO po = otherCom.get(e); BigDecimal paymentProportion = new BigDecimal(StringUtils.isBlank(po.getPaymentProportion()) ? "0" : po.getPaymentProportion()).divide(new BigDecimal("100")); - BigDecimal paymentNum = new BigDecimal(StringUtils.isBlank(archivesCom.get(String.valueOf(e))) ? "0" : archivesCom.get(String.valueOf(e))); + BigDecimal paymentNum = new BigDecimal((ObjectUtils.isEmpty(archivesCom) || StringUtils.isBlank(archivesCom.get(String.valueOf(e)))) ? "0" : archivesCom.get(String.valueOf(e))); BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); // BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); @@ -788,7 +789,7 @@ public class SIAccountBiz extends Service { needArchivesPerson.stream().forEach(e -> { InsuranceSchemeDetailPO po = fundperson.get(e); BigDecimal paymentProportion = new BigDecimal(StringUtils.isBlank(po.getPaymentProportion()) ? "0" : po.getPaymentProportion()).divide(new BigDecimal("100")); - BigDecimal paymentNum = new BigDecimal(StringUtils.isBlank(archivesPerson.get(String.valueOf(e))) ? "0" : archivesPerson.get(String.valueOf(e))); + BigDecimal paymentNum = new BigDecimal((ObjectUtils.isEmpty(archivesPerson) || StringUtils.isBlank(archivesPerson.get(String.valueOf(e)))) ? "0" : archivesPerson.get(String.valueOf(e))); BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); // BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); @@ -857,7 +858,7 @@ public class SIAccountBiz extends Service { needArchivesCom.stream().forEach(e -> { InsuranceSchemeDetailPO po = fundCom.get(e); BigDecimal paymentProportion = new BigDecimal(StringUtils.isBlank(po.getPaymentProportion()) ? "0" : po.getPaymentProportion()).divide(new BigDecimal("100")); - BigDecimal paymentNum = new BigDecimal(StringUtils.isBlank(archivesCom.get(String.valueOf(e))) ? "0" : archivesCom.get(String.valueOf(e))); + BigDecimal paymentNum = new BigDecimal((ObjectUtils.isEmpty(archivesCom) || StringUtils.isBlank(archivesCom.get(String.valueOf(e)))) ? "0" : archivesCom.get(String.valueOf(e))); BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); // BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); @@ -948,7 +949,7 @@ public class SIAccountBiz extends Service { needArchivesPerson.forEach(e -> { InsuranceSchemeDetailPO po = schemeperson.get(e); BigDecimal paymentProportion = new BigDecimal(StringUtils.isBlank(po.getPaymentProportion()) ? "0" : po.getPaymentProportion()).divide(new BigDecimal("100")); - BigDecimal paymentNum = new BigDecimal(StringUtils.isBlank(archivesPerson.get(String.valueOf(e))) ? "0" : archivesPerson.get(String.valueOf(e))); + BigDecimal paymentNum = new BigDecimal((ObjectUtils.isEmpty(archivesPerson) || StringUtils.isBlank(archivesPerson.get(String.valueOf(e)))) ? "0" : archivesPerson.get(String.valueOf(e))); BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); // BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); @@ -1017,7 +1018,7 @@ public class SIAccountBiz extends Service { needArchivesCom.stream().forEach(e -> { InsuranceSchemeDetailPO po = schemeCom.get(e); BigDecimal paymentProportion = new BigDecimal(StringUtils.isBlank(po.getPaymentProportion()) ? "0" : po.getPaymentProportion()).divide(new BigDecimal("100")); - BigDecimal paymentNum = new BigDecimal(StringUtils.isBlank(archivesCom.get(String.valueOf(e))) ? "0" : archivesCom.get(String.valueOf(e))); + BigDecimal paymentNum = new BigDecimal((ObjectUtils.isEmpty(archivesCom) || StringUtils.isBlank(archivesCom.get(String.valueOf(e)))) ? "0" : archivesCom.get(String.valueOf(e))); BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); // BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); @@ -1519,7 +1520,7 @@ public class SIAccountBiz extends Service { needArchivesPerson.stream().forEach(e -> { InsuranceSchemeDetailPO po = otherPerson.get(e); BigDecimal paymentProportion = new BigDecimal(StringUtils.isBlank(po.getPaymentProportion()) ? "0" : po.getPaymentProportion()).divide(new BigDecimal("100")); - BigDecimal paymentNum = new BigDecimal(StringUtils.isBlank(archivesPerson.get(String.valueOf(e))) ? "0" : archivesPerson.get(String.valueOf(e))); + BigDecimal paymentNum = new BigDecimal((ObjectUtils.isEmpty(archivesPerson) || StringUtils.isBlank(archivesPerson.get(String.valueOf(e)))) ? "0" : archivesPerson.get(String.valueOf(e))); BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); // BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); @@ -1581,7 +1582,7 @@ public class SIAccountBiz extends Service { needArchivesCom.stream().forEach(e -> { InsuranceSchemeDetailPO po = otherCom.get(e); BigDecimal paymentProportion = new BigDecimal(StringUtils.isBlank(po.getPaymentProportion()) ? "0" : po.getPaymentProportion()).divide(new BigDecimal("100")); - BigDecimal paymentNum = new BigDecimal(StringUtils.isBlank(archivesCom.get(String.valueOf(e))) ? "0" : archivesCom.get(String.valueOf(e))); + BigDecimal paymentNum = new BigDecimal((ObjectUtils.isEmpty(archivesCom) || StringUtils.isBlank(archivesCom.get(String.valueOf(e)))) ? "0" : archivesCom.get(String.valueOf(e))); BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); // BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); @@ -1660,7 +1661,7 @@ public class SIAccountBiz extends Service { needArchivesPerson.stream().forEach(e -> { InsuranceSchemeDetailPO po = fundperson.get(e); BigDecimal paymentProportion = new BigDecimal(StringUtils.isBlank(po.getPaymentProportion()) ? "0" : po.getPaymentProportion()).divide(new BigDecimal("100")); - BigDecimal paymentNum = new BigDecimal(StringUtils.isBlank(archivesPerson.get(String.valueOf(e))) ? "0" : archivesPerson.get(String.valueOf(e))); + BigDecimal paymentNum = new BigDecimal((ObjectUtils.isEmpty(archivesPerson) || StringUtils.isBlank(archivesPerson.get(String.valueOf(e)))) ? "0" : archivesPerson.get(String.valueOf(e))); BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); // BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); @@ -1721,7 +1722,7 @@ public class SIAccountBiz extends Service { needArchivesCom.stream().forEach(e -> { InsuranceSchemeDetailPO po = fundCom.get(e); BigDecimal paymentProportion = new BigDecimal(StringUtils.isBlank(po.getPaymentProportion()) ? "0" : po.getPaymentProportion()).divide(new BigDecimal("100")); - BigDecimal paymentNum = new BigDecimal(StringUtils.isBlank(archivesCom.get(String.valueOf(e))) ? "0" : archivesCom.get(String.valueOf(e))); + BigDecimal paymentNum = new BigDecimal((ObjectUtils.isEmpty(archivesCom) || StringUtils.isBlank(archivesCom.get(String.valueOf(e)))) ? "0" : archivesCom.get(String.valueOf(e))); BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); // BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); @@ -1804,7 +1805,7 @@ public class SIAccountBiz extends Service { needArchivesPerson.forEach(e -> { InsuranceSchemeDetailPO po = schemeperson.get(e); BigDecimal paymentProportion = new BigDecimal(StringUtils.isBlank(po.getPaymentProportion()) ? "0" : po.getPaymentProportion()).divide(new BigDecimal("100")); - BigDecimal paymentNum = new BigDecimal(StringUtils.isBlank(archivesPerson.get(String.valueOf(e))) ? "0" : archivesPerson.get(String.valueOf(e))); + BigDecimal paymentNum = new BigDecimal((ObjectUtils.isEmpty(archivesPerson) || StringUtils.isBlank(archivesPerson.get(String.valueOf(e)))) ? "0" : archivesPerson.get(String.valueOf(e))); BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); // BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); @@ -1866,7 +1867,7 @@ public class SIAccountBiz extends Service { needArchivesCom.stream().forEach(e -> { InsuranceSchemeDetailPO po = schemeCom.get(e); BigDecimal paymentProportion = new BigDecimal(StringUtils.isBlank(po.getPaymentProportion()) ? "0" : po.getPaymentProportion()).divide(new BigDecimal("100")); - BigDecimal paymentNum = new BigDecimal(StringUtils.isBlank(archivesCom.get(String.valueOf(e))) ? "0" : archivesCom.get(String.valueOf(e))); + BigDecimal paymentNum = new BigDecimal((ObjectUtils.isEmpty(archivesCom) || StringUtils.isBlank(archivesCom.get(String.valueOf(e)))) ? "0" : archivesCom.get(String.valueOf(e))); BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); // BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); @@ -1952,7 +1953,8 @@ public class SIAccountBiz extends Service { needArchivesPerson.forEach(e -> { InsuranceSchemeDetailPO po = schemeperson.get(e); BigDecimal paymentProportion = new BigDecimal(po.getPaymentProportion()).divide(new BigDecimal("100")); - BigDecimal paymentNum = new BigDecimal(archivesPerson.get(String.valueOf(e))); +// BigDecimal paymentNum = new BigDecimal(archivesPerson.get(String.valueOf(e))); + BigDecimal paymentNum = new BigDecimal((ObjectUtils.isEmpty(archivesPerson) || StringUtils.isBlank(archivesPerson.get(String.valueOf(e)))) ? "0" : archivesPerson.get(String.valueOf(e))); BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); // BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); @@ -2022,7 +2024,8 @@ public class SIAccountBiz extends Service { needArchivesCom.forEach(e -> { InsuranceSchemeDetailPO po = schemeCom.get(e); BigDecimal paymentProportion = new BigDecimal(po.getPaymentProportion()).divide(new BigDecimal("100")); - BigDecimal paymentNum = SalaryEntityUtil.string2BigDecimalDefault0(archivesCom.get(String.valueOf(e))); +// BigDecimal paymentNum = SalaryEntityUtil.string2BigDecimalDefault0(archivesCom.get(String.valueOf(e))); + BigDecimal paymentNum = new BigDecimal((ObjectUtils.isEmpty(archivesCom) || StringUtils.isBlank(archivesCom.get(String.valueOf(e)))) ? "0" : archivesCom.get(String.valueOf(e))); BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); // BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); From 8166e760814532476535039908c1f5c322ebe379 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Sun, 8 Oct 2023 13:38:37 +0800 Subject: [PATCH 18/18] =?UTF-8?q?=E8=B4=A6=E5=A5=97=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/datacollection/DataCollectionEmployee.java | 1 + .../salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java | 1 + .../salaryformula/dto/SalaryFormulaEmployeeDTO.java | 3 +++ src/com/engine/salary/enums/UserStatusEnum.java | 8 ++++++++ .../salary/service/impl/SalaryAcctResultServiceImpl.java | 7 +++++++ 5 files changed, 20 insertions(+) diff --git a/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java b/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java index c5fc21616..4a43063ef 100644 --- a/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java +++ b/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java @@ -70,6 +70,7 @@ public class DataCollectionEmployee { @SalaryFormulaVar(defaultLabel = "状态编码", labelId = 98624, dataType = "string") private String status; + private String statusName; //工号 @SalaryFormulaVar(defaultLabel = "工号", labelId = 98622, dataType = "string") diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java index 5f3b9c700..82c86bda0 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java @@ -106,6 +106,7 @@ public class SalaryAcctFormulaBO { .telephone(simpleEmployee.getTelephone()) .sex(sexName) .status(simpleEmployee.getStatus()) + .statusName(simpleEmployee.getStatusName()) .departmentName(simpleEmployee.getDepartmentName()) .departmentId(simpleEmployee.getDepartmentId()) .subcompanyName(simpleEmployee.getSubcompanyName()) diff --git a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java index ae5a91807..558a608aa 100644 --- a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java +++ b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java @@ -62,6 +62,9 @@ public class SalaryFormulaEmployeeDTO { //状态 private String status; + @SalaryFormulaVar(defaultLabel = "状态", labelId = 98622, dataType = "string") + private String statusName; + //工号 @SalaryFormulaVar(defaultLabel = "工号", labelId = 98622, dataType = "string") private String workcode; diff --git a/src/com/engine/salary/enums/UserStatusEnum.java b/src/com/engine/salary/enums/UserStatusEnum.java index bd4cc6670..cdf894769 100644 --- a/src/com/engine/salary/enums/UserStatusEnum.java +++ b/src/com/engine/salary/enums/UserStatusEnum.java @@ -103,5 +103,13 @@ public enum UserStatusEnum implements BaseEnum { .map(v -> HrmStatus.builder().id(v.value.toString()).name(v.defaultLabel).build()).collect(Collectors.toList()); } + public static UserStatusEnum parseByValue(Integer value) { + for (UserStatusEnum statusEnum : UserStatusEnum.values()) { + if (Objects.equals(statusEnum.getValue(), value)) { + return statusEnum; + } + } + return null; + } } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 35a9253cb..953910849 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -23,6 +23,7 @@ import com.engine.salary.entity.salarysob.po.*; import com.engine.salary.entity.taxagent.po.TaxAgentAdminPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.SalaryValueTypeEnum; +import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.salaryaccounting.LockStatusEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctResultDataSourceEnum; @@ -396,6 +397,12 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // 查询人员信息 List employeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getEmployeeId, Collectors.toList()); List simpleEmployees = getSalaryEmployeeService(user).getEmployeeByIdsAll(employeeIds); + simpleEmployees.forEach(e->{ + UserStatusEnum userStatusEnum = UserStatusEnum.parseByValue(Integer.parseInt(e.getStatus())); + if(userStatusEnum != null){ + e.setStatusName(userStatusEnum.getDefaultLabel()); + } + }); // 查询个税扣缴义务人 Set taxAgentIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getTaxAgentId); List taxAgentPOS = getTaxAgentService(user).listByIds(taxAgentIds);