From 6d4265acf1f1a908ccc12ec9bd988a53cf1f97eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 8 May 2024 15:31:36 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E8=81=8C=E7=A7=B0=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E4=B8=BA=E4=B8=AD=E5=8D=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/datacollection/DataCollectionEmployee.java | 3 +++ .../salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java | 1 + .../entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java | 2 ++ src/com/engine/salary/mapper/datacollection/EmployMapper.xml | 5 +++-- .../engine/salary/service/impl/SalarySendServiceImpl.java | 1 + 5 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java b/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java index 66e581915..a4ce08bb3 100644 --- a/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java +++ b/src/com/engine/salary/entity/datacollection/DataCollectionEmployee.java @@ -101,6 +101,9 @@ public class DataCollectionEmployee { @SalaryFormulaVar(defaultLabel = "职称", labelId = 98623, dataType = "string") private String jobcall; + @SalaryFormulaVar(defaultLabel = "职称ID", labelId = 98623, dataType = "string") + private Long jobcallId; + //生日 @SalaryFormulaVar(defaultLabel = "出生日期", labelId = 98624, dataType = "string") private String birthday; diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java index da5ab590e..41b38d5e0 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java @@ -113,6 +113,7 @@ public class SalaryAcctFormulaBO { .jobtitleName(simpleEmployee.getJobtitleName()) .jobtitleId(simpleEmployee.getJobtitleId()) .jobcall(simpleEmployee.getJobcall()) + .jobcallId(simpleEmployee.getJobcallId()) .companystartdate(simpleEmployee.getCompanystartdate()) .birthday(simpleEmployee.getBirthday()) .workcode(simpleEmployee.getWorkcode()) diff --git a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java index 938ab113e..413d9de61 100644 --- a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java +++ b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java @@ -90,6 +90,8 @@ public class SalaryFormulaEmployeeDTO { //职称 @SalaryFormulaVar(defaultLabel = "职称", labelId = 98623, dataType = "string") private String jobcall; + @SalaryFormulaVar(defaultLabel = "职称ID", labelId = 98623, dataType = "string") + private Long jobcallId; @SalaryFormulaVar(defaultLabel = "出生日期", labelId = 98624, dataType = "string") diff --git a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml index cb3553462..23264778a 100644 --- a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml @@ -52,10 +52,10 @@ e.sex as sex, e.email as email, e.telephone as telephone, - e.jobcall as jobcall, + e.jobcall as jobcallId, + job.name as jobcall, e.birthday as birthday, e.certificatenum as idNo, - c.id as jobtitleId, e.enddate as dismissdate, e.workyear, e.companyworkyear @@ -63,6 +63,7 @@ left join hrmdepartment d on e.departmentid = d.id left join hrmjobtitles c on e.jobtitle = c.id left join HrmSubCompany sc on e.SUBCOMPANYID1=sc.id + left join hrmjobcall job on e.jobcall=job.id where e.status not in (7) and (e.accounttype is null or e.accounttype = 0) AND e.id IN diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 1c85a6948..9a9c750ca 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -933,6 +933,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService .subcompanyName(simpleEmployee.getSubcompanyName()) .email(StringUtils.isEmpty(simpleEmployee.getEmail()) ? "" : simpleEmployee.getEmail()) .jobcall(simpleEmployee.getJobcall()) + .jobcallId(simpleEmployee.getJobcallId()) .companystartdate(simpleEmployee.getCompanystartdate()) .sex("0".equals(simpleEmployee.getSex()) ? "男" : "女") .mobile(StringUtils.isEmpty(simpleEmployee.getMobile()) ? "" : simpleEmployee.getMobile()) From bcc1e351173653223d8ec37670f5a578a52e03d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 8 May 2024 17:28:43 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E6=8B=A6=E6=88=AA=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=A0=B7=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/CustomSalaryAcctRecordWrapper.java | 59 +++++++++++++++++++ .../com/customization/salary/CustomSalarySendWrapper.java | 16 ----- 2 files changed, 59 insertions(+), 16 deletions(-) create mode 100644 resource/wiki/代码样例/拦截工资单相关接口/com/customization/salary/CustomSalaryAcctRecordWrapper.java diff --git a/resource/wiki/代码样例/拦截工资单相关接口/com/customization/salary/CustomSalaryAcctRecordWrapper.java b/resource/wiki/代码样例/拦截工资单相关接口/com/customization/salary/CustomSalaryAcctRecordWrapper.java new file mode 100644 index 000000000..999db4c7d --- /dev/null +++ b/resource/wiki/代码样例/拦截工资单相关接口/com/customization/salary/CustomSalaryAcctRecordWrapper.java @@ -0,0 +1,59 @@ +package com.customization.salary; + +import com.engine.core.cfg.annotation.ServiceDynamicProxy; +import com.engine.core.impl.aop.AbstractServiceProxy; +import com.engine.salary.entity.salaryacct.dto.SalaryAcctRecordListDTO; +import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam; +import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam; +import com.engine.salary.util.page.PageInfo; +import com.engine.salary.wrapper.SalaryAcctRecordWrapper; +import com.engine.salary.wrapper.proxy.SalaryAcctRecordWrapperProxy; + +import java.util.Collection; +import java.util.Map; + +/** + * 薪资核算记录 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@ServiceDynamicProxy(target = SalaryAcctRecordWrapper.class, desc = "核算记录") +public class CustomSalaryAcctRecordWrapper extends AbstractServiceProxy implements SalaryAcctRecordWrapperProxy { + + @Override + @ServiceMethodDynamicProxy(desc = "拦截核算记录列表") + public PageInfo listPage(SalaryAcctRecordQueryParam queryParam) { + PageInfo salaryAcctRecordListDTOPageInfo = (PageInfo) executeMethod(queryParam); + + //todo do some thing + return salaryAcctRecordListDTOPageInfo; + } + + @Override + public Map getForm(Long id) { + return (Map)executeMethod(id); + } + + @Override + public Long save(SalaryAcctRecordSaveParam saveParam) { + return (Long)executeMethod(saveParam); + } + + @Override + public void delete(Collection ids) { + executeMethod(ids); + } + + @Override + public void file(Long id) { + executeMethod(id); + } + + @Override + public void reCalculate(Long id) { + executeMethod(id); + } +} diff --git a/resource/wiki/代码样例/拦截工资单相关接口/com/customization/salary/CustomSalarySendWrapper.java b/resource/wiki/代码样例/拦截工资单相关接口/com/customization/salary/CustomSalarySendWrapper.java index 04881dbdd..ceae20f56 100644 --- a/resource/wiki/代码样例/拦截工资单相关接口/com/customization/salary/CustomSalarySendWrapper.java +++ b/resource/wiki/代码样例/拦截工资单相关接口/com/customization/salary/CustomSalarySendWrapper.java @@ -34,22 +34,6 @@ public class CustomSalarySendWrapper extends AbstractServiceProxy implements Sal @Override @ServiceMethodDynamicProxy(desc = "拦截工资单发送方法") public Map grant(SalarySendGrantParam queryParam) { - Long salarySendId = queryParam.getSalarySendId(); - List ids = queryParam.getIds(); - - if (queryParam.getSalarySendRangeIds() != null) { - //如果传了范围id,则使用范围id发放 - ids = getSalarySendRangeService(new User()) - .getSendInfoIdsBySendId(queryParam.getSalarySendId(), queryParam.getSalarySendRangeIds(), SalarySendGrantTypeEnum.GRANT); - if (ids.isEmpty()) {// 由于查出来是空的,会导致全部发放,在此进行拦截 - throw new SalaryRunTimeException("工资发放范围内没有匹配员工"); - } - } - - List> sendInfoList = getSalaryBillService(new User()).getSendInfoList(salarySendId, ids); - //解析sendInfoList,拼接短信内容 - System.out.println("发送短信"); - //todo do some thing Map result = (Map) executeMethod(queryParam); From e7dee966d62762139d1fc21f9d09a5cc1332977c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 9 May 2024 17:27:28 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E4=BA=8C=E5=BC=80=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/wiki/二开/二开说明.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 resource/wiki/二开/二开说明.md diff --git a/resource/wiki/二开/二开说明.md b/resource/wiki/二开/二开说明.md new file mode 100644 index 000000000..e69de29bb From 845586cba2244e97d11ec40e1ae64704af540bb2 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 10 May 2024 14:54:02 +0800 Subject: [PATCH 4/8] test --- .../engine/salary/service/impl/AddUpDeductionServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java index 322afcc6b..bdd7a77ad 100644 --- a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java @@ -737,7 +737,7 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction String cacheKey = "addUpDeduction_autoAddAll_processing"; Object objVal = Util_DataCache.getObjVal(cacheKey); if (objVal != null) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(135788, "一键累计过于频繁,请稍后再试")); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(135788, "一键累计过于频繁,请稍后再试 ")); } try { Util_DataCache.setObjVal(cacheKey, true); From 1c1a77d387a455bf5948e6e1a2419bfcf46751d2 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 10 May 2024 15:41:40 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E7=AB=AF=E5=B7=A5?= =?UTF-8?q?=E8=B5=84=E5=8D=95=E5=88=97=E8=A1=A8=E8=BF=94=E5=9B=9E=E7=99=BB?= =?UTF-8?q?=E9=99=86=E4=BA=BAid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryBill/dto/SalaryMySalaryBillListDTO.java | 5 +++-- .../engine/salary/service/impl/SalarySendServiceImpl.java | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryMySalaryBillListDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryMySalaryBillListDTO.java index f8a8d3eea..af239ee5f 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryMySalaryBillListDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryMySalaryBillListDTO.java @@ -5,8 +5,6 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.LocalDate; -import java.time.LocalDateTime; import java.util.Date; /** @@ -62,4 +60,7 @@ public class SalaryMySalaryBillListDTO { private Date sendTime; + private Long employeeId; + + } diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 9a9c750ca..782317f9f 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -807,7 +807,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService queryParam.setStartSalaryMonth(getLimitMonth()); List list = salarySendInfoMapper.mySalaryBillList(queryParam); - + list.forEach(dto -> dto.setEmployeeId(Long.valueOf(user.getUID()))); PageInfo pageInfo = new PageInfo<>(list, SalaryMySalaryBillListDTO.class); pageInfo.setTotal(list.size()); pageInfo.setPageNum(queryParam.getCurrent()); From 8d18c0e5cb1324c22ef09e13d512014f5239c82b Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 10 May 2024 18:25:32 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E4=BC=98=E5=8C=96=E2=80=9C=E8=96=AA?= =?UTF-8?q?=E8=B5=84=E9=A1=B9=E7=9B=AE=E5=90=8C=E6=AD=A5=E8=87=B3=E8=B4=A6?= =?UTF-8?q?=E5=A5=97=E2=80=9D=EF=BC=8C=E8=96=AA=E9=85=AC=E6=80=BB=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=91=98=E8=83=BD=E9=80=89=E5=88=B0=E6=89=80=E6=9C=89?= =?UTF-8?q?=E4=B9=89=E5=8A=A1=E4=BA=BA=E4=B8=8B=E8=B4=A6=E5=A5=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SalaryItemServiceImpl.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index c59afdced..82afc2e9e 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -426,8 +426,11 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService Set salarySobIds = SalaryEntityUtil.properties(salarySobItemList, SalarySobItemPO::getSalarySobId); List salarySobs = getSalarySobService(user).listByIds(salarySobIds); // 获取能够管理的义务人 - Set taxAgentIds = SalaryEntityUtil.properties(getTaxAgentService(user).listAllTaxAgentsAsAdmin(Long.valueOf(user.getUID())), TaxAgentPO::getId); - salarySobs = salarySobs.stream().filter(sob -> taxAgentIds.contains(sob.getTaxAgentId())).collect(Collectors.toList()); + Boolean isChief = getTaxAgentService(user).isChief(Long.valueOf(user.getUID())); + if (!isChief) { + Set taxAgentIds = SalaryEntityUtil.properties(getTaxAgentService(user).listAllTaxAgentsAsAdmin(Long.valueOf(user.getUID())), TaxAgentPO::getId); + salarySobs = salarySobs.stream().filter(sob -> taxAgentIds.contains(sob.getTaxAgentId())).collect(Collectors.toList()); + } return salarySobs.stream().map(m -> { Map map = new HashMap<>(); map.put("id", String.valueOf(m.getId())); From 509257b4192fbccf75a9b4b5783645d9fa53efb5 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Sat, 11 May 2024 15:07:54 +0800 Subject: [PATCH 7/8] =?UTF-8?q?pdf=E5=AF=BC=E5=87=BA=E5=89=8D=E5=85=88?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E7=94=9F=E6=88=90pdf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryBill/bo/SalaryBillBO.java | 2 + .../salary/service/SalaryBillService.java | 6 + .../service/impl/SalaryBillServiceImpl.java | 157 ++++++++++++++---- .../salary/web/SalaryBillController.java | 24 +++ .../salary/wrapper/SalarySendWrapper.java | 4 + 5 files changed, 165 insertions(+), 28 deletions(-) diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java index 8f016b34f..edb51e9ff 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java @@ -33,6 +33,7 @@ import weaver.common.MessageUtil; import weaver.conn.RecordSet; import weaver.email.EmailWorkRunnable; import weaver.file.ImageFileManager; +import weaver.general.Util; import weaver.hrm.company.SubCompanyComInfo; import weaver.hrm.resource.ResourceComInfo; @@ -199,6 +200,7 @@ public class SalaryBillBO { log.error("资源异常", e); } companyName = subCompanyComInfo.getSubCompanyname(resourceComInfo.getSubCompanyID(employeeId + "")); + companyName = Util.formatMultiLang(companyName); } } diff --git a/src/com/engine/salary/service/SalaryBillService.java b/src/com/engine/salary/service/SalaryBillService.java index 394b2994d..530c3080e 100644 --- a/src/com/engine/salary/service/SalaryBillService.java +++ b/src/com/engine/salary/service/SalaryBillService.java @@ -23,6 +23,10 @@ public interface SalaryBillService { */ Map grant(SalarySendGrantParam queryParam); + Map reGenPdf(SalarySendGrantParam queryParam); + + + /** * 获取内容 * @param sendId @@ -46,6 +50,8 @@ public interface SalaryBillService { String exportPdf(SalaryExportPdfParam param); + String genPdfBeforeExport(SalaryExportPdfParam salaryExportPdfParam); + /** * 工资单撤回 * diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java index 143c1d67a..eaf9c0be1 100644 --- a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.service.impl; +import cn.hutool.core.io.FileUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.api.formmode.mybatis.util.SqlProxyHandle; @@ -37,6 +38,7 @@ 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.engine.salary.util.pdf.HtmlToPdf; import com.google.common.collect.Lists; import com.weaver.util.threadPool.ThreadPoolUtil; import com.weaver.util.threadPool.constant.ModulePoolEnum; @@ -200,6 +202,44 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService return new HashMap<>(); } + /** + * 对于已经发送的工资单,重新生成pdf + * @param param + * @return + */ + @Override + public Map reGenPdf(SalarySendGrantParam param) { + // 1.检查和获取工资单发放 + SalarySendPO salarySend = checkAndGetSalarySend(param.getSalarySendId()); + // 获取默认模板 + SalarySobPO salarySob = getSalarySobService(user).getById(salarySend.getSalarySobId()); + List salaryTemplates = salarySob == null ? Lists.newArrayList() : getSalaryTemplateService(user).getDefaultTemplates(Arrays.asList(salarySend.getSalarySobId(), salarySob.getId())); + SalaryTemplatePO salaryTemplate = salaryTemplates.get(0); + List ids = param.getIds(); + if (param.getSalarySendRangeIds() != null) { + //如果传了范围id,则使用范围id发放 + ids = getSalarySendRangeService(user) + .getSendInfoIdsBySendId(salarySend.getId(), param.getSalarySendRangeIds(), SalarySendGrantTypeEnum.GRANT); + if (ids.isEmpty()) {// 由于查出来是空的,会导致全部发放,在此进行拦截 + throw new SalaryRunTimeException("工资发放范围内没有匹配员工"); + } + } + try { + TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(salarySob.getTaxAgentId()); + // 1.构建发送参数 + SalaryBillSendDTO salaryBillSendParam = buildSendParams(salarySend, taxAgentPO.getName(), salaryTemplate); + // 2.获取可发送的列表,此步最耗时,需要解密核算数据 + List sendStatusList = Arrays.asList(SalarySendStatusEnum.UNSEND.getValue(), SalarySendStatusEnum.WITHDRAW.getValue(), SalarySendStatusEnum.ALREADYSEND.getValue()); + List> enableSendList = getEnableSendList(salarySend, ids, salaryBillSendParam, sendStatusList); + //生成pdf + genPdf(salaryBillSendParam, enableSendList, true); + getProgressService(user).finish(SalaryCacheKey.SALARY_GRANT_PROGRESS + "_" + salarySend.getId(), true); + } catch (Exception e) { + log.info("发送出错:{}", e.getMessage(), e); + } + return new HashMap<>(); + } + /** * 处理发送 @@ -221,13 +261,14 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService SalaryBillSendDTO salaryBillSendParam = buildSendParams(salarySend, taxAgentPO.getName(), salaryTemplate); // 2.获取可发送的列表,此步最耗时,需要解密核算数据 - List> enableSendList = getEnableSendList(salarySend, ids, salaryBillSendParam); + List sendStatusList = Arrays.asList(SalarySendStatusEnum.UNSEND.getValue(), SalarySendStatusEnum.WITHDRAW.getValue()); + List> enableSendList = getEnableSendList(salarySend, ids, salaryBillSendParam, sendStatusList); // 3.发送消息:先修改数据再发消息,避免出错后无法撤回 List successIds = sendMessage(enableSendList, salaryBillSendParam); //生成pdf - genPdf(salaryBillSendParam, enableSendList); + genPdf(salaryBillSendParam, enableSendList, false); // 4.发放 grantSendInfo(successIds, salarySend, salaryTemplate, salaryBillSendParam); @@ -250,35 +291,44 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService } } - private void genPdf(SalaryBillSendDTO salaryBillSendParam, List> enableSendList) { + private void genPdf(SalaryBillSendDTO salaryBillSendParam, List> enableSendList, boolean isSync) { if (GEN_PDF) { - LocalRunnable localRunnable = new LocalRunnable() { - @Override - public void execute() { - // 获取人员完整信息 - Map allEmployeeMap = getEmployeeWholeInfo(enableSendList); - //生成工资单pdf - enableSendList.forEach(e -> { - // 构建人员信息 - SalaryBillBO.buildEmployeeInfo(salaryBillSendParam, allEmployeeMap.get(e.get("employeeId").toString())); - SalaryBillBO.genPdf(e, salaryBillSendParam); - }); + if (isSync) { + genPdf(salaryBillSendParam, enableSendList); + } else { + LocalRunnable localRunnable = new LocalRunnable() { + @Override + public void execute() { + genPdf(salaryBillSendParam, enableSendList); + } + }; + ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "salaryBillGenPdf", localRunnable); + } - //合并工资单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 + 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); - } - }; - ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "salaryBillGenPdf", localRunnable); } } + private void genPdf(SalaryBillSendDTO salaryBillSendParam, List> enableSendList) { + // 获取人员完整信息 + Map allEmployeeMap = getEmployeeWholeInfo(enableSendList); + //生成工资单pdf + enableSendList.forEach(e -> { + // 构建人员信息 + SalaryBillBO.buildEmployeeInfo(salaryBillSendParam, allEmployeeMap.get(e.get("employeeId").toString())); + 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 + 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); + } + /** * 构建发送参数 * @@ -394,12 +444,12 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService * @param ids * @return */ - private List> getEnableSendList(SalarySendPO salarySend, List ids, SalaryBillSendDTO salaryBillSendParam) { + private List> getEnableSendList(SalarySendPO salarySend, List ids, SalaryBillSendDTO salaryBillSendParam, List sendStatus) { SalarySendInfoQueryParam queryParam = new SalarySendInfoQueryParam(); queryParam.setSalarySendId(salarySend.getId()); // 空就是所有 queryParam.setIds(ids); - queryParam.setSendStatuss(Arrays.asList(SalarySendStatusEnum.UNSEND.getValue(), SalarySendStatusEnum.WITHDRAW.getValue())); + queryParam.setSendStatuss(sendStatus); // 2.获取基本数据 List list = Lists.newArrayList(); if (CollectionUtils.isEmpty(ids)) { @@ -500,6 +550,57 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService return path; } + @Override + public String genPdfBeforeExport(SalaryExportPdfParam param) { + // 先判断对应路径下是否存在pdf + SalarySendPO salarySend = checkAndGetSalarySend(param.getSalarySendId()); + String yearMonth = SalaryDateUtil.getFormatYearMonth(salarySend.getSalaryMonth()); + String pdfPath = HrmSalaryPayrollConf.GEN_PATH + File.separator + yearMonth + File.separator + salarySend.getId() + File.separator + "%s" + ".pdf"; + Long id = param.getId(); + if (id == null) { + pdfPath = String.format(pdfPath, param.getSalarySendId()); + } else { + pdfPath = String.format(pdfPath, id); + } + File file = new File(pdfPath); + if (file.exists()) { + return "success"; + } + + // 判断对应路径下是否存在html + String htmlPath = HrmSalaryPayrollConf.GEN_PATH + File.separator + yearMonth + File.separator + salarySend.getId() + File.separator + "%s" + ".html"; + if (id == null) { + htmlPath = String.format(htmlPath, param.getSalarySendId()); + } else { + htmlPath = String.format(htmlPath, id); + } + file = new File(htmlPath); + if (file.exists()) { + // 将html转成pdf + FileUtil.del(pdfPath); + HtmlToPdf.convert(HrmSalaryPayrollConf.TO_PDF_TOOL_PATH, htmlPath, pdfPath); + mergePdf(param, yearMonth); + return "success"; + } + + // 先生成html再生成pdf + SalarySendGrantParam grantParam = SalarySendGrantParam.builder().salarySendId(param.getSalarySendId()).ids(Collections.singletonList(param.getId())).build(); + reGenPdf(grantParam); + return "success"; + + } + + private void mergePdf(SalaryExportPdfParam param, String yearMonth) { + //合并工资单pdf + //1、先获取所有工资单 + Long salarySendId = param.getSalarySendId(); + List salarySendInfos = getSalarySendInfoMapper().listSome(SalarySendInfoPO.builder().salarySendId(salarySendId).sendStatus(1).build()); + //2、工资单pdf转为路径 + List filesToMerge = salarySendInfos.stream().map(po -> HrmSalaryPayrollConf.GEN_PATH + yearMonth + File.separator + salarySendId + File.separator + po.getId() + ".pdf").collect(Collectors.toList()); + String pdfPath = HrmSalaryPayrollConf.GEN_PATH + yearMonth + File.separator + salarySendId + File.separator + salarySendId + ".pdf"; + SalaryBillBO.mergePdf(pdfPath, filesToMerge); + } + 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 3b29aaea4..c94be9966 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -560,6 +560,30 @@ public class SalaryBillController { // // } + + /** + * 下载pdf前先进行校验 生成 + * @param request + * @param response + * @return + */ + @GET + @Path("/genPdfBeforeExport") + @Produces(MediaType.APPLICATION_JSON) + public String genPdfBeforeExport(@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)); + } + return new ResponseResult(user).run(getSalarySendWrapper(user)::genPdfBeforeExport, salaryExportPdfParam); + } + @GET @Path("/exportPdf") public Response downloadPdfFile(@Context HttpServletRequest request, @Context HttpServletResponse response) { diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index 39784a675..210c69501 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -742,4 +742,8 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy public Map getToken(Long uid) { return SalaryTokenUtil.GetToken( uid); } + + public String genPdfBeforeExport(SalaryExportPdfParam salaryExportPdfParam) { + return getSalaryBillService(user).genPdfBeforeExport(salaryExportPdfParam); + } } From dd54a1043350b6295d63c106fcb068a85eeb4025 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Sat, 11 May 2024 16:19:25 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E6=A0=B8=E7=AE=97=E5=9B=BA=E5=AE=9A?= =?UTF-8?q?=E5=88=97=E5=A4=B4=E6=95=B0=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SalaryAcctExcelServiceImpl.java | 2 +- .../engine/salary/wrapper/SalaryComparisonResultWrapper.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index c9956d1ab..3cc6dcb55 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -461,7 +461,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc if (fixedNum == 0) { fixedNum = 3; } - for (int i = 0; i < fixedNum; i++) { + for (int i = 0; i < fixedNum && i < columnList.size(); i++) { columnList.get(i).setFixed("left"); } } diff --git a/src/com/engine/salary/wrapper/SalaryComparisonResultWrapper.java b/src/com/engine/salary/wrapper/SalaryComparisonResultWrapper.java index 504fa456a..7ae995090 100644 --- a/src/com/engine/salary/wrapper/SalaryComparisonResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryComparisonResultWrapper.java @@ -69,7 +69,7 @@ public class SalaryComparisonResultWrapper extends Service { if (fixedNum == 0) { fixedNum = 3; } - for (int i = 0; i < fixedNum; i++) { + for (int i = 0; i < fixedNum && i < weaTableColumns.size(); i++) { weaTableColumns.get(i).setFixed("left"); } }