From 190bbe087568ab47bb4ab01f42bc0929a0d35d7a Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 31 Aug 2023 09:24:41 +0800 Subject: [PATCH 01/37] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E8=96=AA=E8=B5=84?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E8=87=B3=E8=B4=A6=E5=A5=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/biz/SalarySobItemBiz.java | 15 +++++++ .../salaryitem/param/SyncSalaryItemParam.java | 30 +++++++++++++ .../salary/service/SalaryItemService.java | 13 ++++++ .../salary/service/SalarySobItemService.java | 2 + .../service/impl/SalaryItemServiceImpl.java | 45 +++++++++++++++++++ .../impl/SalarySobItemServiceImpl.java | 5 +++ .../salary/web/SalaryItemController.java | 23 ++++++++++ .../salary/wrapper/SalaryItemWrapper.java | 16 +++++++ 8 files changed, 149 insertions(+) create mode 100644 src/com/engine/salary/entity/salaryitem/param/SyncSalaryItemParam.java diff --git a/src/com/engine/salary/biz/SalarySobItemBiz.java b/src/com/engine/salary/biz/SalarySobItemBiz.java index f5537d7d5..66ac63d0c 100644 --- a/src/com/engine/salary/biz/SalarySobItemBiz.java +++ b/src/com/engine/salary/biz/SalarySobItemBiz.java @@ -10,6 +10,7 @@ import weaver.conn.mybatis.MyBatisFactory; import java.util.Collection; import java.util.List; +import java.util.Objects; public class SalarySobItemBiz { @@ -154,4 +155,18 @@ public class SalarySobItemBiz { sqlSession.close(); } } + + public void update(SalarySobItemPO salarySobItemPO) { + if (Objects.isNull(salarySobItemPO)) { + return; + } + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SalarySobItemMapper mapper = sqlSession.getMapper(SalarySobItemMapper.class); + mapper.updateIgnoreNull(salarySobItemPO); + sqlSession.commit(); + } finally { + sqlSession.close(); + } + } } diff --git a/src/com/engine/salary/entity/salaryitem/param/SyncSalaryItemParam.java b/src/com/engine/salary/entity/salaryitem/param/SyncSalaryItemParam.java new file mode 100644 index 000000000..aadc5f5aa --- /dev/null +++ b/src/com/engine/salary/entity/salaryitem/param/SyncSalaryItemParam.java @@ -0,0 +1,30 @@ +package com.engine.salary.entity.salaryitem.param; + +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author Harryxzy + * @ClassName SyncSalaryItemParam + * @date 2023/08/30 17:51 + * @description 同步薪资项目到账套中参数 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SyncSalaryItemParam { + + // 薪资项目id + @DataCheck(require = true, message = "薪资项目id不能为空") + private Long salaryItemId; + + // 薪资账套id + @DataCheck(require = true, message = "薪资账套不能为空") + private List salarySobIds; +} diff --git a/src/com/engine/salary/service/SalaryItemService.java b/src/com/engine/salary/service/SalaryItemService.java index fbf123363..c42079fa3 100644 --- a/src/com/engine/salary/service/SalaryItemService.java +++ b/src/com/engine/salary/service/SalaryItemService.java @@ -2,6 +2,7 @@ package com.engine.salary.service; import com.engine.salary.entity.salaryitem.param.SalaryItemSaveParam; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; +import com.engine.salary.entity.salaryitem.param.SyncSalaryItemParam; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.enums.SalarySystemTypeEnum; import com.engine.salary.service.impl.SalaryItemServiceImpl; @@ -9,6 +10,7 @@ import com.engine.salary.util.page.PageInfo; import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -133,5 +135,16 @@ public interface SalaryItemService { */ void batchUpdateSortedIndex(List values); + /** + * 获取薪资项目在哪些账套中使用 + * @param salaryItemId + * @return + */ + List> getSalarySobBySalaryItem(Long salaryItemId); + /** + * 将薪资项目管理中的信息同步至账套 + * @param syncSalaryItemParam + */ + void syncSalaryItemToSalarySobItem(SyncSalaryItemParam syncSalaryItemParam); } diff --git a/src/com/engine/salary/service/SalarySobItemService.java b/src/com/engine/salary/service/SalarySobItemService.java index 37197e51f..7f1aa0647 100644 --- a/src/com/engine/salary/service/SalarySobItemService.java +++ b/src/com/engine/salary/service/SalarySobItemService.java @@ -125,4 +125,6 @@ public interface SalarySobItemService { * 薪资项目的详情 */ SalarySobItemFormDTO getSalaryItemForm(SalarySobItemPO param); + + void update(SalarySobItemPO po); } diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index 3affdd0e3..d8204a2b4 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -10,10 +10,12 @@ import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.entity.salaryitem.bo.SalaryItemBO; import com.engine.salary.entity.salaryitem.param.SalaryItemSaveParam; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; +import com.engine.salary.entity.salaryitem.param.SyncSalaryItemParam; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salaryitem.po.SysSalaryItemPO; import com.engine.salary.entity.salarysob.po.SalarySobBackItemPO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; +import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.SalarySystemTypeEnum; import com.engine.salary.enums.SalaryValueTypeEnum; @@ -24,11 +26,13 @@ import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; +import com.engine.salary.util.valid.ValidUtil; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import weaver.hrm.User; @@ -69,6 +73,10 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user); } + public SalarySobService getSalarySobService(User user) { + return ServiceUtil.getService(SalarySobServiceImpl.class, user); + } + private SysSalaryItemBiz sysSalaryItemBiz = new SysSalaryItemBiz(); // @Autowired @@ -391,6 +399,43 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService salaryItemBiz.batchUpdateSortedIndex(values); } + @Override + public List> getSalarySobBySalaryItem(Long salaryItemId) { + // 查询所有启用的薪资账套 + List salarySobItemList = getSalarySobItemService(user).listBySalaryItemIds(Collections.singleton(salaryItemId)); + Set salarySobIds = SalaryEntityUtil.properties(salarySobItemList, SalarySobItemPO::getSalarySobId); + List salarySobs = getSalarySobService(user).listByIds(salarySobIds); + return salarySobs.stream().map(m -> { + Map map = new HashMap<>(); + map.put("id", String.valueOf(m.getId())); + map.put("content", m.getName()); + return map; + }).collect(Collectors.toList()); + } + + @Override + public void syncSalaryItemToSalarySobItem(SyncSalaryItemParam param) { + ValidUtil.doValidator(param); + // 获取薪资项目信息 + SalaryItemPO salaryItemPO = salaryItemBiz.getById(param.getSalaryItemId()); + if (ObjectUtils.isEmpty(salaryItemPO)) { + throw new SalaryRunTimeException("薪资项目不存在或已被删除"); + } + // 获取薪资账套中薪资项目信息 + List salarySobItemPOS = getSalarySobItemService(user).listBySalaryItemIds(Collections.singleton(param.getSalaryItemId())); + salarySobItemPOS = salarySobItemPOS.stream().filter( po -> param.getSalarySobIds().contains(po.getSalarySobId())).collect(Collectors.toList()); + // 更新薪资账套中的薪资项目信息 + Date now = new Date(); + for (SalarySobItemPO sobItem : salarySobItemPOS) { + sobItem.setFormulaId(sobItem.getFormulaId()); + sobItem.setRoundingMode(sobItem.getRoundingMode()); + sobItem.setPattern(sobItem.getPattern()); + sobItem.setValueType(sobItem.getValueType()); + sobItem.setDescription(sobItem.getDescription()); + sobItem.setUpdateTime(now); + getSalarySobItemService(user).update(sobItem); + } + } @Data @Builder diff --git a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java index 169b54bb8..c4e27cdea 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java @@ -727,6 +727,11 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe salarySobItemMapper.deleteItemShowBySalarySobId(salarySobIds); } + @Override + public void update(SalarySobItemPO po) { + salarySobItemMapper.update(po); + } + @Override public SalarySobItemFormDTO getSalaryItemForm(SalarySobItemPO param) { SalarySobItemFormDTO salarySobItemFormDTO = new SalarySobItemFormDTO(); diff --git a/src/com/engine/salary/web/SalaryItemController.java b/src/com/engine/salary/web/SalaryItemController.java index 61584bae1..39131b9f4 100644 --- a/src/com/engine/salary/web/SalaryItemController.java +++ b/src/com/engine/salary/web/SalaryItemController.java @@ -8,6 +8,7 @@ import com.engine.salary.entity.salaryitem.dto.SalaryItemListDTO; import com.engine.salary.entity.salaryitem.dto.SysSalaryItemListDTO; import com.engine.salary.entity.salaryitem.param.SalaryItemSaveParam; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; +import com.engine.salary.entity.salaryitem.param.SyncSalaryItemParam; import com.engine.salary.entity.salaryitem.param.SysSalaryItemSearchParam; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.util.ResponseResult; @@ -112,6 +113,28 @@ public class SalaryItemController { return new ResponseResult(user).run(getSalaryItemWrapper(user)::getForm, id); } + /** + * 获取哪些账套中使用了该薪资项目 + */ + @GET + @Path("/getSalarySobBySalaryItem") + @Produces(MediaType.APPLICATION_JSON) + public String getSalarySobBySalaryItem(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>>(user).run(getSalaryItemWrapper(user)::getSalarySobBySalaryItem, id); + } + + /** + * 将薪资项目管理中的信息同步至账套 + */ + @POST + @Path("/syncSalaryItemToSalarySobItem") + @Produces(MediaType.APPLICATION_JSON) + public String syncSalaryItemToSalarySobItem(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SyncSalaryItemParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryItemWrapper(user)::syncSalaryItemToSalarySobItem, param); + } + /** * "获取薪资项目可选的类型(与属性有联动)" * diff --git a/src/com/engine/salary/wrapper/SalaryItemWrapper.java b/src/com/engine/salary/wrapper/SalaryItemWrapper.java index b1d43a044..e0ac23554 100644 --- a/src/com/engine/salary/wrapper/SalaryItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryItemWrapper.java @@ -10,6 +10,7 @@ import com.engine.salary.entity.salaryitem.dto.SalaryItemFormDTO; import com.engine.salary.entity.salaryitem.dto.SalaryItemListDTO; import com.engine.salary.entity.salaryitem.param.SalaryItemSaveParam; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; +import com.engine.salary.entity.salaryitem.param.SyncSalaryItemParam; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salaryitem.po.SysSalaryItemPO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; @@ -262,4 +263,19 @@ public class SalaryItemWrapper extends Service { } + /** + * 获取薪资项目在哪些账套中使用 + * @param salaryItemId + */ + public List> getSalarySobBySalaryItem(Long salaryItemId) { + return getSalaryItemService(user).getSalarySobBySalaryItem(salaryItemId); + } + + /** + * 将薪资项目管理中的信息同步至账套 + * @param syncSalaryItemParam + */ + public void syncSalaryItemToSalarySobItem(SyncSalaryItemParam syncSalaryItemParam) { + getSalaryItemService(user).syncSalaryItemToSalarySobItem(syncSalaryItemParam); + } } From 2934a88cc29286f43ba52a9e9246a8327b0942a5 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 31 Aug 2023 10:23:14 +0800 Subject: [PATCH 02/37] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E8=96=AA=E8=B5=84?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E8=87=B3=E8=B4=A6=E5=A5=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryItemServiceImpl.java | 10 +++++----- src/com/engine/salary/wrapper/SalaryItemWrapper.java | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index d8204a2b4..2ca312be7 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -427,11 +427,11 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService // 更新薪资账套中的薪资项目信息 Date now = new Date(); for (SalarySobItemPO sobItem : salarySobItemPOS) { - sobItem.setFormulaId(sobItem.getFormulaId()); - sobItem.setRoundingMode(sobItem.getRoundingMode()); - sobItem.setPattern(sobItem.getPattern()); - sobItem.setValueType(sobItem.getValueType()); - sobItem.setDescription(sobItem.getDescription()); + sobItem.setFormulaId(salaryItemPO.getFormulaId()); + sobItem.setRoundingMode(salaryItemPO.getRoundingMode()); + sobItem.setPattern(salaryItemPO.getPattern()); + sobItem.setValueType(salaryItemPO.getValueType()); + sobItem.setDescription(salaryItemPO.getDescription()); sobItem.setUpdateTime(now); getSalarySobItemService(user).update(sobItem); } diff --git a/src/com/engine/salary/wrapper/SalaryItemWrapper.java b/src/com/engine/salary/wrapper/SalaryItemWrapper.java index e0ac23554..1cf40c5da 100644 --- a/src/com/engine/salary/wrapper/SalaryItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryItemWrapper.java @@ -237,8 +237,8 @@ public class SalaryItemWrapper extends Service { if (SalaryDataTypeEnum.parseByValue(saveParam.getDataType()) == null) { throw new SalaryRunTimeException("字段类型异常"); } - if (saveParam.getName().contains("{") || saveParam.getName().contains("}")) { - throw new SalaryRunTimeException("薪资项目名称中不得包含大括号"); + if (saveParam.getName().contains("{") || saveParam.getName().contains("}") || saveParam.getName().contains(".")) { + throw new SalaryRunTimeException("薪资项目名称中不得包含大括号或点"); } } From f6094cbc7a64790aecaca4f0b9de9be082269ce2 Mon Sep 17 00:00:00 2001 From: sy Date: Wed, 6 Sep 2023 10:04:58 +0800 Subject: [PATCH 03/37] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=A1=A3=E6=A1=88=EF=BC=8C=E9=9D=9E=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E4=BA=BA=E5=91=98tab=E9=A1=B5=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIAccountBiz.java | 4 + src/com/engine/salary/biz/SIArchivesBiz.java | 36 +++++- .../sischeme/param/SISchemaImportParam.java | 9 +- .../salary/mapper/InsuranceExportMapper.java | 4 + .../salary/mapper/InsuranceExportMapper.xml | 98 +++++++++++++++++ .../mapper/datacollection/EmployMapper.xml | 3 +- .../mapper/extemp/ExternalEmployeeMapper.xml | 3 +- .../InsuranceAccountDetailMapper.java | 8 ++ .../InsuranceAccountDetailMapper.xml | 104 ++++++++++++++++++ .../impl/SIAComparisonResultServiceImpl.java | 8 ++ .../service/impl/SIAccountServiceImpl.java | 30 ++++- .../service/impl/SIArchivesServiceImpl.java | 28 +++-- .../service/impl/SISchemeServiceImpl.java | 7 +- .../impl/TaxAgentManageRangeServiceImpl.java | 8 +- 14 files changed, 327 insertions(+), 23 deletions(-) diff --git a/src/com/engine/salary/biz/SIAccountBiz.java b/src/com/engine/salary/biz/SIAccountBiz.java index 47e0741f7..13f887998 100644 --- a/src/com/engine/salary/biz/SIAccountBiz.java +++ b/src/com/engine/salary/biz/SIAccountBiz.java @@ -163,7 +163,11 @@ public class SIAccountBiz extends Service { OrderRuleVO orderRule = getSalarySysConfService(user).orderRule(); queryParam.setOrderRule(orderRule); + //系统人员福利台账明细 List list = getInsuranceAccountDetailMapper().list(queryParam); + //非系统各人员台账明细 + List extList = getInsuranceAccountDetailMapper().extList(queryParam); + list.addAll(extList); PageInfo pageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list, InsuranceAccountDetailPO.class); diff --git a/src/com/engine/salary/biz/SIArchivesBiz.java b/src/com/engine/salary/biz/SIArchivesBiz.java index a3d3f10ab..07a965ef7 100644 --- a/src/com/engine/salary/biz/SIArchivesBiz.java +++ b/src/com/engine/salary/biz/SIArchivesBiz.java @@ -29,6 +29,7 @@ import com.engine.salary.entity.sischeme.po.InsuranceSchemeDetailPO; import com.engine.salary.entity.sischeme.po.InsuranceSchemePO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.UserStatusEnum; +import com.engine.salary.enums.datacollection.DataCollectionEmployeeTypeEnum; import com.engine.salary.enums.siaccount.EmployeeStatusEnum; import com.engine.salary.enums.sicategory.*; import com.engine.salary.exception.SalaryRunTimeException; @@ -691,6 +692,13 @@ public class SIArchivesBiz { } encryptUtil.encrypt(updateOtherInfo, InsuranceArchivesOtherSchemePO.class); otherSchemeMapper.updateById(updateOtherInfo); + //更新base_info表状态 + InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); + if(baseInfoPO != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { + //对于非系统人员,编辑后状态切换为正在缴纳 + baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); + getInsuranceBaseInfoMapper().updateById(baseInfoPO); + } sqlSession.commit(); } else { otherSchemeMapper.deleteByEmployeeIdAndPayOrg(InsuranceArchivesOtherSchemePO.builder() @@ -729,6 +737,10 @@ public class SIArchivesBiz { .paymentOrganization(param.getPaymentOrganization()) .build()); baseInfoPO.setOtherArchivesId(otherInfos.get(0).getId()); + //对于非系统人员,编辑后状态切换为正在缴纳 + if (baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { + baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); + } getInsuranceBaseInfoMapper().updateById(baseInfoPO); } else { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "档案不存在!")); @@ -790,7 +802,13 @@ public class SIArchivesBiz { } encryptUtil.encrypt(updateFundInfo, InsuranceArchivesFundSchemePO.class); fundSchemeMapper.updateById(updateFundInfo); - + //更新base_info表状态 + InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); + if(baseInfoPO != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { + //对于非系统人员,编辑后状态切换为正在缴纳 + baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); + getInsuranceBaseInfoMapper().updateById(baseInfoPO); + } sqlSession.commit(); } else { fundSchemeMapper.deleteByEmployeeIdAndPayOrg(InsuranceArchivesFundSchemePO.builder() @@ -831,6 +849,10 @@ public class SIArchivesBiz { .paymentOrganization(param.getPaymentOrganization()) .build()); baseInfoPO.setFundArchivesId(fundInfos.get(0).getId()); + //对于非系统人员,编辑后状态切换为正在缴纳 + if (baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { + baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); + } getInsuranceBaseInfoMapper().updateById(baseInfoPO); } else { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "档案不存在!")); @@ -899,7 +921,13 @@ public class SIArchivesBiz { } encryptUtil.encrypt(updateSocialInfo, InsuranceArchivesSocialSchemePO.class); socialSchemeMapper.updateById(updateSocialInfo); - + //更新base_info表状态 + InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); + if(baseInfoPO != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { + //对于非系统人员,编辑后状态切换为正在缴纳 + baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); + getInsuranceBaseInfoMapper().updateById(baseInfoPO); + } sqlSession.commit(); } else { socialSchemeMapper.deleteByEmployeeIdAndPayOrg(InsuranceArchivesSocialSchemePO.builder() @@ -940,6 +968,10 @@ public class SIArchivesBiz { .paymentOrganization(param.getPaymentOrganization()) .build()); baseInfoPO.setSocialArchivesId(socialInfos.get(0).getId()); + //对于非系统人员,编辑后状态切换为正在缴纳 + if (baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { + baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); + } getInsuranceBaseInfoMapper().updateById(baseInfoPO); } else { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "档案不存在!")); diff --git a/src/com/engine/salary/entity/sischeme/param/SISchemaImportParam.java b/src/com/engine/salary/entity/sischeme/param/SISchemaImportParam.java index 0581b2c5f..7e49621c2 100644 --- a/src/com/engine/salary/entity/sischeme/param/SISchemaImportParam.java +++ b/src/com/engine/salary/entity/sischeme/param/SISchemaImportParam.java @@ -18,6 +18,13 @@ public class SISchemaImportParam { @DataCheck(require = true,message = "imageId为空") String imageId; - //福利执行状态 + /** + * 福利执行状态 + */ String runStatus; + + /** + * 是否是外部人员 + */ + boolean isExtEmp; } diff --git a/src/com/engine/salary/mapper/InsuranceExportMapper.java b/src/com/engine/salary/mapper/InsuranceExportMapper.java index ffed6713f..2464c49de 100644 --- a/src/com/engine/salary/mapper/InsuranceExportMapper.java +++ b/src/com/engine/salary/mapper/InsuranceExportMapper.java @@ -21,4 +21,8 @@ public interface InsuranceExportMapper { List exportAccount(@Param("paymentStatus") Integer paymentStatus, @Param("param") InsuranceExportParam param); List exportRecessionAccount(@Param("paymentStatus") Integer paymentStatus, @Param("param") InsuranceExportParam param); + + List exportExtAccount(@Param("paymentStatus") Integer paymentStatus, @Param("param") InsuranceExportParam param); + + List exportExtExcelAccount(@Param("param") InsuranceComparisonResultQueryParam param); } diff --git a/src/com/engine/salary/mapper/InsuranceExportMapper.xml b/src/com/engine/salary/mapper/InsuranceExportMapper.xml index 517eb1672..481c44a30 100644 --- a/src/com/engine/salary/mapper/InsuranceExportMapper.xml +++ b/src/com/engine/salary/mapper/InsuranceExportMapper.xml @@ -193,4 +193,102 @@ ORDER BY ${param.orderRule.orderRule} ${param.orderRule.ascOrDesc} + + + + + + + + diff --git a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml index b54ee6cba..d71cdcc23 100644 --- a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml @@ -8,7 +8,8 @@ d.DEPARTMENTNAME as departmentName, e.status, e.mobile, - e.workcode + e.workcode, + 'false' as extEmp from hrmresource e left join hrmdepartment d on e.departmentid = d.id where e.status not in (7) diff --git a/src/com/engine/salary/mapper/extemp/ExternalEmployeeMapper.xml b/src/com/engine/salary/mapper/extemp/ExternalEmployeeMapper.xml index 0a8ac06b9..e04017e35 100644 --- a/src/com/engine/salary/mapper/extemp/ExternalEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/extemp/ExternalEmployeeMapper.xml @@ -239,7 +239,8 @@ d.DEPARTMENTNAME as departmentName, e.status, e.mobile, - e.workcode + e.workcode, + 'true' as extEmp from hrsa_external_employee e left join hrmdepartment d on e.department_id = d.id diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.java b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.java index 94843ff71..2dec937ca 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.java +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.java @@ -24,6 +24,14 @@ public interface InsuranceAccountDetailMapper { */ List list(@Param("param") InsuranceAccountDetailParam queryParam); + /** + * 查询正常缴纳列表_非系统人员 + * + * @param queryParam + * @return + */ + List extList(@Param("param") InsuranceAccountDetailParam queryParam); + /** * 通过id查询 */ diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml index 6535e2f0b..6540a705d 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml @@ -254,6 +254,94 @@ + + + AND + ( + e.userName like CONCAT('%',#{param.userName},'%') + ) + + + AND e.workcode like CONCAT('%',#{param.workcode},'%') + + + AND t.employee_id IN + + #{employeeId} + + + + AND t.bill_month IN + + #{recessionMonth} + + + + AND t.payment_organization IN + + #{taxAgent} + + + + + + AND + ( + e.userName like '%'||#{param.userName}||'%' + ) + + + AND e.workcode like '%'||#{param.workcode}||'%' + + + AND t.employee_id IN + + #{employeeId} + + + + AND t.bill_month IN + + #{recessionMonth} + + + + AND t.payment_organization IN + + #{taxAgent} + + + + + + AND + ( + e.userName like '%'+#{param.userName}+'%' + ) + + + AND e.workcode like '%'+#{param.workcode}+'%' + + + AND t.employee_id IN + + #{employeeId} + + + + AND t.bill_month IN + + #{recessionMonth} + + + + AND t.payment_organization IN + + #{taxAgent} + + + + + + + + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/service/impl/ExtEmpServiceImpl.java b/src/com/engine/salary/service/impl/ExtEmpServiceImpl.java index 1b550bb71..dcb3b5f1f 100644 --- a/src/com/engine/salary/service/impl/ExtEmpServiceImpl.java +++ b/src/com/engine/salary/service/impl/ExtEmpServiceImpl.java @@ -38,6 +38,7 @@ import org.springframework.beans.BeanUtils; import weaver.file.ImageFileManager; import weaver.general.Util; import weaver.hrm.User; +import weaver.hrm.company.DepartmentComInfo; import java.io.InputStream; import java.util.*; @@ -323,7 +324,10 @@ public class ExtEmpServiceImpl extends Service implements ExtEmpService { Long employeeId = 0L; String username = (String) map.getOrDefault(SalaryI18nUtil.getI18nLabel(25034, "姓名"), ""); - String departmentName = (String) map.getOrDefault(SalaryI18nUtil.getI18nLabel(27511, "部门"), ""); + String departmentFullName = (String) map.getOrDefault(SalaryI18nUtil.getI18nLabel(27511, "部门"), ""); + String[] split = departmentFullName.split(">"); + String departmentName = split[split.length - 1]; + String subcompanyName = (String) map.getOrDefault(SalaryI18nUtil.getI18nLabel(33553, "分部"), ""); String companystartdate = (String) map.getOrDefault(SalaryI18nUtil.getI18nLabel(1516, "入职日期"), ""); @@ -346,6 +350,7 @@ public class ExtEmpServiceImpl extends Service implements ExtEmpService { //校验部门、分部 List subCompanyInfos = new ArrayList<>(); List deptInfos = new ArrayList<>(); + List targetDeptRange = new ArrayList<>(); if (StringUtils.isNotBlank(subcompanyName)) { subCompanyInfos = getEmployMapper().getSubCompanyInfosByName(subcompanyName); if (subCompanyInfos.size() == 0) { @@ -356,7 +361,18 @@ public class ExtEmpServiceImpl extends Service implements ExtEmpService { } } if (StringUtils.isNotBlank(departmentName)) { - deptInfos = getEmployMapper().getDeptInfosByName(departmentName); + List toDealDeptInfos = getEmployMapper().getDeptInfosByName(departmentName); + //筛选出匹配导入部门全路径的部门信息 + DepartmentComInfo dci = new DepartmentComInfo(); + deptInfos = toDealDeptInfos.stream().filter(f -> { + try { + String departmentRealPath = dci.getDepartmentRealPath(f.getId().toString()); + return departmentRealPath.contains(departmentFullName); + } catch (Exception e) { + throw new SalaryRunTimeException(e.getMessage()); + } + }).collect(Collectors.toList()); + if (deptInfos.size() == 0) { isError = true; Map errorMessageMap = Maps.newHashMap(); @@ -392,7 +408,7 @@ public class ExtEmpServiceImpl extends Service implements ExtEmpService { if(subCompanyInfos.size() == 0 && deptInfos.size() > 1) { isError = true; Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "系统中存在重复部门信息,无法指定当前人员关联的唯一部门,请通过填写部门所属的分部信息来缩小部门筛选范围")); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "系统中存在重复部门信息,无法指定当前人员关联的唯一部门,请细化部门上级部门或填写部门所属的分部信息来缩小部门筛选范围")); excelComments.add(errorMessageMap); } else if (subCompanyInfos.size() > 1 && deptInfos.size() == 0) { //部门结果数为0,分部结果数大于1,则无法匹配 @@ -415,7 +431,7 @@ public class ExtEmpServiceImpl extends Service implements ExtEmpService { } else if (targetDeptInfos.size() > 1) { isError = true; Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "该组数据中的部门和分部信息在系统中出现多组匹配的部门和分布组合,无法指定唯一的部门和分部组合")); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "该组数据中的部门和分部信息在系统中出现多组匹配的部门和分部组合,无法指定唯一的部门和分部组合")); excelComments.add(errorMessageMap); } else { targetSubCompanyInfos = subCompanyInfos.stream().filter(f -> f.getId().equals(targetDeptInfos.get(0).getSubcompanyid1())).collect(Collectors.toList()); diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 4f39d1eac..95042d4c6 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -1536,7 +1536,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getName, TaxAgentPO::getId); // 获取租户下所有的人员 - List salaryEmployees = getSalaryEmployeeService(user).listAll(UseEmployeeTypeEnum.ORG); + List salaryEmployees = getSalaryEmployeeService(user).listAll(UseEmployeeTypeEnum.ALL); // 失败的数量 int failCount = 0; diff --git a/src/com/engine/salary/service/impl/SICompensationServiceImpl.java b/src/com/engine/salary/service/impl/SICompensationServiceImpl.java index e237ea7f4..f677966d2 100644 --- a/src/com/engine/salary/service/impl/SICompensationServiceImpl.java +++ b/src/com/engine/salary/service/impl/SICompensationServiceImpl.java @@ -104,6 +104,7 @@ public class SICompensationServiceImpl extends Service implements SICompensation partition.forEach(p -> { param.setIds(p); resultData.addAll(getEmployMapper().listHrmInfoByIdAndName(param)); + resultData.addAll(getEmployMapper().listExtHrmInfoByIdAndName(param)); }); } diff --git a/src/com/engine/salary/service/impl/SIExportServiceImpl.java b/src/com/engine/salary/service/impl/SIExportServiceImpl.java index e66059a96..adcdbc8f7 100644 --- a/src/com/engine/salary/service/impl/SIExportServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIExportServiceImpl.java @@ -158,6 +158,9 @@ public class SIExportServiceImpl extends Service implements SIExportService { List accountExportPOS = new ArrayList<>(); if (paymentStatus.equals(PaymentStatusEnum.RECESSION.getValue())) { accountExportPOS = getInsuranceExportMapper().exportRecessionAccount(paymentStatus, param); + //非系统人员核算明细 + List extAccountExportPOS = getInsuranceExportMapper().exportExtAccount(paymentStatus, param); + accountExportPOS.addAll(extAccountExportPOS); // 分权逻辑 Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); if (needAuth) { @@ -174,6 +177,9 @@ public class SIExportServiceImpl extends Service implements SIExportService { } } else { accountExportPOS = getInsuranceExportMapper().exportAccount(paymentStatus, param); + //非系统人员核算明细 + List extAccountExportPOS = getInsuranceExportMapper().exportExtAccount(paymentStatus, param); + accountExportPOS.addAll(extAccountExportPOS); } // //过滤出福利档案基础信息表中runStatus为正在缴纳和待减员的人员 From 9bd270e77d635534e5adceb04e3b7973ac42c976 Mon Sep 17 00:00:00 2001 From: sy Date: Fri, 8 Sep 2023 13:24:27 +0800 Subject: [PATCH 06/37] =?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=E8=B0=83=E5=B7=AE?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=B8=80=E4=BA=BA=E5=A4=9A=E6=9D=A1=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InsuranceCompensationMapper.java | 1 + .../siaccount/InsuranceCompensationMapper.xml | 12 +++ .../impl/SICompensationServiceImpl.java | 77 +++++++++++++++---- .../service/impl/SISchemeServiceImpl.java | 10 --- 4 files changed, 76 insertions(+), 24 deletions(-) diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceCompensationMapper.java b/src/com/engine/salary/mapper/siaccount/InsuranceCompensationMapper.java index e96a6b8bb..ff149a787 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceCompensationMapper.java +++ b/src/com/engine/salary/mapper/siaccount/InsuranceCompensationMapper.java @@ -17,6 +17,7 @@ public interface InsuranceCompensationMapper { List queryByBillMonthAndPayOrg(@Param("billMonth") String billMonth, @Param("paymentOrganization") Long paymentOrganization); InsuranceCompensationPO getOneByBillMonthPayOrgEmpId(InsuranceCompensationPO insuranceCompensationPO); + List getListByBillMonthPayOrgEmpId(InsuranceCompensationPO insuranceCompensationPO); List getByBillMonthPayOrgEmpIds(InsuranceCompensationPO insuranceCompensationPO); diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceCompensationMapper.xml b/src/com/engine/salary/mapper/siaccount/InsuranceCompensationMapper.xml index 7e3d4e321..0f2aa206b 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceCompensationMapper.xml +++ b/src/com/engine/salary/mapper/siaccount/InsuranceCompensationMapper.xml @@ -208,6 +208,7 @@ WHERE t.bill_month = #{billMonth} AND t.payment_organization = #{paymentOrganization} AND t.delete_type = 0 + ORDER BY t.employee_id, t.create_time @@ -221,6 +222,17 @@ AND t.delete_type = 0 + + + @@ -175,6 +191,22 @@ order by id desc + UPDATE hrsa_social_security_scheme diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index 81999f2db..44400f3c4 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -194,11 +194,13 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { @Override public PageInfo list(InsuranceSchemeParam queryParam) { SalaryAssert.notNull(queryParam.getWelfareTypeEnum(), SalaryI18nUtil.getI18nLabel(84026, "参数错误")); + queryParam.setWelfareType(queryParam.getWelfareTypeEnum().getValue()); Long currentEmployeeId = (long) user.getUID(); List insuranceSchemePOS; Boolean needAuth = getTaxAgentService().isNeedAuth(currentEmployeeId); if (needAuth) { - insuranceSchemePOS = getInsuranceSchemeMapper().listByWelfareType(queryParam.getWelfareTypeEnum().getValue()); +// insuranceSchemePOS = getInsuranceSchemeMapper().listByWelfareType(queryParam.getWelfareTypeEnum().getValue()); + insuranceSchemePOS = getInsuranceSchemeMapper().list(queryParam); Boolean isAdminEnable = getTaxAgentService().isAdminEnable((long) user.getUID()); if (isAdminEnable) { //管理员 @@ -217,7 +219,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { insuranceSchemePOS = new ArrayList<>(); } } else { - insuranceSchemePOS = getInsuranceSchemeMapper().listByWelfareType(queryParam.getWelfareTypeEnum().getValue()); +// insuranceSchemePOS = getInsuranceSchemeMapper().listByWelfareType(queryParam.getWelfareTypeEnum().getValue()); + insuranceSchemePOS = getInsuranceSchemeMapper().list(queryParam); } PageInfo dtoPage = new PageInfo<>(InsuranceSchemeListDTO.class); From 5f1ef518923023136c2048965b5817eb13fa62a8 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 18 Sep 2023 18:20:53 +0800 Subject: [PATCH 16/37] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=85=B1=E4=BA=ABtemp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/SalaryStatisticsPushController.java | 8 + .../report/SalaryStatisticsPushMapper.java | 83 ++ .../report/SalaryStatisticsPushMapper.xml | 361 +++++++++ .../salaryStatisticsPushDetailMapper.java | 81 ++ .../salaryStatisticsPushDetailMapper.xml | 319 ++++++++ .../dto/SalaryStatisticsPushDetail.java | 25 + .../SalaryStatisticsPushDetailFormDTO.java | 36 + .../SalaryStatisticsPushDetailTableDTO.java | 48 ++ .../dto/SalaryStatisticsPushTableDTO.java | 42 + .../SalaryStatisticsPushDetailParam.java | 26 + .../param/SalaryStatisticsPushParam.java | 64 ++ .../SalaryStatisticsReportDataQueryParam.java | 7 + .../po/SalaryStatisticsPushDetailPO.java | 65 ++ .../entity/po/SalaryStatisticsPushPO.java | 71 ++ .../SalaryStatisticsPushDetailService.java | 85 ++ .../service/SalaryStatisticsPushService.java | 86 ++ .../SalaryStatisticsReportService.java | 9 + ...SalaryStatisticsPushDetailServiceImpl.java | 107 +++ .../impl/SalaryStatisticsPushServiceImpl.java | 755 ++++++++++++++++++ .../SalaryStatisticsReportServiceImpl.java | 18 + .../web/SalaryStatisticsPushController.java | 143 ++++ .../SalaryStatisticsReportWrapper.java | 45 +- 22 files changed, 2471 insertions(+), 13 deletions(-) create mode 100644 src/com/api/salary/web/SalaryStatisticsPushController.java create mode 100644 src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.java create mode 100644 src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.xml create mode 100644 src/com/engine/salary/mapper/report/salaryStatisticsPushDetailMapper.java create mode 100644 src/com/engine/salary/mapper/report/salaryStatisticsPushDetailMapper.xml create mode 100644 src/com/engine/salary/report/entity/dto/SalaryStatisticsPushDetail.java create mode 100644 src/com/engine/salary/report/entity/dto/SalaryStatisticsPushDetailFormDTO.java create mode 100644 src/com/engine/salary/report/entity/dto/SalaryStatisticsPushDetailTableDTO.java create mode 100644 src/com/engine/salary/report/entity/dto/SalaryStatisticsPushTableDTO.java create mode 100644 src/com/engine/salary/report/entity/param/SalaryStatisticsPushDetailParam.java create mode 100644 src/com/engine/salary/report/entity/param/SalaryStatisticsPushParam.java create mode 100644 src/com/engine/salary/report/entity/po/SalaryStatisticsPushDetailPO.java create mode 100644 src/com/engine/salary/report/entity/po/SalaryStatisticsPushPO.java create mode 100644 src/com/engine/salary/report/service/SalaryStatisticsPushDetailService.java create mode 100644 src/com/engine/salary/report/service/SalaryStatisticsPushService.java create mode 100644 src/com/engine/salary/report/service/impl/SalaryStatisticsPushDetailServiceImpl.java create mode 100644 src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java create mode 100644 src/com/engine/salary/report/web/SalaryStatisticsPushController.java diff --git a/src/com/api/salary/web/SalaryStatisticsPushController.java b/src/com/api/salary/web/SalaryStatisticsPushController.java new file mode 100644 index 000000000..75b370b37 --- /dev/null +++ b/src/com/api/salary/web/SalaryStatisticsPushController.java @@ -0,0 +1,8 @@ +package com.api.salary.web; + + +import javax.ws.rs.Path; + +@Path("/bs/salaryreport/salary/statistics/push") +public class SalaryStatisticsPushController extends com.engine.salary.report.web.SalaryStatisticsPushController{ +} diff --git a/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.java b/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.java new file mode 100644 index 000000000..bb158b987 --- /dev/null +++ b/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.java @@ -0,0 +1,83 @@ +package com.engine.salary.mapper.report; + +import com.engine.salary.report.entity.po.SalaryStatisticsPushPO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author Harryxzy + * @ClassName SalaryStatisticsPushMapper + * @date 2023/09/11 10:36 + * @description 报表分享 + */ +public interface SalaryStatisticsPushMapper { + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(SalaryStatisticsPushPO SalaryStatisticsPushPO); + + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + SalaryStatisticsPushPO getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param SalaryStatisticsPushPO 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(SalaryStatisticsPushPO SalaryStatisticsPushPO); + + /** + * 修改,修改所有字段 + * + * @param SalaryStatisticsPushPO 修改的记录 + * @return 返回影响行数 + */ + int update(SalaryStatisticsPushPO SalaryStatisticsPushPO); + + /** + * 修改,忽略null字段 + * + * @param SalaryStatisticsPushPO 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(SalaryStatisticsPushPO SalaryStatisticsPushPO); + + /** + * 删除记录 + * + * @param SalaryStatisticsPushPO 待删除的记录 + * @return 返回影响行数 + */ + int delete(SalaryStatisticsPushPO SalaryStatisticsPushPO); + + /** + * 获取该用户最新创建的分享记录 + * @param empId + */ + List listLatestRecordByCreator(@Param("empId") Long empId); + + /** + * 根据报表id模糊查询 + * @param reportId + * @return + */ + List listListReportIdAndIds(@Param("reportId") Long reportId, @Param("ids") List ids); +} diff --git a/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.xml b/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.xml new file mode 100644 index 000000000..38d77783e --- /dev/null +++ b/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.xml @@ -0,0 +1,361 @@ + + + + + + + + + + + + + + + + + + + + + + + + t.id + , t.create_time + , t.update_time + , t.creator + , t.delete_type + , t.tenant_key + , t.report_ids + , t.start_time + , t.end_time + , t.push_channel + , t.email_account + , t.mark + , t.push_title + , t.email_account_id + , t.remind + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO hrsa_report_push + + + + id, + + + create_time, + + + update_time, + + + creator, + + + delete_type, + + + tenant_key, + + + report_ids, + + + start_time, + + + end_time, + + + push_channel, + + + email_account, + + + mark, + + + push_title, + + + email_account_id, + + + remind, + + + + + #{id}, + + + #{createTime}, + + + #{updateTime}, + + + #{creator}, + + + #{deleteType}, + + + #{tenantKey}, + + + #{reportIds}, + + + #{startTime}, + + + #{endTime}, + + + #{pushChannel}, + + + #{emailAccount}, + + + #{mark}, + + + #{pushTitle}, + + + #{emailAccountId}, + + + #{remind}, + + + + + + + UPDATE hrsa_report_push + + create_time=#{createTime}, + update_time=#{updateTime}, + creator=#{creator}, + delete_type=#{deleteType}, + tenant_key=#{tenantKey}, + report_ids=#{reportIds}, + start_time=#{startTime}, + end_time=#{endTime}, + push_channel=#{pushChannel}, + email_account=#{emailAccount}, + mark=#{mark}, + push_title=#{pushTitle}, + email_account_id=#{emailAccountId}, + remind=#{remind}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_report_push + + + create_time=#{createTime}, + + + update_time=#{updateTime}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + tenant_key=#{tenantKey}, + + + report_ids=#{reportIds}, + + + start_time=#{startTime}, + + + end_time=#{endTime}, + + + push_channel=#{pushChannel}, + + + email_account=#{emailAccount}, + + + mark=#{mark}, + + + push_title=#{pushTitle}, + + + email_account_id=#{emailAccountId}, + + + remind=#{remind}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_report_push + SET delete_type=1 + WHERE id = #{id} AND delete_type = 0 + + + + diff --git a/src/com/engine/salary/mapper/report/salaryStatisticsPushDetailMapper.java b/src/com/engine/salary/mapper/report/salaryStatisticsPushDetailMapper.java new file mode 100644 index 000000000..e2cd55093 --- /dev/null +++ b/src/com/engine/salary/mapper/report/salaryStatisticsPushDetailMapper.java @@ -0,0 +1,81 @@ +package com.engine.salary.mapper.report; + +import com.engine.salary.report.entity.po.SalaryStatisticsPushDetailPO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author Harryxzy + * @ClassName SalaryStatisticsPushPOMapper + * @date 2023/09/11 11:01 + * @description 报表分享明细 + */ +public interface salaryStatisticsPushDetailMapper { + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(SalaryStatisticsPushDetailPO SalaryStatisticsPushDetailPO); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + SalaryStatisticsPushDetailPO getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param SalaryStatisticsPushDetailPO 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(SalaryStatisticsPushDetailPO SalaryStatisticsPushDetailPO); + + /** + * 修改,修改所有字段 + * + * @param SalaryStatisticsPushDetailPO 修改的记录 + * @return 返回影响行数 + */ + int update(SalaryStatisticsPushDetailPO SalaryStatisticsPushDetailPO); + + /** + * 修改,忽略null字段 + * + * @param SalaryStatisticsPushDetailPO 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(SalaryStatisticsPushDetailPO SalaryStatisticsPushDetailPO); + + /** + * 删除记录 + * + * @param SalaryStatisticsPushDetailPO 待删除的记录 + * @return 返回影响行数 + */ + int delete(SalaryStatisticsPushDetailPO SalaryStatisticsPushDetailPO); + + /** + * 根据批次id查询 + * @param batchIds + */ + List queryPushDetailPOByBatchId(@Param("batchIds") List batchIds); + + /** + * 根据批次id、员工id查询 + * @param + */ + List queryPushDetailPOByBatchIdAndEmpIds(@Param("batchId")Long batchId, @Param("empIds")List sharedBy); +} diff --git a/src/com/engine/salary/mapper/report/salaryStatisticsPushDetailMapper.xml b/src/com/engine/salary/mapper/report/salaryStatisticsPushDetailMapper.xml new file mode 100644 index 000000000..9db97d016 --- /dev/null +++ b/src/com/engine/salary/mapper/report/salaryStatisticsPushDetailMapper.xml @@ -0,0 +1,319 @@ + + + + + + + + + + + + + + + + + + + + + + + t.id + , t.create_time + , t.update_time + , t.creator + , t.delete_type + , t.tenant_key + , t.msg_id + , t.employee_id + , t.push_time + , t.push_status + , t.reback_time + , t.reback_status + , t.batch_id + , t.view_status + + + + + + + + + + + + + + + + + + + INSERT INTO hrsa_report_push_detail + + + + id, + + + create_time, + + + update_time, + + + creator, + + + delete_type, + + + tenant_key, + + + msg_id, + + + employee_id, + + + push_time, + + + push_status, + + + reback_time, + + + reback_status, + + + batch_id, + + + view_status, + + + + + #{id}, + + + #{createTime}, + + + #{updateTime}, + + + #{creator}, + + + #{deleteType}, + + + #{tenantKey}, + + + #{msgId}, + + + #{employeeId}, + + + #{pushTime}, + + + #{pushStatus}, + + + #{rebackTime}, + + + #{rebackStatus}, + + + #{batchId}, + + + #{viewStatus}, + + + + + + + UPDATE hrsa_report_push_detail + + create_time=#{createTime}, + update_time=#{updateTime}, + creator=#{creator}, + delete_type=#{deleteType}, + tenant_key=#{tenantKey}, + msg_id=#{msgId}, + employee_id=#{employeeId}, + push_time=#{pushTime}, + push_status=#{pushStatus}, + reback_time=#{rebackTime}, + reback_status=#{rebackStatus}, + batch_id=#{batchId}, + view_status=#{viewStatus}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_report_push_detail + + + create_time=#{createTime}, + + + update_time=#{updateTime}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + tenant_key=#{tenantKey}, + + + msg_id=#{msgId}, + + + employee_id=#{employeeId}, + + + push_time=#{pushTime}, + + + push_status=#{pushStatus}, + + + + reback_time is null, + + + reback_time=#{rebackTime}, + + + + reback_status=#{rebackStatus}, + + + batch_id=#{batchId}, + + + view_status=#{viewStatus}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_report_push_detail + SET delete_type=1 + WHERE id = #{id} AND delete_type = 0 + + + + \ No newline at end of file diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsPushDetail.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsPushDetail.java new file mode 100644 index 000000000..a075e19ac --- /dev/null +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsPushDetail.java @@ -0,0 +1,25 @@ +package com.engine.salary.report.entity.dto; + +import com.engine.salary.util.page.PageInfo; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Description: 薪酬报表推送详情 + * @Author: zhangheng + * @CreateDate: 2023/5/23 + * @Version: v1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryStatisticsPushDetail { + + private SalaryStatisticsPushDetailFormDTO detailForm; + + private PageInfo detailTable; + +} diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsPushDetailFormDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsPushDetailFormDTO.java new file mode 100644 index 000000000..66fcf666a --- /dev/null +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsPushDetailFormDTO.java @@ -0,0 +1,36 @@ +package com.engine.salary.report.entity.dto; + +import com.engine.salary.annotation.TableTitle; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Description: 薪酬报表推送详情表单 + * @Author: zhangheng + * @CreateDate: 2023/5/23 + * @Version: v1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryStatisticsPushDetailFormDTO { + + + @TableTitle(title = "分享报表", dataIndex = "reportName", key = "reportName") + private String reportName; + + @TableTitle(title = "报表查看有效时间", dataIndex = "effectiveTime", key = "effectiveTime") + private String effectiveTime; + + @TableTitle(title = "邮件账号", dataIndex = "emailAccount", key = "emailAccount") + private String emailAccount; + + @TableTitle(title = "报表分享渠道", dataIndex = "channel", key = "channel") + private String channel; + + @TableTitle(title = "分享说明", dataIndex = "remark", key = "remark") + private String remark; +} diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsPushDetailTableDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsPushDetailTableDTO.java new file mode 100644 index 000000000..7702ab2c8 --- /dev/null +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsPushDetailTableDTO.java @@ -0,0 +1,48 @@ +package com.engine.salary.report.entity.dto; + +import com.engine.salary.annotation.TableTitle; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Description: 薪酬统计维度列表 + * @Author: zhangheng + * @CreateDate: 2023/5/23 + * @Version: v1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryStatisticsPushDetailTableDTO { + + // 主键id + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @TableTitle(title = "姓名", dataIndex = "userName", key = "userName") + private String userName; + + @JsonSerialize(using = ToStringSerializer.class) + private Long employeeId; + + @TableTitle(title = "分享时间", dataIndex = "pushTime", key = "pushTime") + private String pushTime; + + @TableTitle(title = "分享状态", dataIndex = "pushStatus", key = "pushStatus") + private String pushStatus; + + @TableTitle(title = "查看状态", dataIndex = "viewStatus", key = "viewStatus") + private String viewStatus; + + @TableTitle(title = "撤回时间", dataIndex = "rebackTime", key = "rebackTime") + private String rebackTime; + + @TableTitle(title = "撤回状态", dataIndex = "rebackStatus", key = "rebackStatus") + private String rebackStatus; + +} diff --git a/src/com/engine/salary/report/entity/dto/SalaryStatisticsPushTableDTO.java b/src/com/engine/salary/report/entity/dto/SalaryStatisticsPushTableDTO.java new file mode 100644 index 000000000..7505e14b9 --- /dev/null +++ b/src/com/engine/salary/report/entity/dto/SalaryStatisticsPushTableDTO.java @@ -0,0 +1,42 @@ +package com.engine.salary.report.entity.dto; + +import com.engine.salary.annotation.TableTitle; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Description: 薪酬统计维度列表 + * @Author: zhangheng + * @CreateDate: 2023/5/23 + * @Version: v1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryStatisticsPushTableDTO { + + // 主键id + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @TableTitle(title = "分享报表", dataIndex = "reportName", key = "reportName") + private String reportName; + + // 数据查询有效时间 + @TableTitle(title = "数据查询有效时间", dataIndex = "effectiveTime", key = "effectiveTime") + private String effectiveTime; + + // 分享成功的被分享人 + @TableTitle(title = "分享成功的被分享人", dataIndex = "successPush", key = "successPush") + private String successPush; + + // 被分享人查看情况 + @TableTitle(title = "被分享人查看情况", dataIndex = "sharedView", key = "sharedView") + private String sharedView; + +} diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsPushDetailParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsPushDetailParam.java new file mode 100644 index 000000000..004b79c97 --- /dev/null +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsPushDetailParam.java @@ -0,0 +1,26 @@ +package com.engine.salary.report.entity.param; + +import com.engine.salary.common.BaseQueryParam; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author Harryxzy + * @ClassName SalaryStatisticsPushDetailParam + * @date 2023/09/11 15:40 + * @description 获取发送消息记录详情 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryStatisticsPushDetailParam extends BaseQueryParam { + + // 主键id + private Long id; + + // 姓名 + private String userNameSearch; +} diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsPushParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsPushParam.java new file mode 100644 index 000000000..86f90c086 --- /dev/null +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsPushParam.java @@ -0,0 +1,64 @@ +package com.engine.salary.report.entity.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @Description: 消息发送 + * @Author: zhangheng + * @CreateDate: 2023/5/23 + * @Version: v1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryStatisticsPushParam { + + /*********************************前端传送参数*******************************************/ + // 快照id列表 + private List reportIds; + + // 分享主题 + private String pushTitle; + + // 被分享人 + private List sharedBy; + + // 开始时间 + private String startTime; + + // 结束时间 + private String endTime; + + // 消息渠道 + private List pushChannel; + + // 已查看提醒 + private Integer remind; + + // 邮件地址 + private String emailAdress; + + // 邮件账号id + private Long emailAccountId; + + // 分享说明 + private String mark; + + // 渠道组件值 + private String config; + + // 渠道组件业务id + private Long businessId; + /**********************************后端补齐参数*********************************************/ + // 域名 + private String domain; + + // 分享批次id + private Long id; +} diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java index e5882d3df..18d08a36e 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java @@ -2,6 +2,7 @@ package com.engine.salary.report.entity.param; import com.engine.salary.common.BaseQueryParam; import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModelProperty; import lombok.*; import java.util.Date; @@ -78,4 +79,10 @@ public class SalaryStatisticsReportDataQueryParam extends BaseQueryParam { //统计单位 private Integer unitType; + + // 是否是分享报表 + private Boolean share; + + @ApiModelProperty("分享批次id") + private Long batchId; } diff --git a/src/com/engine/salary/report/entity/po/SalaryStatisticsPushDetailPO.java b/src/com/engine/salary/report/entity/po/SalaryStatisticsPushDetailPO.java new file mode 100644 index 000000000..fdd288722 --- /dev/null +++ b/src/com/engine/salary/report/entity/po/SalaryStatisticsPushDetailPO.java @@ -0,0 +1,65 @@ +package com.engine.salary.report.entity.po; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2023/5/17 + * @Version: v1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//@TableName(value = "hrsa_report_push_detail", autoResultMap = true) +public class SalaryStatisticsPushDetailPO implements Serializable { + + // 主键id + private Long id; + + // 批次id + private Long batchId; + + // 消息id + private Long msgId; + + // 员工id + private Long employeeId; + + // 分享时间 + private String pushTime; + + // 分享状态 + private String pushStatus; + + // 撤回时间 + private String rebackTime; + + // 撤回状态 + private String rebackStatus; + + // 被分享人查看情况 + private String viewStatus; + + // 租户key + private String tenantKey; + + // 创建人id + private Long creator; + + // 是否删除 + private Integer deleteType; + + // 创建时间 + private Date createTime; + + // 更新时间 + private Date updateTime; +} diff --git a/src/com/engine/salary/report/entity/po/SalaryStatisticsPushPO.java b/src/com/engine/salary/report/entity/po/SalaryStatisticsPushPO.java new file mode 100644 index 000000000..17cd860aa --- /dev/null +++ b/src/com/engine/salary/report/entity/po/SalaryStatisticsPushPO.java @@ -0,0 +1,71 @@ +package com.engine.salary.report.entity.po; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * @Description: + * @Author: zhangheng + * @CreateDate: 2023/5/17 + * @Version: v1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//@TableName(value = "hrsa_report_push", autoResultMap = true) +public class SalaryStatisticsPushPO implements Serializable { + + // 主键id + private Long id; + + // 报表id + private String reportIds; + + // 消息标题 + private String pushTitle; + + // 有效开始时间 + private String startTime; + + // 有效结束时间 + private String endTime; + + // 分享渠道 + private String pushChannel; + + // 邮件账号id + private Long emailAccountId; + + // 邮件账号 + private String emailAccount; + + // 分享说明 + private String mark; + + // 已查看提醒 + private Integer remind; + + // 租户key + private String tenantKey; + + // 创建人id + private Long creator; + + // 是否删除 + private Integer deleteType; + + // 创建时间 + private Date createTime; + + // 更新时间 + private Date updateTime; + + private List ids; +} diff --git a/src/com/engine/salary/report/service/SalaryStatisticsPushDetailService.java b/src/com/engine/salary/report/service/SalaryStatisticsPushDetailService.java new file mode 100644 index 000000000..f9a39c44b --- /dev/null +++ b/src/com/engine/salary/report/service/SalaryStatisticsPushDetailService.java @@ -0,0 +1,85 @@ +package com.engine.salary.report.service; + +import com.engine.salary.report.entity.po.SalaryStatisticsPushDetailPO; + +import java.util.List; + +/** + * @author Harryxzy + * @ClassName SalaryStatisticsPushDetailService + * @date 2023/09/13 15:10 + * @description + */ +public interface SalaryStatisticsPushDetailService { + + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + List listSome(SalaryStatisticsPushDetailPO po); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + SalaryStatisticsPushDetailPO getById(Long id); + + + /** + * 新增,忽略null字段 + * + * @param po 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(SalaryStatisticsPushDetailPO po); + + /** + * 修改,修改所有字段 + * + * @param po 修改的记录 + * @return 返回影响行数 + */ + int update(SalaryStatisticsPushDetailPO po); + + /** + * 修改,忽略null字段 + * + * @param po 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(SalaryStatisticsPushDetailPO po); + + /** + * 删除记录 + * + * @param po 待删除的记录 + * @return 返回影响行数 + */ + int delete(SalaryStatisticsPushDetailPO po); + + /** + * 根据批次id查询 + * @param batchIds + */ + List queryPushDetailPOByBatchIds(List batchIds); + + /** + * 根据批次id、员工id查询 + * @param + */ + List queryPushDetailPOByBatchIdAndEmpIds(Long batchId, List sharedBy); + + /** + * 根据被分享人获取分享记录列表 + * @param uid + * @return + */ + List getSuccessPushDetailListByReceiver(Long uid); + +} diff --git a/src/com/engine/salary/report/service/SalaryStatisticsPushService.java b/src/com/engine/salary/report/service/SalaryStatisticsPushService.java new file mode 100644 index 000000000..56bba4655 --- /dev/null +++ b/src/com/engine/salary/report/service/SalaryStatisticsPushService.java @@ -0,0 +1,86 @@ +package com.engine.salary.report.service; + +import com.engine.salary.common.BaseQueryParam; +import com.engine.salary.report.entity.dto.SalaryStatisticsPushDetail; +import com.engine.salary.report.entity.dto.SalaryStatisticsPushTableDTO; +import com.engine.salary.report.entity.param.SalaryStatisticsPushDetailParam; +import com.engine.salary.report.entity.param.SalaryStatisticsPushParam; +import com.engine.salary.report.entity.po.SalaryStatisticsPushPO; +import com.engine.salary.util.page.PageInfo; + +import java.util.List; +import java.util.Map; + +/** + * @author Harryxzy + * @ClassName SalaryStatisticsPushService + * @date 2023/09/11 10:15 + * @description 薪酬统计报表消息推送 + */ +public interface SalaryStatisticsPushService { + Map getPushForm(); + + /** + * 获取分享记录列表 + * @param baseQueryParam + */ + PageInfo getPushTable(BaseQueryParam baseQueryParam); + + /** + * 获取发送消息记录详情 + * @param param + * @return + */ + SalaryStatisticsPushDetail getPushDetail(SalaryStatisticsPushDetailParam param); + + /** + * 分享报表 + * @param param + */ + void push(SalaryStatisticsPushParam param); + + void addSharedPush(SalaryStatisticsPushParam param); + + // void rePush(Long id, Long employeeId, String tenantKey); + + /** + * 撤回分享 + * @param id 分享明细id + */ + void cancel(Long id); + + /** + * 撤回该批次所有分享 + * @param id 分享批次id + */ + void cancelAll(Long id); + +// SalaryStatisticsPushPO getById(Long id, String tenantKey); + +// List getPushDetailsById(Long batchId, String tenantKey); + + void updateReportViewStatus(List batchId, Long uid); + +// void sendViewedMsg(Long batchId, Long reportId, Long employeeId, String tenantKey); + + /** + * 根据用户获取有效(没有过期、撤回)的分享记录 + * @param uid + * @return + */ + List getSuccessPushListByReceiver(Long uid); + + /** + * 根据报表id、分享批次id获取有效的分享记录 + * @param reportId + * @return + */ + List getPushListByReportIdAndIds(Long reportId, List ids); + + /** + * 校验当前登录人员是否有权查看被分享的报表 + * @param reportId + * @return + */ + List shareReportValid(Long reportId); +} diff --git a/src/com/engine/salary/report/service/SalaryStatisticsReportService.java b/src/com/engine/salary/report/service/SalaryStatisticsReportService.java index e15572e0d..4355552cb 100644 --- a/src/com/engine/salary/report/service/SalaryStatisticsReportService.java +++ b/src/com/engine/salary/report/service/SalaryStatisticsReportService.java @@ -37,6 +37,13 @@ public interface SalaryStatisticsReportService { */ List list(); + /** + * 根据创建人获取薪酬报表列表 + * + * @return + */ + List listByCreator(Long uid); + /** * 获取单个薪酬统计报表 * @@ -45,6 +52,8 @@ public interface SalaryStatisticsReportService { */ SalaryStatisticsReportPO getById(Long id); + List getByIds(List ids); + /** * 保存薪酬统计报表 * diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsPushDetailServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsPushDetailServiceImpl.java new file mode 100644 index 000000000..64bc53c82 --- /dev/null +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsPushDetailServiceImpl.java @@ -0,0 +1,107 @@ +package com.engine.salary.report.service.impl; + +import com.engine.core.impl.Service; +import com.engine.salary.mapper.report.salaryStatisticsPushDetailMapper; +import com.engine.salary.report.entity.po.SalaryStatisticsPushDetailPO; +import com.engine.salary.report.service.SalaryStatisticsPushDetailService; +import com.engine.salary.util.db.MapperProxyFactory; +import com.google.common.collect.Lists; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.math.NumberUtils; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author Harryxzy + * @ClassName SalaryStatisticsPushDetailServiceImpl + * @date 2023/09/13 15:13 + * @description + */ +public class SalaryStatisticsPushDetailServiceImpl extends Service implements SalaryStatisticsPushDetailService { + + private salaryStatisticsPushDetailMapper getsalaryStatisticsPushDetailMapper() { + return MapperProxyFactory.getProxy(salaryStatisticsPushDetailMapper.class); + } + + @Override + public List listAll() { + return getsalaryStatisticsPushDetailMapper().listAll(); + } + + @Override + public List listSome(SalaryStatisticsPushDetailPO po) { + return getsalaryStatisticsPushDetailMapper().listSome(po); + } + + @Override + public SalaryStatisticsPushDetailPO getById(Long id) { + return getsalaryStatisticsPushDetailMapper().getById(id); + } + + @Override + public int insertIgnoreNull(SalaryStatisticsPushDetailPO po) { + return getsalaryStatisticsPushDetailMapper().insertIgnoreNull(po); + } + + @Override + public int update(SalaryStatisticsPushDetailPO po) { + return getsalaryStatisticsPushDetailMapper().update(po); + } + + @Override + public int updateIgnoreNull(SalaryStatisticsPushDetailPO po) { + return getsalaryStatisticsPushDetailMapper().updateIgnoreNull(po); + } + + @Override + public int delete(SalaryStatisticsPushDetailPO po) { + return getsalaryStatisticsPushDetailMapper().delete(po); + } + + /** + * 根据批次id查询 + * @param batchIds + */ + public List queryPushDetailPOByBatchIds(List batchIds) { + if (CollectionUtils.isEmpty(batchIds)) { + return Collections.emptyList(); + } + List> partition = Lists.partition(batchIds, 999); + List list = new ArrayList<>(); + partition.forEach(l -> { + list.addAll(getsalaryStatisticsPushDetailMapper().queryPushDetailPOByBatchId(l)); + }); + return list; + } + + /** + * 根据批次id、员工id查询 + * @param + */ + public List queryPushDetailPOByBatchIdAndEmpIds(Long batchId, List sharedBy) { + if (CollectionUtils.isEmpty(sharedBy) || ObjectUtils.isEmpty(batchId)) { + return Collections.emptyList(); + } + List> partition = Lists.partition(sharedBy, 999); + List list = new ArrayList<>(); + partition.forEach(l -> { + list.addAll(getsalaryStatisticsPushDetailMapper().queryPushDetailPOByBatchIdAndEmpIds(batchId, l)); + }); + return list; + } + + public List getSuccessPushDetailListByReceiver(Long uid) { + List detailList = listSome(SalaryStatisticsPushDetailPO.builder() + .creator(uid) + .pushStatus("true") + .deleteType(NumberUtils.INTEGER_ZERO) + .build()); + // 过滤已经撤回的 + return detailList.stream().filter(po -> !(Objects.equals(po.getRebackStatus(), "true"))).collect(Collectors.toList()); + } +} diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java new file mode 100644 index 000000000..a462b044d --- /dev/null +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java @@ -0,0 +1,755 @@ +package com.engine.salary.report.service.impl; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.common.BaseQueryParam; +import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.enums.sicategory.DeleteTypeEnum; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.report.SalaryStatisticsPushMapper; +import com.engine.salary.report.entity.dto.SalaryStatisticsPushDetail; +import com.engine.salary.report.entity.dto.SalaryStatisticsPushDetailFormDTO; +import com.engine.salary.report.entity.dto.SalaryStatisticsPushDetailTableDTO; +import com.engine.salary.report.entity.dto.SalaryStatisticsPushTableDTO; +import com.engine.salary.report.entity.param.SalaryStatisticsPushDetailParam; +import com.engine.salary.report.entity.param.SalaryStatisticsPushParam; +import com.engine.salary.report.entity.po.SalaryStatisticsPushDetailPO; +import com.engine.salary.report.entity.po.SalaryStatisticsPushPO; +import com.engine.salary.report.entity.po.SalaryStatisticsReportPO; +import com.engine.salary.report.service.SalaryStatisticsPushDetailService; +import com.engine.salary.report.service.SalaryStatisticsPushService; +import com.engine.salary.report.service.SalaryStatisticsReportService; +import com.engine.salary.report.util.ReportTimeUtil; +import com.engine.salary.service.SalaryEmployeeService; +import com.engine.salary.service.impl.SalaryEmployeeServiceImpl; +import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.MapperProxyFactory; +import com.engine.salary.util.page.PageInfo; +import com.engine.salary.util.page.SalaryPageUtil; +import com.google.common.collect.Lists; +import dm.jdbc.util.IdGenerator; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import weaver.hrm.User; + +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author Harryxzy + * @ClassName SalaryStatisticsPushServiceImpl + * @date 2023/09/11 10:15 + * @description 薪酬统计报表消息推送 + */ +public class SalaryStatisticsPushServiceImpl extends Service implements SalaryStatisticsPushService { + + private SalaryStatisticsPushMapper getSalaryStatisticsPushMapper() { + return MapperProxyFactory.getProxy(SalaryStatisticsPushMapper.class); + } + + private SalaryStatisticsPushDetailService getSalaryStatisticsPushDetailService(User user) { + return ServiceUtil.getService(SalaryStatisticsPushDetailServiceImpl.class, user); + } + + private SalaryEmployeeService getSalaryEmployeeService(User user) { + return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); + } + + private SalaryStatisticsReportService getSalaryStatisticsReportService(User user) { + return ServiceUtil.getService(SalaryStatisticsReportServiceImpl.class, user); + } + + @Override + public Map getPushForm() { + Map resultMap = new HashMap<>(); + // items + // 分享报表item + List> reportOptions = buildReportIdsOptions(Long.valueOf(user.getUID())); + resultMap.put("reportOptions", reportOptions); + // data + resultMap.putAll(formData(Long.valueOf(user.getUID()))); + return resultMap; + } + + + private Map formData(Long employeeId) { + Map data = new HashMap<>(); + SalaryStatisticsPushPO pushPO = getListByEmployeeId(employeeId); + data.put("pushTitle", pushPO.getPushTitle()); + data.put("mark", pushPO.getMark()); + if (pushPO.getRemind() == null) { + data.put("remind", 1); + } else { + data.put("remind", pushPO.getRemind()); + } + return data; + } + + private SalaryStatisticsPushPO getListByEmployeeId(Long uid) { + List list = getSalaryStatisticsPushMapper().listLatestRecordByCreator(uid); + if (CollectionUtils.isEmpty(list)) { + return SalaryStatisticsPushPO.builder().build(); + } + return list.get(0); + } + + + private List> buildReportIdsOptions(Long employeeId) { + List> reportIdsOptions = new ArrayList<>(); + List reportPOS = getSalaryStatisticsReportService(user).listAll(); + // 只能够分享创建人是本人的报表 + reportPOS.stream().filter(po -> + po.getCreator().compareTo(employeeId) == 0 + ).forEach( po -> { + Map option = new HashMap<>(); + option.put("id", po.getId()); + option.put("reportName", po.getReportName()); + reportIdsOptions.add(option); + }); + + return reportIdsOptions; + } + + @Override + public SalaryStatisticsPushDetail getPushDetail(SalaryStatisticsPushDetailParam param) { + SalaryStatisticsPushPO salaryStatisticsPushPO = getSalaryStatisticsPushMapper().getById(param.getId()); + if (Objects.isNull(salaryStatisticsPushPO)) { + throw new SalaryRunTimeException("该分享记录不存在"); + } + if (salaryStatisticsPushPO.getCreator().compareTo(Long.valueOf(user.getUID())) != 0) { + throw new SalaryRunTimeException("无权查看该分享记录"); + } + SalaryStatisticsPushDetail result = new SalaryStatisticsPushDetail(); + result.setDetailForm(buildDetailForm(salaryStatisticsPushPO)); + result.setDetailTable(buildDetailTable(param)); + return result; + } + + @Override + public void push(SalaryStatisticsPushParam param) { + // 生成分享链接中的id参数 + param.setId(createAndGetBatchId(param)); + sendMsg(param); + } + +// public void configSave(SalaryStatisticsPushParam param, String tenantkey, Long employeeId) { +// if (StringUtils.isNotEmpty(param.getConfig())) { +// CreateRuleEntity createRule = new CreateRuleEntity() +// .setName(SalaryI18nUtil.getI18nLabel(tenantkey, employeeId, 220428, "分享报表")) +// .setUser(new UserEntity(employeeId, tenantkey)) +// .setModule(MessageModule.HRSA) +// .setEvent(MessageEvent.REPORT_SHARING) +// .setBusinessId(param.getBusinessId().toString()) +// .setConfig(param.getConfig()); +// log.info("RuleRest.createRuleV2 -> config ====== {}", param.getConfig()); +// WeaResult weaResult = ruleRest.createRuleV2(createRule); +// SalaryAssert.isTrue(weaResult.isStatus(), SalaryI18nUtil.getI18nLabel(184008, "RPC接口创建规则失败")); +// } +// } + + @Override + public void addSharedPush(SalaryStatisticsPushParam param) { + SalaryStatisticsPushPO pushPO = getSalaryStatisticsPushMapper().getById(param.getId()); + Collection sharedBy = sharedByValid(param.getSharedBy(), param.getId()); + if (CollectionUtils.isEmpty(sharedBy)) { + return; + } + SalaryStatisticsPushParam pushParam = new SalaryStatisticsPushParam(); + pushParam.setReportIds(Arrays.asList(pushPO.getReportIds().split(","))); + pushParam.setPushTitle(pushPO.getPushTitle()); +// pushParam.setEmailAccountId(pushPO.getEmailAccountId()); +// pushParam.setEmailAdress(pushParam.getEmailAdress()); + pushParam.setSharedBy((List) sharedBy); + pushParam.setStartTime(pushPO.getStartTime()); + pushParam.setEndTime(pushPO.getEndTime()); +// pushParam.setPushChannel(Arrays.stream(pushPO.getPushChannel().split(",")).map(Integer::valueOf).collect(Collectors.toList())); + pushParam.setMark(pushPO.getMark()); + pushParam.setId(pushPO.getId()); + sendMsg(pushParam); + } + + public Collection sharedByValid(List sharedBy, Long batchId) { + List list = getSalaryStatisticsPushDetailService(user).queryPushDetailPOByBatchIdAndEmpIds(batchId, sharedBy); + List finalList = list; + // 获取需要分享或重新分享的人 + sharedBy = sharedBy.stream().filter(shareId -> { + List collect = finalList.stream().filter(po -> Objects.equals(po.getEmployeeId(), shareId)).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(collect)) { + return true; + } + boolean enabledSend = collect.stream().anyMatch(po -> Objects.equals(po.getPushStatus(), "true") && !Objects.equals(po.getRebackStatus(), "true")); + return !enabledSend; + + }).collect(Collectors.toList()); + return sharedBy; + } + + public void sendMsg(SalaryStatisticsPushParam param) { + // 获取被分享人 + List receivers = getSalaryEmployeeService(user).getEmployeeByIds(param.getSharedBy()); + // 发送消息 + receivers.forEach(receiver -> { + // 发送消息... + // 发送成功 + doSuccess(receiver, param); + }); + } + + +// @Override +// public void rePush(Long id, Long employeeId, String tenantKey) { +// SalaryStatisticsPushDetailPO detailPO = salaryStatisticsPushDetailMapper.selectById(id); +// SalaryStatisticsPushPO pushPO = salaryStatisticsPushMapper.selectById(detailPO.getBatchId()); +// SalaryStatisticsPushParam param = new SalaryStatisticsPushParam(); +// param.setReportIds(Arrays.asList(pushPO.getReportIds().split(","))); +// param.setPushTitle(pushPO.getPushTitle()); +// param.setEmailAdress(pushPO.getEmailAccount()); +// param.setEmailAccountId(pushPO.getEmailAccountId()); +// param.setSharedBy(Collections.singletonList(detailPO.getEmployeeId())); +// param.setStartTime(pushPO.getStartTime()); +// param.setEndTime(pushPO.getEndTime()); +// param.setPushChannel(Arrays.stream(pushPO.getPushChannel().split(",")).map(Integer::valueOf).collect(Collectors.toList())); +// param.setMark(pushPO.getMark()); +// param.setId(pushPO.getId()); +// sendMsg(param, employeeId, tenantKey); +// } + + @Override + public void cancel(Long id) { + SalaryStatisticsPushDetailPO detailPO = getSalaryStatisticsPushDetailService(user).getById(id); + cancelSingle(detailPO); + } + + public void cancelSingle(SalaryStatisticsPushDetailPO detailPO) { + // 撤回消息... + // 撤回分享记录 + doCancelResult(detailPO); + } + + @Override + public void cancelAll(Long id) { + // 根据分享批次id,获取所有的分享明细 + List salaryStatisticsPushDetailPOS = getSalaryStatisticsPushDetailService(user).queryPushDetailPOByBatchIds(Collections.singletonList(id)); + salaryStatisticsPushDetailPOS.forEach(po -> cancelSingle(po)); + } + +// public List getSalatyPushDetailPOSBybatchId(Long batchId, String tenantKey) { +// return new LambdaQueryChainWrapper<>(salaryStatisticsPushDetailMapper) +// .eq(SalaryStatisticsPushDetailPO::getTenantKey, tenantKey) +// .eq(SalaryStatisticsPushDetailPO::getBatchId, batchId) +// .eq(SalaryStatisticsPushDetailPO::getDeleteType, DeleteTypeEnum.NOT_DELETED.getValue()) +// .isNull(SalaryStatisticsPushDetailPO::getRebackStatus) +// .list(); +// } +// +// @Override +// public SalaryStatisticsPushPO getById(Long id, String tenantKey) { +// return salaryStatisticsPushMapper.selectById(id); +// } +// +// @Override +// public List getPushDetailsById(Long batchId, String tenantKey) { +// return new LambdaQueryChainWrapper<>(salaryStatisticsPushDetailMapper) +// .eq(SalaryStatisticsPushDetailPO::getTenantKey, tenantKey) +// .eq(SalaryStatisticsPushDetailPO::getDeleteType, DeleteTypeEnum.NOT_DELETED.getValue()) +// .eq(SalaryStatisticsPushDetailPO::getBatchId, batchId) +// .list(); +// } + + + @Override + public void updateReportViewStatus(List batchId, Long uid) { + List salaryStatisticsPushDetailPOS = getSalaryStatisticsPushDetailService(user).queryPushDetailPOByBatchIds(batchId); + salaryStatisticsPushDetailPOS.stream().filter(po -> Objects.equals(po.getPushStatus(), "true") && po.getRebackStatus() == null && Objects.equals(uid, po.getEmployeeId())) + .collect(Collectors.toList()).forEach(e -> { + e.setViewStatus("true"); + e.setUpdateTime(new Date()); + getSalaryStatisticsPushDetailService(user).updateIgnoreNull(e); + }); + } + +// @Override +// public void sendViewedMsg(Long batchId, Long reportId, Long employeeId, String tenantKey) { +// SalaryStatisticsPushPO pushPO = salaryStatisticsPushMapper.selectById(batchId); +// if (!Objects.equals(1, pushPO.getRemind())) { +// return; +// } +// List salaryStatisticsPushDetailPOS = queryPushDetailPOByBatchId(batchId, tenantKey); +// List detailPOList = salaryStatisticsPushDetailPOS.stream().filter(po -> Objects.equals(po.getPushStatus(), "true") && po.getRebackStatus() == null && Objects.equals(employeeId, po.getEmployeeId())).collect(Collectors.toList()); +// if (CollectionUtils.isEmpty(detailPOList)) { +// return; +// } +// SalaryStatisticsPushParam param = new SalaryStatisticsPushParam(); +// param.setPushTitle(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 227925, "报表已查看提醒")); +// param.setSharedBy(Collections.singletonList(pushPO.getCreator())); +// param.setPushChannel(Collections.singletonList(MessageChannelEnum.IM.getType())); +// param.setMark(buildViewMark(pushPO, detailPOList, employeeId, tenantKey)); +// SendMessageEntity entity = buildSendMessage(param, employeeId, tenantKey); +// entity.getEntity().setPcUrl(""); +// entity.getEntity().setH5Url(""); +// entity.getEntity().setPcLinkeType(0); +// entity.getEntity().setH5LinkeType(0); +// List receivers = buildReceivers(param, tenantKey); +// // 发送消息 +// receivers.forEach(receiver -> { +// entity.setReceivers(Collections.singletonList(receiver)); +// try { +// asyncSystemMessageRest.sendMsg(entity); +// } catch (Exception e) { +// log.error("查看消息发送失败", e); +// } +// }); +// } +// +// public String buildViewMark(SalaryStatisticsPushPO pushPO, List detailPOList, Long employeeId, String tenantkey) { +// SimpleEmployee employee = hrmCommonEmployeeService.getById(employeeId); +// if (employee == null) { +// return SalaryI18nUtil.getI18nLabel(tenantkey, employeeId, 227926, "消息创建人已不存在"); +// } +// return employee.getUsername() + +// SalaryI18nUtil.getI18nLabel(tenantkey, employeeId, 227927, "已查看您分享的报表。") + +// SalaryI18nUtil.getI18nLabel(tenantkey, employeeId, 227928, "分享主题:") + +// pushPO.getPushTitle() + "," + +// SalaryI18nUtil.getI18nLabel(tenantkey, employeeId, 233590, "分享时间:") + +// detailPOList.get(0).getPushTime() + +// "。"; +// } +// + + public void doCancelResult(SalaryStatisticsPushDetailPO detailPO) { + // 判断撤回消息是否成功... + // 消息撤回成功的话撤回分享记录 + detailPO.setRebackStatus("true"); + detailPO.setRebackTime(ReportTimeUtil.getFormatLocalDateTime(LocalDateTime.now())); + getSalaryStatisticsPushDetailService(user).updateIgnoreNull(detailPO); + } + + + +// public CancleMessageEntity buildCancelMessageEntity(SalaryStatisticsPushDetailPO po, Long employeeId, String tenantKey) { +// SalaryStatisticsPushPO pushPO = salaryStatisticsPushMapper.selectById(po.getBatchId()); +// CancleMessageEntity cancleMessageEntity = new CancleMessageEntity(); +// cancleMessageEntity.setMsgId(po.getMsgId()); +// cancleMessageEntity.setModule(MessageModule.HRSA); +// cancleMessageEntity.setEvent(MessageEvent.REPORT_SHARING); +// cancleMessageEntity.setText(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 221630, "此消息已收回,如有问题,请联系管理员")); +// Entity entity = new Entity(); +// entity.setId(String.valueOf(IdGenerator.generate())); +// entity.setModule(EntityType.hrmsalary.name()); +// entity.setName(pushPO.getPushTitle()); +// cancleMessageEntity.setEntity(entity); +// UserEntity user = new UserEntity(employeeId, tenantKey); +// SimpleEmployee employeeById = hrmCommonEmployeeService.getEmployeeById(employeeId, tenantKey); +// user.setName(employeeById.getUsername()); +// cancleMessageEntity.setOperator(user); +// return cancleMessageEntity; +// } + + public void doSuccess(DataCollectionEmployee receiver, SalaryStatisticsPushParam param) { + List pushDetailByBatchIdAndEmpId = getSalaryStatisticsPushDetailService(user).listSome(SalaryStatisticsPushDetailPO.builder() + .batchId(param.getId()) + .employeeId(receiver.getEmployeeId()) + .build()); + Date now = new Date(); + if (CollectionUtils.isEmpty(pushDetailByBatchIdAndEmpId)) { + SalaryStatisticsPushDetailPO detailPO = SalaryStatisticsPushDetailPO.builder() + .id(IdGenerator.generate()) + .batchId(param.getId()) +// .msgId(result.getData()) + .pushStatus("true") + .pushTime(ReportTimeUtil.getFormatLocalDateTime(LocalDateTime.now())) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .employeeId(receiver.getEmployeeId()) + .updateTime(now) + .creator(Long.valueOf(user.getUID())) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + getSalaryStatisticsPushDetailService(user).insertIgnoreNull(detailPO); + } else { + SalaryStatisticsPushDetailPO PO = pushDetailByBatchIdAndEmpId.get(0); + PO.setPushStatus("true"); + PO.setRebackStatus(""); + PO.setRebackTime(""); +// PO.setMsgId(result.getData()); + PO.setPushTime(ReportTimeUtil.getFormatLocalDateTime(LocalDateTime.now())); + PO.setUpdateTime(now); + PO.setCreator(Long.valueOf(user.getUID())); + getSalaryStatisticsPushDetailService(user).updateIgnoreNull(PO); + } + } + +// public void delBatchId(Long id) { +// SalaryStatisticsPushPO pushPO = salaryStatisticsPushMapper.selectById(id); +// pushPO.setDeleteType(DeleteTypeEnum.PHYSICAL_DELETED.getValue()); +// salaryStatisticsPushMapper.updateById(pushPO); +// } +// +// public void paramValid(SalaryStatisticsPushParam param, Long employeeId, String tenantKey) { +// channelCheck(param, employeeId, tenantKey); +// emileCheck(param, employeeId, tenantKey); +// bridgeCheck(param, employeeId, tenantKey); +// } + + public Long createAndGetBatchId(SalaryStatisticsPushParam param) { + Date now = new Date(); + SalaryStatisticsPushPO pushPO = SalaryStatisticsPushPO.builder() + .id(IdGenerator.generate()) + .creator(Long.valueOf(user.getUID())) + .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) + .createTime(now) + .updateTime(now) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) +// .pushChannel(buildChannelString(param)) + .startTime(param.getStartTime()) + .endTime(param.getEndTime()) + .remind(param.getRemind()) +// .emailAccount(param.getEmailAdress()) +// .emailAccountId(param.getEmailAccountId()) + .mark(param.getMark()) +// .pushTitle(param.getPushTitle()) + .reportIds(String.join(",", param.getReportIds())) + .build(); + getSalaryStatisticsPushMapper().insertIgnoreNull(pushPO); + return pushPO.getId(); + } + +// public String buildChannelString(SalaryStatisticsPushParam param) { +// Set channelEnums = buildChannel(param); +// List channelType = channelEnums.stream().map(e -> String.valueOf(e.getType())).collect(Collectors.toList()); +// return String.join(",", channelType); +// } +// +// +// public void channelCheck(SalaryStatisticsPushParam param, Long employeeId, String tenantKey) { +// if (CollectionUtils.isEmpty(param.getPushChannel())) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 221582, "至少有一个发送通道")); +// } +// } +// +// public void emileCheck(SalaryStatisticsPushParam param, Long employeeId, String tenantKey) { +// if (param.getPushChannel().contains(MessageChannelEnum.EMAIL.getType())) { +// if (!isEnableEmail(tenantKey)) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 221580, "邮件模块未采购,不可使用邮件通道!")); +// } +// // 接收者邮箱校验 +// List employeeByIds = hrmCommonEmployeeService.getEmployeeByIds(param.getSharedBy(), tenantKey); +// List usernameList = new ArrayList<>(); +// employeeByIds.forEach(employee -> { +// if (StringUtils.isEmpty(employee.getEmail())) { +// usernameList.add(employee.getUsername()); +// } +// }); +// if (CollectionUtils.isNotEmpty(usernameList)) { +// throw new SalaryRunTimeException(String.join(",", usernameList) + SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 221578, "没有可用邮箱,请先配置再发送!")); +// } +// if (StringUtils.isEmpty(param.getEmailAdress())) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 224278, "发送邮箱不可为空")); +// } +// } +// } +// +// public void bridgeCheck(SalaryStatisticsPushParam param, Long employeeId, String tenantKey) { +// if (param.getPushChannel().contains(MessageChannelEnum.CLOUD_BRIDGE.getType()) && !isEnableEbridge(tenantKey)) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 221581, "云桥模块未采购,不可使用云桥通道!")); +// } +// } +// +// public SendMessageEntity buildSendMessage(SalaryStatisticsPushParam param, Long employeeId, String tenantKey) { +// // 域名 +// param.setDomain(weaverConfigUtils.getValueFromDataMap("primary.domain")); +// SendMessageEntity entity = new SendMessageEntity(); +// // 模块 +// entity.setModule(MessageModule.HRSA); +// // 消息事件 +// entity.setEvent(MessageEvent.REPORT_SHARING); +// // 消息通道 +// entity.setChannels(buildChannel(param)); +// // 主题 +// entity.setText(param.getPushTitle()); +// // 发送者信息 +// entity.setSender(buildSendEntity(employeeId, tenantKey)); +// // 接收者 +// entity.setReceivers(buildReceivers(param, tenantKey)); +// // emile消息体 +// entity.setEmailInfo(buildEmailEntity(param, employeeId, tenantKey)); +// // im消息体 +// entity.setEntity(buildImEntity(param)); +// // 消息内容 im和bridge公用 +// entity.setText(param.getMark()); +// // 云桥 +// entity.setTitle(param.getPushTitle()); +// return entity; +// } +// +// public UserEntity buildSendEntity(Long employeeId, String tenantKey) { +// SimpleEmployee employeeById = hrmCommonEmployeeService.getEmployeeById(employeeId, tenantKey); +// UserEntity userEntity = new UserEntity(); +// userEntity.setEmployeeId(employeeId); +// userEntity.setTenantKey(tenantKey); +// userEntity.setName(employeeById.getUsername()); +// return userEntity; +// } +// +// +// public List buildReceivers(SalaryStatisticsPushParam param, String tenantKey) { +// List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(param.getSharedBy(), tenantKey); +// return simpleEmployeeList.stream().map(employee -> { +// UserEntity userEntity = new UserEntity(); +// userEntity.setEmployeeId(employee.getEmployeeId()); +// userEntity.setTenantKey(tenantKey); +// userEntity.setEmail(employee.getEmail()); +// return userEntity; +// }).collect(Collectors.toList()); +// } +// +// public Entity buildImEntity(SalaryStatisticsPushParam param) { +// Entity imEntity = new Entity(); +// imEntity.setId(IDGenerator.generateId()); +// imEntity.setName(param.getPushTitle()); +// imEntity.setModule("hrmsalary"); +// imEntity.setPcLinkeType(2); +// imEntity.setH5LinkeType(2); +// imEntity.setPcUrl(buildPcUrl(param)); +// imEntity.setH5Url(buildPcUrl(param)); +// return imEntity; +// } +// +// public String buildPcUrl(SalaryStatisticsPushParam param) { +// return param.getDomain() + String.format("/sp/ebdpage/view/828107636586323968?id=%s&share=true", param.getId()); +// } +// +// public EmailEntity buildEmailEntity(SalaryStatisticsPushParam param, Long employeeId, String tenantKey) { +// EmailEntity emailEntity = new EmailEntity(); +// if (param.getEmailAccountId() == null) { +// return emailEntity; +// } +// emailEntity.setEmailSubject(param.getPushTitle()); +// emailEntity.setEmailContent(buildEmailContent(param)); +// emailEntity.setMailUserAccountId(param.getEmailAccountId()); +// return emailEntity; +// } +// +// public String buildEmailContent(SalaryStatisticsPushParam param) { +// String emailContent = "
" + +// "
" + +// param.getMark() + +// "
" + +// "" + buildPcUrl(param) + "" + +// "
"; +// return emailContent; +// } +// +// public Set buildChannel(SalaryStatisticsPushParam param) { +// Set channelEnums = new HashSet<>(); +// if (param.getPushChannel().contains(MessageChannelEnum.EMAIL.getType())) { +// channelEnums.add(MessageChannelEnum.EMAIL); +// } +// if (param.getPushChannel().contains(MessageChannelEnum.CLOUD_BRIDGE.getType())) { +// channelEnums.add(MessageChannelEnum.CLOUD_BRIDGE); +// } +// if (param.getPushChannel().contains(MessageChannelEnum.IM.getType())) { +// channelEnums.add(MessageChannelEnum.IM); +// } +// return channelEnums; +// } +// +// public Boolean isEnableEmail(String tenantKey) { +//// boolean isPayModule = remoteTenantService.isPayModule(tenantKey, EntityType.email.name()); +//// boolean checkDisplayModule = CollectionUtils.emptyIfNull(baseEnvInfoService.listDisplayModules(tenantKey)).stream().anyMatch(m -> m.equals(EntityType.email.name())); +//// return isPayModule && checkDisplayModule; +// return CollectionUtils.emptyIfNull(baseEnvInfoService.listDisplayModules(tenantKey)).stream().anyMatch(m -> m.equals(EntityType.email.name())); +// } +// +// public Boolean isEnableEbridge(String tenantKey) { +// return CollectionUtils.emptyIfNull(baseEnvInfoService.listDisplayModules(tenantKey)).stream().anyMatch(m -> m.equals("wechatEnterprise")); +// } + + public SalaryStatisticsPushDetailFormDTO buildDetailForm(SalaryStatisticsPushPO salaryStatisticsPushPO) { + List reportIds = Arrays.stream(salaryStatisticsPushPO.getReportIds().split(",")).map(Long::valueOf).collect(Collectors.toList()); + List reportNames = getSalaryStatisticsReportService(user).getByIds(reportIds).stream().map(SalaryStatisticsReportPO::getReportName).collect(Collectors.toList()); + SalaryStatisticsPushDetailFormDTO formDTO = SalaryStatisticsPushDetailFormDTO.builder() + .remark(salaryStatisticsPushPO.getMark()) + .effectiveTime(salaryStatisticsPushPO.getStartTime() + "-" + salaryStatisticsPushPO.getEndTime()) + .reportName(String.join("、", reportNames)) + .build(); + return formDTO; + } + + public PageInfo buildDetailTable(SalaryStatisticsPushDetailParam param) { + List salaryStatisticsPushDetailPOS = getSalaryStatisticsPushDetailService(user).queryPushDetailPOByBatchIds(Arrays.asList(param.getId())); + PageInfo dtoPage = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), SalaryStatisticsPushDetailTableDTO.class); + List records = salaryStatisticsPushDetailPOS.stream().map(po -> { + return SalaryStatisticsPushDetailTableDTO.builder() + .id(po.getId()) + .pushStatus(buildStatus(po.getPushStatus())) + .pushTime(po.getPushTime()) + .rebackStatus(buildStatus(po.getRebackStatus())) + .viewStatus(buildViewStatus(po.getViewStatus())) + .rebackTime(po.getRebackTime()) + .userName(buildUserName(po.getEmployeeId())) + .employeeId(po.getEmployeeId()) + .build(); + }).collect(Collectors.toList()); + if (StringUtils.isNotEmpty(param.getUserNameSearch())) { + records = records.stream().filter(record -> record.getUserName().contains(param.getUserNameSearch())).collect(Collectors.toList()); + } + dtoPage.setList(records); + dtoPage.setTotal(records.size()); + return dtoPage; + } + + public String buildUserName(Long employeeId) { + DataCollectionEmployee employeeById = getSalaryEmployeeService(user).getEmployeeById(employeeId); + if (employeeById != null) { + return employeeById.getUsername(); + } + return ""; + } + + public String buildViewStatus(String status) { + if (Objects.equals(status, "true")) { + return SalaryI18nUtil.getI18nLabel(0, "已查看"); + } else { + return SalaryI18nUtil.getI18nLabel(0, "未查看"); + } + } + + public String buildStatus(String status) { + if (StringUtils.isEmpty(status)) { + return ""; + } + if (Objects.equals("true", status)) { + return SalaryI18nUtil.getI18nLabel(0, "成功"); + } + if (Objects.equals("false", status)) { + return SalaryI18nUtil.getI18nLabel(0, "失败"); + } + return ""; + } + + @Override + public PageInfo getPushTable(BaseQueryParam param) { + List salaryStatisticsPushPOS = getSalaryStatisticsPushMapper().listSome(SalaryStatisticsPushPO.builder().creator(Long.valueOf(user.getUID())).build()); + salaryStatisticsPushPOS = SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), salaryStatisticsPushPOS); + PageInfo dtoPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), SalaryStatisticsPushTableDTO.class); + if (CollectionUtils.isNotEmpty(salaryStatisticsPushPOS)) { + // 获取报表名称 key:报表id; value:报表名称 + List recordIds = salaryStatisticsPushPOS.stream().map(po -> Arrays.asList(StringUtils.split(po.getReportIds(), ","))) + .flatMap(Collection::stream).distinct().map(Long::valueOf).collect(Collectors.toList()); + Map statisticsNameMap = SalaryEntityUtil.convert2Map(getSalaryStatisticsReportService(user).getByIds(recordIds), SalaryStatisticsReportPO::getId, SalaryStatisticsReportPO::getReportName); + + // 获取报表分享明细 key:批次id; value:分享明细列表 + List batchIds = salaryStatisticsPushPOS.stream().map(po -> Long.valueOf(po.getId())).collect(Collectors.toList()); + Map> groupByBatchId; + if (CollectionUtils.isNotEmpty(batchIds)) { + groupByBatchId = SalaryEntityUtil.group2Map( + getSalaryStatisticsPushDetailService(user).queryPushDetailPOByBatchIds(batchIds), + SalaryStatisticsPushDetailPO::getBatchId); + } else { + groupByBatchId = Collections.emptyMap(); + } + List dtoList = salaryStatisticsPushPOS.stream().map(po -> { + return SalaryStatisticsPushTableDTO.builder() + .reportName(buildReportName(po.getReportIds(), statisticsNameMap)) + .effectiveTime(StringUtils.isEmpty(po.getStartTime()) ? "" : po.getStartTime() + + "——" + (StringUtils.isEmpty(po.getEndTime()) ? "" : po.getEndTime())) + .id(po.getId()) + .successPush(buildSuccessPush(groupByBatchId.get(po.getId()))) + .sharedView(buildSharedView(groupByBatchId.get(po.getId()))) + .build(); + }).collect(Collectors.toList()); + dtoPageInfo.setList(dtoList); + dtoPageInfo.setTotal(dtoList.size()); + } + return dtoPageInfo; + } + + public String buildSharedView(List list) { + List successEmpIds = list.stream().filter(po -> Objects.equals(po.getPushStatus(), "true") && !(Objects.equals(po.getRebackStatus(), "true"))).map(SalaryStatisticsPushDetailPO::getEmployeeId).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(successEmpIds)) { + return "0/0"; + } + List viewEmpIds = list.stream().filter(po -> Objects.equals(po.getViewStatus(), "true")).map(SalaryStatisticsPushDetailPO::getEmployeeId).collect(Collectors.toList()); + return viewEmpIds.size() + "/" + successEmpIds.size(); + } + + public String buildSuccessPush(List list) { + List employeeByIds = getSalaryEmployeeService(user).getEmployeeByIds(list.stream().filter(po -> Objects.equals(po.getPushStatus(), "true") && !(Objects.equals(po.getRebackStatus(), "true"))).map(SalaryStatisticsPushDetailPO::getEmployeeId).collect(Collectors.toList())); + Set employeeName = employeeByIds.stream().map(DataCollectionEmployee::getUsername).collect(Collectors.toSet()); + return String.join("、", employeeName); + } + + public String buildReportName(String reportIds, Map statisticsNameMap) { + List ids = Arrays.asList(reportIds.split(",")); + List reportName = Lists.newArrayList(); + ids.forEach(id -> { + String name = statisticsNameMap.get(Long.valueOf(id)); + if (name != null) { + reportName.add(name); + } + + }); + return String.join("、", reportName); + } + + @Override + public List getSuccessPushListByReceiver(Long uid) { + List batchIds = getSalaryStatisticsPushDetailService(user).getSuccessPushDetailListByReceiver(uid) + .stream().map(SalaryStatisticsPushDetailPO::getBatchId).collect(Collectors.toList()); + // 根据batchId获取分享记录 + if (CollectionUtils.isEmpty(batchIds)) { + return Collections.emptyList(); + } + List pushList = Collections.emptyList(); + List> partition = Lists.partition((List)batchIds, 1000); + partition.forEach(ids -> { + pushList.addAll(getSalaryStatisticsPushMapper().listSome(SalaryStatisticsPushPO.builder().ids(ids).build())); + }); + return filterReportByTime(pushList); + } + + @Override + public List getPushListByReportIdAndIds(Long reportId, List ids) { + List pushList = getSalaryStatisticsPushMapper().listListReportIdAndIds(reportId, ids); + pushList = pushList.stream().filter( push -> { + return Arrays.asList(push.getReportIds().split(",")).contains(reportId); + }).collect(Collectors.toList()); + return pushList; + } + + List filterReportByTime(List pushList){ + // 报表分享时间校验 + String formatLocalDateTime = SalaryDateUtil.getFormatLocalDate(LocalDateTime.now()); + List result = pushList.stream().filter(pushPO -> { + if (pushPO.getStartTime().compareTo(formatLocalDateTime) > 0 || (StringUtils.isNotEmpty(pushPO.getEndTime()) && pushPO.getEndTime().compareTo(formatLocalDateTime) < 0)) { + return false; + } + return true; + }).collect(Collectors.toList()); + return result; + } + + @Override + public List shareReportValid(Long reportId) { + // 获取该员工所有被分享成功的明细 + List successPushDetailList = getSalaryStatisticsPushDetailService(user).getSuccessPushDetailListByReceiver(Long.valueOf(user.getUID())); + // 根据报表id,分享批次id查询分享批次信息 + List batchIds = successPushDetailList.stream().map(SalaryStatisticsPushDetailPO::getBatchId).collect(Collectors.toList()); + List pushList= getPushListByReportIdAndIds(reportId,batchIds); + if (CollectionUtils.isEmpty(pushList)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"暂无权限查看该报表")); + } + // 校验是否在分享的有效时间内 + pushList = filterReportByTime(pushList); + if (CollectionUtils.isEmpty(pushList)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"该报表的分享不在有效期内,无法查看")); + } + return pushList; + } +} + + diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index d9ab89660..715d9306c 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -132,11 +132,29 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return getSalaryStatisticsReportMapper().listSome(SalaryStatisticsReportPO.builder().build()); } + @Override + public List listByCreator(Long uid) { + Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); + if (needAuth) { + return getSalaryStatisticsReportMapper().listSome(SalaryStatisticsReportPO.builder().creator(uid).build()); + } + + return getSalaryStatisticsReportMapper().listSome(SalaryStatisticsReportPO.builder().build()); + } + @Override public SalaryStatisticsReportPO getById(Long id) { return getSalaryStatisticsReportMapper().getById(id); } + @Override + public List getByIds(List ids) { + if (CollectionUtils.isEmpty(ids)) { + return Collections.emptyList(); + } + return getSalaryStatisticsReportMapper().listSome(SalaryStatisticsReportPO.builder().ids(ids).build()); + } + /** * 根据名称模糊查询 * diff --git a/src/com/engine/salary/report/web/SalaryStatisticsPushController.java b/src/com/engine/salary/report/web/SalaryStatisticsPushController.java new file mode 100644 index 000000000..116bc91cd --- /dev/null +++ b/src/com/engine/salary/report/web/SalaryStatisticsPushController.java @@ -0,0 +1,143 @@ +package com.engine.salary.report.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.salary.common.BaseQueryParam; +import com.engine.salary.report.entity.dto.SalaryStatisticsPushDetail; +import com.engine.salary.report.entity.dto.SalaryStatisticsPushTableDTO; +import com.engine.salary.report.entity.param.SalaryStatisticsPushDetailParam; +import com.engine.salary.report.entity.param.SalaryStatisticsPushParam; +import com.engine.salary.report.service.SalaryStatisticsPushService; +import com.engine.salary.report.service.impl.SalaryStatisticsPushServiceImpl; +import com.engine.salary.util.ResponseResult; +import com.engine.salary.util.page.PageInfo; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.Map; + +/** + * @author Harryxzy + * @ClassName SalaryStatisticsPushController + * @date 2023/09/11 10:08 + * @description 薪酬统计报表消息推送 + */ +public class SalaryStatisticsPushController { + + + private SalaryStatisticsPushService getSalaryStatisticsPushService(User user) { + return ServiceUtil.getService(SalaryStatisticsPushServiceImpl.class, user); + } + + + /** + * 获取发送消息form + * + * @return obj + */ + @GET + @Path("/getForm") + @Produces(MediaType.APPLICATION_JSON) + public String getPushForm(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryStatisticsPushService(user)::getPushForm); + } + + /** + * 获取分享记录列表 + * + * @return obj + */ + @POST + @Path("/getTable") + @Produces(MediaType.APPLICATION_JSON) + public String getPushTable(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody BaseQueryParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryStatisticsPushService(user)::getPushTable, param); + } + + /** + * 获取发送消息记录详情 + * + * @return obj + */ + @POST + @Path("/getDetail") + @Produces(MediaType.APPLICATION_JSON) + public String getPushDetail(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsPushDetailParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryStatisticsPushService(user)::getPushDetail, param); + } + + + /** + * 分享报表 + * + * @return obj + */ + @POST + @Path("/sendMsg") + @Produces(MediaType.APPLICATION_JSON) + public String push(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsPushParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryStatisticsPushService(user)::push, param); + } + + /** + * 追加分享人发送消息 + * + * @return obj + */ + @POST + @Path("/addSharedSendMsg") + @Produces(MediaType.APPLICATION_JSON) + public String addSharePush(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsPushParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryStatisticsPushService(user)::addSharedPush, param); + } + +// /** +// * 发送消息 +// * +// * @return obj +// */ +// @GetMapping("/reSendMsg") +// @ApiOperation("重新发送消息") +// @WeaPermission(publicPermission = true) +// public WeaResult push(@RequestParam Long id) { +// salaryStatisticsPushService.rePush(id, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey()); +// return WeaResult.success(""); +// } + + /** + * 撤回消息 + * + * @return obj + */ + @GET + @Path("/cancel") + @Produces(MediaType.APPLICATION_JSON) + public String cancel(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam("id") Long id) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryStatisticsPushService(user)::cancel, id); + } + + /** + * 撤回全部消息 + * + * @return obj + */ + @GET + @Path("/cancelAll") + @Produces(MediaType.APPLICATION_JSON) + public String cancelAll(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam("id") Long id) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryStatisticsPushService(user)::cancelAll, id); + } + +} diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index d86adfee1..500ffabb9 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -15,17 +15,9 @@ import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.report.common.constant.SalaryConstant; import com.engine.salary.report.entity.bo.SalaryStatisticsReportBO; import com.engine.salary.report.entity.param.*; -import com.engine.salary.report.entity.po.SalaryStatisticsDimensionPO; -import com.engine.salary.report.entity.po.SalaryStatisticsItemPO; -import com.engine.salary.report.entity.po.SalaryStatisticsReportPO; -import com.engine.salary.report.service.SalaryStatisticsDimensionService; -import com.engine.salary.report.service.SalaryStatisticsItemService; -import com.engine.salary.report.service.SalaryStatisticsReportService; -import com.engine.salary.report.service.SubTableExportService; -import com.engine.salary.report.service.impl.SalaryStatisticsDimensionServiceImpl; -import com.engine.salary.report.service.impl.SalaryStatisticsItemServiceImpl; -import com.engine.salary.report.service.impl.SalaryStatisticsReportServiceImpl; -import com.engine.salary.report.service.impl.SubTableExportServiceImpl; +import com.engine.salary.report.entity.po.*; +import com.engine.salary.report.service.*; +import com.engine.salary.report.service.impl.*; import com.engine.salary.service.SalaryAcctEmployeeService; import com.engine.salary.service.SalaryAcctResultService; import com.engine.salary.service.SalaryCacheService; @@ -95,6 +87,15 @@ public class SalaryStatisticsReportWrapper extends Service { return ServiceUtil.getService(SalaryCacheServiceImpl.class, user); } + private SalaryStatisticsPushService getSalaryStatisticsPushService(User user) { + return ServiceUtil.getService(SalaryStatisticsPushServiceImpl.class, user); + } + + private SalaryStatisticsPushDetailService getSalaryStatisticsPushDetailService(User user) { + return ServiceUtil.getService(SalaryStatisticsPushDetailServiceImpl.class, user); + } + + /** * 报表列表 * @@ -102,10 +103,18 @@ public class SalaryStatisticsReportWrapper extends Service { * @return */ public List> list(SalaryStatisticsReportQueryParam queryParam) { + Long uid = Long.valueOf(user.getUID()); // 初始化 - getSalaryStatisticsDimensionService(user).init((long) user.getUID()); + getSalaryStatisticsDimensionService(user).init(uid); + + // 所有人能够看到自己创建的报表 + List reportList = getSalaryStatisticsReportService(user).listByCreator(uid); + // 获取所有没有撤回没有过期的报表ID(不包含过期失效的) + List pushList = getSalaryStatisticsPushService(user).getSuccessPushListByReceiver(uid); + List sharedReportIds = pushList.stream().map(po -> Arrays.asList(StringUtils.split(po.getReportIds(), ","))) + .flatMap(Collection::stream).distinct().map(Long::valueOf).collect(Collectors.toList()); + reportList.addAll(getSalaryStatisticsReportService(user).getByIds(sharedReportIds)); - List reportList = getSalaryStatisticsReportService(user).list(); if (StringUtils.isNotEmpty(queryParam.getReportName())) { reportList = reportList.stream().filter(rp -> rp.getReportName().contains(queryParam.getReportName())).collect(Collectors.toList()); } @@ -120,6 +129,7 @@ public class SalaryStatisticsReportWrapper extends Service { List dimNames = Arrays.stream(po.getDimension().split(",")).map(dim -> Optional.ofNullable(salaryStatisticsDimensionMap.get(dim)).orElse("")).collect(Collectors.toList()); temp.put("dimension", StringUtils.join(dimNames, ",")); temp.put("dimensionId", po.getDimension()); + temp.put("isShare", sharedReportIds.contains(po.getId())); result.add(temp); }); return result; @@ -244,6 +254,15 @@ public class SalaryStatisticsReportWrapper extends Service { * @return */ public Map getData(SalaryStatisticsReportDataQueryParam param) { + if (param.getShare()) { + // 是被分享的报表 + Long uid = Long.valueOf(user.getUID()); + // 校验查看权限,获取有效的分享记录 + List pushList = getSalaryStatisticsPushService(user).shareReportValid(param.getId()); + List batchIds = pushList.stream().map(SalaryStatisticsPushPO::getId).collect(Collectors.toList()); + getSalaryStatisticsPushService(user).updateReportViewStatus(batchIds, uid); +// salaryStatisticsPushService.sendViewedMsg(param.getBatchId(), param.getId(), employeeId, tenantKey); + } Long id = param.getId(); if (id == null || param.getDimensionId() == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); From c95098a22bbd958fdbd08013a93ae3abb58b12db Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 18 Sep 2023 19:14:06 +0800 Subject: [PATCH 17/37] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=85=B1=E4=BA=ABfix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/service/impl/SalaryStatisticsPushServiceImpl.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java index a462b044d..4ab08208f 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java @@ -32,6 +32,7 @@ import com.engine.salary.util.page.SalaryPageUtil; import com.google.common.collect.Lists; import dm.jdbc.util.IdGenerator; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import weaver.hrm.User; @@ -221,6 +222,9 @@ public class SalaryStatisticsPushServiceImpl extends Service implements SalarySt @Override public void cancel(Long id) { SalaryStatisticsPushDetailPO detailPO = getSalaryStatisticsPushDetailService(user).getById(id); + if (ObjectUtils.isEmpty(detailPO)) { + throw new SalaryRunTimeException("该明细不存在"); + } cancelSingle(detailPO); } From d9c56a0da49352a7105ddcd7d33d446c4f56d875 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 19 Sep 2023 11:24:41 +0800 Subject: [PATCH 18/37] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dswitchs=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E6=95=B0=E6=8D=AE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../formlua/func/logic/LogicServiceImpl.java | 864 +++++++++--------- 1 file changed, 433 insertions(+), 431 deletions(-) diff --git a/src/com/engine/salary/formlua/func/logic/LogicServiceImpl.java b/src/com/engine/salary/formlua/func/logic/LogicServiceImpl.java index 0d0cb89a6..3cd94f8de 100644 --- a/src/com/engine/salary/formlua/func/logic/LogicServiceImpl.java +++ b/src/com/engine/salary/formlua/func/logic/LogicServiceImpl.java @@ -12,6 +12,7 @@ import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Objects; /** * @className: @@ -19,477 +20,478 @@ import java.util.List; * @Author: * @date: */ -public class LogicServiceImpl implements LogicService { - protected final Logger logger = LoggerFactory.getLogger(this.getClass()); - @Override - public DataType not(Object... objects) { - DataType resultdataType=new DataType(); - resultdataType.setDataType(DataType.BOOL); - Class[] typeObjects=new Class[]{boolean.class}; - IgnoreParamFilter.commonFilter("NOT",1,1,typeObjects,objects); - Object object=objects[0]; - if(object == null){ - resultdataType.setContent(false); - return resultdataType; - } - Boolean cnd; - if(object instanceof DataType){ - DataType dataType=(DataType)object; - cnd=dataType.getContent()!=null?((Boolean) dataType.getContent()):false; - }else{ - cnd=(boolean)object; - } +public class LogicServiceImpl implements LogicService { + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); - resultdataType.setContent(!cnd); - return resultdataType; - } + @Override + public DataType not(Object... objects) { + DataType resultdataType = new DataType(); + resultdataType.setDataType(DataType.BOOL); + Class[] typeObjects = new Class[]{boolean.class}; + IgnoreParamFilter.commonFilter("NOT", 1, 1, typeObjects, objects); + Object object = objects[0]; + if (object == null) { + resultdataType.setContent(false); + return resultdataType; + } + Boolean cnd; + if (object instanceof DataType) { + DataType dataType = (DataType) object; + cnd = dataType.getContent() != null ? ((Boolean) dataType.getContent()) : false; + } else { + cnd = (boolean) object; + } - @Override - public DataType isEmpty(Object... objs) { - int number=IgnoreParamFilter.getSetFuncNumber(FuncNames.ISEMPTY.toString()); - if(objs.length!=1){ - throw new RuntimeException("ISEMPTY函数只允许一个参数"); - } - boolean result=false; - if(null==objs||objs.length==0){ - DataType dataType=new DataType(); - dataType.setDataType(DataType.BOOL); - dataType.setContent(true); - return dataType; - } - for(int i=0;i0){ - throw new RuntimeException("TRUE函数不能有参数"); - } - DataType dataType=new DataType(); - dataType.setDataType(DataType.BOOL); - dataType.setContent(true); - return dataType; - } - @Override - public DataType isFalse(Object... objects){ - int number=IgnoreParamFilter.getSetFuncNumber(FuncNames.FALSE.toString()); - if(objects.length>0){ - JSONObject errorJson=ErrorUtil.buildError(FuncNames.FALSE.toString(),number,number,"FALSE函数不能有参数"); - throw new RuntimeException(errorJson.getString("msg")); - } - DataType dataType=new DataType(); - dataType.setDataType(DataType.BOOL); - dataType.setContent(false); - return dataType; - } + @Override + public DataType isEmpty(Object... objs) { + int number = IgnoreParamFilter.getSetFuncNumber(FuncNames.ISEMPTY.toString()); + if (objs.length != 1) { + throw new RuntimeException("ISEMPTY函数只允许一个参数"); + } + boolean result = false; + if (null == objs || objs.length == 0) { + DataType dataType = new DataType(); + dataType.setDataType(DataType.BOOL); + dataType.setContent(true); + return dataType; + } + for (int i = 0; i < objs.length; i++) { + Object obj = objs[i]; + if (obj == null) { + DataType dataType = new DataType(); + dataType.setDataType(DataType.BOOL); + dataType.setContent(true); + return dataType; + } + if (obj instanceof DataType) { + DataType objDataType = (DataType) obj; + if (objDataType.getDataType().equalsIgnoreCase(DataType.NUMBER)) { + Object numberContent = objDataType.getContent(); + if (numberContent == null || numberContent.toString().equalsIgnoreCase("")) { + result = true; + break; + } + } + } + obj = ExcelParamUtil.getParamContent(obj, ""); + if (null == obj || null == ExcelParamUtil.getParamContent(obj, "") || ExcelParamUtil.getParamContent(obj, "").equals("")) { + result = true; + break; + } + } + DataType dataType = new DataType(); + dataType.setDataType(DataType.BOOL); + dataType.setContent(result); + return dataType; + } + + @Override + public DataType isTrue(Object... objects) { + int number = IgnoreParamFilter.getSetFuncNumber(FuncNames.TRUE.toString()); + if (objects.length > 0) { + throw new RuntimeException("TRUE函数不能有参数"); + } + DataType dataType = new DataType(); + dataType.setDataType(DataType.BOOL); + dataType.setContent(true); + return dataType; + } + + @Override + public DataType isFalse(Object... objects) { + int number = IgnoreParamFilter.getSetFuncNumber(FuncNames.FALSE.toString()); + if (objects.length > 0) { + JSONObject errorJson = ErrorUtil.buildError(FuncNames.FALSE.toString(), number, number, "FALSE函数不能有参数"); + throw new RuntimeException(errorJson.getString("msg")); + } + DataType dataType = new DataType(); + dataType.setDataType(DataType.BOOL); + dataType.setContent(false); + return dataType; + } - @Override - public DataType and(Object... objs) { - IgnoreParamFilter.filterLogicAndORFunc(objs,"AND"); - Object result; - int trueCount=0; - int falseCount=0; - DataType dataType=new DataType(); - for(int i=0;i0){ - dataType.getSubLogic().addAll(paramdataType.getSubLogic()); - } - }else{ - bool=(boolean)objs[i]; - } + @Override + public DataType and(Object... objs) { + IgnoreParamFilter.filterLogicAndORFunc(objs, "AND"); + Object result; + int trueCount = 0; + int falseCount = 0; + DataType dataType = new DataType(); + for (int i = 0; i < objs.length; i++) { + boolean bool; + if (objs[i] instanceof DataType) { + DataType paramdataType = (DataType) objs[i]; + bool = paramdataType.getContent() != null ? ((Boolean) paramdataType.getContent()) : false; + //如果参数存在底层Logic运算,把运算记录加入到当前AND函数的运算记录中 + if (paramdataType.getSubLogic() != null && paramdataType.getSubLogic().size() > 0) { + dataType.getSubLogic().addAll(paramdataType.getSubLogic()); + } + } else { + bool = (boolean) objs[i]; + } - if(bool){ - trueCount++; - }else{ - falseCount++; - } - } - if(trueCount==objs.length){ - result= true; - }else{ - result= false; - } + if (bool) { + trueCount++; + } else { + falseCount++; + } + } + if (trueCount == objs.length) { + result = true; + } else { + result = false; + } - dataType.setDataType(DataType.BOOL); - dataType.setContent(result); - dataType.getSubLogic().add("and"); + dataType.setDataType(DataType.BOOL); + dataType.setContent(result); + dataType.getSubLogic().add("and"); - LogicUtils.buildAndOrFilterParam("AND",dataType,objs); - return dataType; - } + LogicUtils.buildAndOrFilterParam("AND", dataType, objs); + return dataType; + } - @Override - public DataType or(Object... objs) { - IgnoreParamFilter.filterLogicAndORFunc(objs,"OR"); - Object result; - int trueCount=0; - int falseCount=0; - DataType dataType=new DataType(); - for(int i=0;i0){ - dataType.getSubLogic().addAll(paramdataType.getSubLogic()); - } - }else{ - bool=(boolean)objs[i]; - } - if(bool){ - trueCount++; - }else{ - falseCount++; - } - } - if(trueCount>0){ - result= true; - }else{ - result= false; - } + @Override + public DataType or(Object... objs) { + IgnoreParamFilter.filterLogicAndORFunc(objs, "OR"); + Object result; + int trueCount = 0; + int falseCount = 0; + DataType dataType = new DataType(); + for (int i = 0; i < objs.length; i++) { + boolean bool; + if (objs[i] instanceof DataType) { + DataType paramdataType = (DataType) objs[i]; + bool = paramdataType.getContent() != null ? ((Boolean) paramdataType.getContent()) : false; + //如果参数存在底层Logic运算,把运算记录加入到当前AND函数的运算记录中 + if (paramdataType.getSubLogic() != null && paramdataType.getSubLogic().size() > 0) { + dataType.getSubLogic().addAll(paramdataType.getSubLogic()); + } + } else { + bool = (boolean) objs[i]; + } + if (bool) { + trueCount++; + } else { + falseCount++; + } + } + if (trueCount > 0) { + result = true; + } else { + result = false; + } - dataType.setDataType(DataType.BOOL); - dataType.setContent(result); - dataType.getSubLogic().add("or"); - LogicUtils.buildAndOrFilterParam("OR",dataType,objs); - return dataType; - } + dataType.setDataType(DataType.BOOL); + dataType.setContent(result); + dataType.getSubLogic().add("or"); + LogicUtils.buildAndOrFilterParam("OR", dataType, objs); + return dataType; + } + @Override + public DataType likeFunc(Object... objects) { + IgnoreParamFilter.filterLikeFunc(objects); + Object object = objects[0]; + Object result = false; + String txtS = ""; + if (object instanceof DataType) { + txtS = ExcelParamUtil.getParamContent(object, "string").toString(); + } else { + txtS = object.toString(); + } + if (null == txtS || txtS.trim().equals("")) { + return new DataType(DataType.BOOL, false); + } + Object[] partamArray = (Object[]) objects[1]; + for (int i = 0; i < partamArray.length; i++) { + Object cnd = partamArray[i]; + String cndStr = ""; + if (cnd instanceof DataType) { + DataType cndJson = (DataType) cnd; + cndStr = ExcelParamUtil.getParamContent(cndJson, "string").toString(); + } else { + cndStr = cnd.toString(); + } - @Override - public DataType likeFunc(Object... objects) { - IgnoreParamFilter.filterLikeFunc(objects); - Object object=objects[0]; - Object result=false; - String txtS=""; - if(object instanceof DataType){ - txtS=ExcelParamUtil.getParamContent(object,"string").toString(); - }else { - txtS=object.toString(); - } - if(null==txtS||txtS.trim().equals("")){ - return new DataType(DataType.BOOL,false); - } - Object[] partamArray=(Object[])objects[1]; - for(int i=0;i=0?true:false){ - result=ridx>=0?true:false; - break; - } + int ridx = txtS.indexOf(cndStr); + if (ridx >= 0 ? true : false) { + result = ridx >= 0 ? true : false; + break; + } - } - DataType dataType=new DataType(DataType.BOOL,result); - LogicUtils.buildLikeFilterParam(dataType,objects); - return dataType; - } + } + DataType dataType = new DataType(DataType.BOOL, result); + LogicUtils.buildLikeFilterParam(dataType, objects); + return dataType; + } - @Override - public DataType ifs(Object... objects) { - int number=IgnoreParamFilter.getSetFuncNumber(FuncNames.IFS.toString()); - if(objects.length==0 || objects.length%2!=1 || objects.length<3){ - JSONObject errorJson=ErrorUtil.buildError(FuncNames.IFS.toString(),number,number,"IFS函数的参数必须大于3个且为单数"); - throw new RuntimeException(errorJson.getString("msg")); - } - int testI; - for(testI=1;testI<=objects.length;testI++){ - if(testI%2>0 && testI!=objects.length){ - Object cndObj=objects[testI-1]; - if(!(cndObj instanceof Boolean) && !(cndObj instanceof DataType)){ - JSONObject errorJson= ErrorUtil.buildError(FuncNames.IFS.toString(),number,number,"IFS函数条件必须为真假值"); - throw new RuntimeException(errorJson.getString("msg")); - }else if(cndObj instanceof DataType){ - DataType boolDataType=(DataType)cndObj; - if(boolDataType.getContent()!=null && !(boolDataType.getContent() instanceof Boolean)){ - JSONObject errorJson=ErrorUtil.buildError(FuncNames.IFS.toString(),number,number,"IFS函数条件必须为真假值"); - throw new RuntimeException(errorJson.getString("msg")); - } - } - } - } + @Override + public DataType ifs(Object... objects) { + int number = IgnoreParamFilter.getSetFuncNumber(FuncNames.IFS.toString()); + if (objects.length == 0 || objects.length % 2 != 1 || objects.length < 3) { + JSONObject errorJson = ErrorUtil.buildError(FuncNames.IFS.toString(), number, number, "IFS函数的参数必须大于3个且为单数"); + throw new RuntimeException(errorJson.getString("msg")); + } + int testI; + for (testI = 1; testI <= objects.length; testI++) { + if (testI % 2 > 0 && testI != objects.length) { + Object cndObj = objects[testI - 1]; + if (!(cndObj instanceof Boolean) && !(cndObj instanceof DataType)) { + JSONObject errorJson = ErrorUtil.buildError(FuncNames.IFS.toString(), number, number, "IFS函数条件必须为真假值"); + throw new RuntimeException(errorJson.getString("msg")); + } else if (cndObj instanceof DataType) { + DataType boolDataType = (DataType) cndObj; + if (boolDataType.getContent() != null && !(boolDataType.getContent() instanceof Boolean)) { + JSONObject errorJson = ErrorUtil.buildError(FuncNames.IFS.toString(), number, number, "IFS函数条件必须为真假值"); + throw new RuntimeException(errorJson.getString("msg")); + } + } + } + } - boolean paramCheck=checkParamType(objects); - if(!paramCheck){ - JSONObject errorJson=ErrorUtil.buildError(FuncNames.IFS.toString(),number,number,"IFS函数多个条件的返回值必须一致"); - throw new RuntimeException(errorJson.getString("msg")); - } + boolean paramCheck = checkParamType(objects); + if (!paramCheck) { + JSONObject errorJson = ErrorUtil.buildError(FuncNames.IFS.toString(), number, number, "IFS函数多个条件的返回值必须一致"); + throw new RuntimeException(errorJson.getString("msg")); + } - int i; - for(i=1;i<=objects.length;i++){ - if(i%2==0){ - Object cndObj=objects[i-2]; - if(cndObj instanceof Boolean){ - Boolean cnd=(Boolean)cndObj; - if(cnd){ - if(objects[i-1] instanceof DataType){ - return (DataType) objects[i-1]; - }else{ - return new DataType(DataType.returnType(ExcelParamUtil.getParamType(objects[i-1].getClass().getName())),objects[i-1]); - } + int i; + for (i = 1; i <= objects.length; i++) { + if (i % 2 == 0) { + Object cndObj = objects[i - 2]; + if (cndObj instanceof Boolean) { + Boolean cnd = (Boolean) cndObj; + if (cnd) { + if (objects[i - 1] instanceof DataType) { + return (DataType) objects[i - 1]; + } else { + return new DataType(DataType.returnType(ExcelParamUtil.getParamType(objects[i - 1].getClass().getName())), objects[i - 1]); + } // return new DataType(DataType.BOOL,objects[i-1]); - } - }else if(cndObj instanceof DataType){ - DataType boolData=(DataType)cndObj; - Boolean cnd=boolData.getContent()!=null?( (Boolean)boolData.getContent() ) : false; - if(cnd){ - if(objects[i-1] instanceof DataType){ - return (DataType) objects[i-1]; - }else { - return new DataType(DataType.returnType(ExcelParamUtil.getParamType(objects[i-1].getClass().getName())),objects[i-1]); - } + } + } else if (cndObj instanceof DataType) { + DataType boolData = (DataType) cndObj; + Boolean cnd = boolData.getContent() != null ? ((Boolean) boolData.getContent()) : false; + if (cnd) { + if (objects[i - 1] instanceof DataType) { + return (DataType) objects[i - 1]; + } else { + return new DataType(DataType.returnType(ExcelParamUtil.getParamType(objects[i - 1].getClass().getName())), objects[i - 1]); + } - } - } - } - } - //如果没有条件符合,返回默认值,最后一个参数为默认值 - Object result=ExcelParamUtil.getParamContent(objects[objects.length-1],""); - if(result instanceof DataType){ - return (DataType)result; - }else{ - return new DataType(DataType.returnType(ExcelParamUtil.getParamType(result.getClass().getName())),result); - } + } + } + } + } + //如果没有条件符合,返回默认值,最后一个参数为默认值 + Object result = ExcelParamUtil.getParamContent(objects[objects.length - 1], ""); + if (result instanceof DataType) { + return (DataType) result; + } else { + return new DataType(DataType.returnType(ExcelParamUtil.getParamType(result.getClass().getName())), result); + } - } + } - @Override - public DataType find(Object... objects) { + @Override + public DataType find(Object... objects) { - return new DataType(DataType.BOOL,finds(objects)); - } + return new DataType(DataType.BOOL, finds(objects)); + } - @Override - public DataType switchs(Object... objects) { - if(objects.length==0||objects==null){ - throw new RuntimeException("参数不能为空"); - } - if(objects.length<4){ - throw new RuntimeException("switch函数的参数长度必须大于4个"); - } - if(objects.length%2!=0){ - throw new RuntimeException("switch函数的参数长度必须为双数"); - } - Object source=objects[0]; - Object defaultValue=objects[objects.length-1]; - if(source instanceof DataType){ - source=ExcelParamUtil.getParamContent(source,""); - } - if(defaultValue instanceof DataType){ - defaultValue=ExcelParamUtil.getParamContent(defaultValue,""); - } - Object result=null; - for (int i=1;i=3 ){ - if(objects[objects.length-1] instanceof Integer){ - vali=Integer.parseInt(objects[objects.length-1].toString()); - if(vali!=1&&vali!=2){ - throw new RuntimeException("FIND函数第三个参数只允许1和2"); - } - }else{ - throw new RuntimeException("FIND函数第三个参数只允许1和2"); - } - } + //获取查找类型 1:用第二个参数去第一个里面找。2:用第一个参数去第二个里面找 + String type = null; + int vali = 2; + if (objects.length >= 3) { + if (objects[objects.length - 1] instanceof Integer) { + vali = Integer.parseInt(objects[objects.length - 1].toString()); + if (vali != 1 && vali != 2) { + throw new RuntimeException("FIND函数第三个参数只允许1和2"); + } + } else { + throw new RuntimeException("FIND函数第三个参数只允许1和2"); + } + } - //将参数转换成List,要判断参数是数组还是单个对象 - List objs1=null; - List objs2=null; - if(objects[0] instanceof Object[]){ - Object[] transObj=(Object[])objects[0]; - objs1=Arrays.asList(transObj); - }else{ - objs1=Arrays.asList(objects[0]); - } - if(objects[1] instanceof Object[]){ - Object[] transObj=(Object[])objects[1]; - objs2=Arrays.asList(transObj); - }else{ - objs2=Arrays.asList(objects[1]); - } + //将参数转换成List,要判断参数是数组还是单个对象 + List objs1 = null; + List objs2 = null; + if (objects[0] instanceof Object[]) { + Object[] transObj = (Object[]) objects[0]; + objs1 = Arrays.asList(transObj); + } else { + objs1 = Arrays.asList(objects[0]); + } + if (objects[1] instanceof Object[]) { + Object[] transObj = (Object[]) objects[1]; + objs2 = Arrays.asList(transObj); + } else { + objs2 = Arrays.asList(objects[1]); + } - if(objs1.size()==0 || objs2.size() == 0 ){ - throw new RuntimeException("参数不能为空"); - } + if (objs1.size() == 0 || objs2.size() == 0) { + throw new RuntimeException("参数不能为空"); + } - //判断参数类型是否一致 - List all=new ArrayList<>(); - all.addAll(objs1); - all.addAll(objs2); - for (Object obj:all){ - String localType=""; - if(obj instanceof DataType){ - String paramType=ExcelParamUtil.getParamType(obj); - if(!paramType.toLowerCase().equals("option")){ - localType=ExcelParamUtil.checkParamType(paramType); - }else{ - localType=paramType; - } - }else{ - localType=ExcelParamUtil.checkParamType(ExcelParamUtil.getParamType(obj.getClass().getName())); - } - if(type==null){ - type=localType; - }else{ - if(!type.equalsIgnoreCase(localType)){ - throw new RuntimeException("参数类型不一致"); - } - } - } + //判断参数类型是否一致 + List all = new ArrayList<>(); + all.addAll(objs1); + all.addAll(objs2); + for (Object obj : all) { + String localType = ""; + if (obj instanceof DataType) { + String paramType = ExcelParamUtil.getParamType(obj); + if (!paramType.toLowerCase().equals("option")) { + localType = ExcelParamUtil.checkParamType(paramType); + } else { + localType = paramType; + } + } else { + localType = ExcelParamUtil.checkParamType(ExcelParamUtil.getParamType(obj.getClass().getName())); + } + if (type == null) { + type = localType; + } else { + if (!type.equalsIgnoreCase(localType)) { + throw new RuntimeException("参数类型不一致"); + } + } + } - //根据超找类型判断谁是查找目标,谁是查找依据 - List targetList=new ArrayList<>(); - List keyList=new ArrayList<>(); - switch (vali){ - case 1: - targetList=transOptionData(objs1); - keyList=transOptionData(objs2); - break; - case 2: - targetList=transOptionData(objs2); - keyList=transOptionData(objs1); - break; - default: - throw new RuntimeException("查找类型错误"); - } + //根据超找类型判断谁是查找目标,谁是查找依据 + List targetList = new ArrayList<>(); + List keyList = new ArrayList<>(); + switch (vali) { + case 1: + targetList = transOptionData(objs1); + keyList = transOptionData(objs2); + break; + case 2: + targetList = transOptionData(objs2); + keyList = transOptionData(objs1); + break; + default: + throw new RuntimeException("查找类型错误"); + } - for (Object keyO:keyList){ - for (Object target:targetList){ - if(keyO.equals(target)){ - return true; - } - } - } + for (Object keyO : keyList) { + for (Object target : targetList) { + if (keyO.equals(target)) { + return true; + } + } + } - return false; - } + return false; + } - private List transOptionData(List dataList){ - List contentArrays=new ArrayList<>(); - for (Object data:dataList){ - Object param1=ExcelParamUtil.getParamContent(data,""); - //获取依据数据的类型 - String keyType=""; - if(data instanceof DataType){ - keyType=ExcelParamUtil.getParamType(data); - }else{ - keyType=ExcelParamUtil.getParamType(data.getClass().getName()); - } - keyType=ExcelParamUtil.checkParamType(keyType); + private List transOptionData(List dataList) { + List contentArrays = new ArrayList<>(); + for (Object data : dataList) { + Object param1 = ExcelParamUtil.getParamContent(data, ""); + //获取依据数据的类型 + String keyType = ""; + if (data instanceof DataType) { + keyType = ExcelParamUtil.getParamType(data); + } else { + keyType = ExcelParamUtil.getParamType(data.getClass().getName()); + } + keyType = ExcelParamUtil.checkParamType(keyType); - if(keyType.toLowerCase().equals(DataType.OPTION)){ - contentArrays.addAll(Arrays.asList(param1.toString().split(","))); - }else if(data instanceof Character){ - contentArrays.add(param1.toString()); - }else if(keyType.toLowerCase().equals("number")){ - contentArrays.add(Double.parseDouble(param1.toString())); - }else{ - contentArrays.add(param1); - } - } - return contentArrays; - } + if (keyType.toLowerCase().equals(DataType.OPTION)) { + contentArrays.addAll(Arrays.asList(param1.toString().split(","))); + } else if (data instanceof Character) { + contentArrays.add(param1.toString()); + } else if (keyType.toLowerCase().equals("number")) { + contentArrays.add(Double.parseDouble(param1.toString())); + } else { + contentArrays.add(param1); + } + } + return contentArrays; + } - private boolean checkParamType(Object[] objects){ - boolean result=false; - String type=null; - for (int i=1;i<=objects.length;i++){ - if(i%2==0){ - Object obj=objects[i-1]; - String typeStr=ExcelParamUtil.getParamType(obj); - typeStr=ExcelParamUtil.checkParamType(typeStr); - logger.info(typeStr); - if(type==null){ - type=typeStr; - }else{ - result=typeStr.equalsIgnoreCase(type); - if(!result){ - return result; - } + private boolean checkParamType(Object[] objects) { + boolean result = false; + String type = null; + for (int i = 1; i <= objects.length; i++) { + if (i % 2 == 0) { + Object obj = objects[i - 1]; + String typeStr = ExcelParamUtil.getParamType(obj); + typeStr = ExcelParamUtil.checkParamType(typeStr); + logger.info(typeStr); + if (type == null) { + type = typeStr; + } else { + result = typeStr.equalsIgnoreCase(type); + if (!result) { + return result; + } - } - } - } - String typeStr=ExcelParamUtil.checkParamType(ExcelParamUtil.getParamType(objects[objects.length-1])); - result=type.equalsIgnoreCase(typeStr); - return result; - } + } + } + } + String typeStr = ExcelParamUtil.checkParamType(ExcelParamUtil.getParamType(objects[objects.length - 1])); + result = type.equalsIgnoreCase(typeStr); + return result; + } } From b0a25f6cf0b426e2cbfceba72730e3b792c99c9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 19 Sep 2023 11:37:37 +0800 Subject: [PATCH 19/37] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=B8=8E=E7=BB=84?= =?UTF-8?q?=E7=BB=87=E5=86=B2=E7=AA=81sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202307100103.sql | 0 resource/sqlupgrade/JC/sql202307100103.sql | 0 resource/sqlupgrade/Mysql/sql202307100103.sql | 0 resource/sqlupgrade/Oracle/sql202307100103.sql | 0 resource/sqlupgrade/SQLServer/sql202307100103.sql | 0 resource/sqlupgrade/ST/sql202307100103.sql | 0 6 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 resource/sqlupgrade/DM/sql202307100103.sql delete mode 100644 resource/sqlupgrade/JC/sql202307100103.sql delete mode 100644 resource/sqlupgrade/Mysql/sql202307100103.sql delete mode 100644 resource/sqlupgrade/Oracle/sql202307100103.sql delete mode 100644 resource/sqlupgrade/SQLServer/sql202307100103.sql delete mode 100644 resource/sqlupgrade/ST/sql202307100103.sql diff --git a/resource/sqlupgrade/DM/sql202307100103.sql b/resource/sqlupgrade/DM/sql202307100103.sql deleted file mode 100644 index e69de29bb..000000000 diff --git a/resource/sqlupgrade/JC/sql202307100103.sql b/resource/sqlupgrade/JC/sql202307100103.sql deleted file mode 100644 index e69de29bb..000000000 diff --git a/resource/sqlupgrade/Mysql/sql202307100103.sql b/resource/sqlupgrade/Mysql/sql202307100103.sql deleted file mode 100644 index e69de29bb..000000000 diff --git a/resource/sqlupgrade/Oracle/sql202307100103.sql b/resource/sqlupgrade/Oracle/sql202307100103.sql deleted file mode 100644 index e69de29bb..000000000 diff --git a/resource/sqlupgrade/SQLServer/sql202307100103.sql b/resource/sqlupgrade/SQLServer/sql202307100103.sql deleted file mode 100644 index e69de29bb..000000000 diff --git a/resource/sqlupgrade/ST/sql202307100103.sql b/resource/sqlupgrade/ST/sql202307100103.sql deleted file mode 100644 index e69de29bb..000000000 From 5d4231c2419984039e952f82804d7a12a5479e48 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 19 Sep 2023 13:11:24 +0800 Subject: [PATCH 20/37] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=85=B1=E4=BA=ABfix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../po/SalaryStatisticsPushDetailPO.java | 3 + .../service/SalaryStatisticsPushService.java | 2 +- .../impl/SalaryStatisticsPushServiceImpl.java | 8 +-- .../web/SalaryStatisticsPushController.java | 2 +- .../SalaryStatisticsReportWrapper.java | 60 +++++++++++++++---- 5 files changed, 57 insertions(+), 18 deletions(-) diff --git a/src/com/engine/salary/report/entity/po/SalaryStatisticsPushDetailPO.java b/src/com/engine/salary/report/entity/po/SalaryStatisticsPushDetailPO.java index fdd288722..a6c288da2 100644 --- a/src/com/engine/salary/report/entity/po/SalaryStatisticsPushDetailPO.java +++ b/src/com/engine/salary/report/entity/po/SalaryStatisticsPushDetailPO.java @@ -7,6 +7,7 @@ import lombok.NoArgsConstructor; import java.io.Serializable; import java.util.Date; +import java.util.List; /** * @Description: @@ -62,4 +63,6 @@ public class SalaryStatisticsPushDetailPO implements Serializable { // 更新时间 private Date updateTime; + + private List ids; } diff --git a/src/com/engine/salary/report/service/SalaryStatisticsPushService.java b/src/com/engine/salary/report/service/SalaryStatisticsPushService.java index 56bba4655..39b87a212 100644 --- a/src/com/engine/salary/report/service/SalaryStatisticsPushService.java +++ b/src/com/engine/salary/report/service/SalaryStatisticsPushService.java @@ -82,5 +82,5 @@ public interface SalaryStatisticsPushService { * @param reportId * @return */ - List shareReportValid(Long reportId); + List shareReportValid(Long reportId, Long uid); } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java index 4ab08208f..cf75ed363 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java @@ -708,7 +708,7 @@ public class SalaryStatisticsPushServiceImpl extends Service implements SalarySt if (CollectionUtils.isEmpty(batchIds)) { return Collections.emptyList(); } - List pushList = Collections.emptyList(); + List pushList = new ArrayList<>(); List> partition = Lists.partition((List)batchIds, 1000); partition.forEach(ids -> { pushList.addAll(getSalaryStatisticsPushMapper().listSome(SalaryStatisticsPushPO.builder().ids(ids).build())); @@ -720,7 +720,7 @@ public class SalaryStatisticsPushServiceImpl extends Service implements SalarySt public List getPushListByReportIdAndIds(Long reportId, List ids) { List pushList = getSalaryStatisticsPushMapper().listListReportIdAndIds(reportId, ids); pushList = pushList.stream().filter( push -> { - return Arrays.asList(push.getReportIds().split(",")).contains(reportId); + return Arrays.asList(push.getReportIds().split(",")).contains(reportId.toString()); }).collect(Collectors.toList()); return pushList; } @@ -738,9 +738,9 @@ public class SalaryStatisticsPushServiceImpl extends Service implements SalarySt } @Override - public List shareReportValid(Long reportId) { + public List shareReportValid(Long reportId, Long uid) { // 获取该员工所有被分享成功的明细 - List successPushDetailList = getSalaryStatisticsPushDetailService(user).getSuccessPushDetailListByReceiver(Long.valueOf(user.getUID())); + List successPushDetailList = getSalaryStatisticsPushDetailService(user).getSuccessPushDetailListByReceiver(uid); // 根据报表id,分享批次id查询分享批次信息 List batchIds = successPushDetailList.stream().map(SalaryStatisticsPushDetailPO::getBatchId).collect(Collectors.toList()); List pushList= getPushListByReportIdAndIds(reportId,batchIds); diff --git a/src/com/engine/salary/report/web/SalaryStatisticsPushController.java b/src/com/engine/salary/report/web/SalaryStatisticsPushController.java index 116bc91cd..64a11d5f9 100644 --- a/src/com/engine/salary/report/web/SalaryStatisticsPushController.java +++ b/src/com/engine/salary/report/web/SalaryStatisticsPushController.java @@ -85,7 +85,7 @@ public class SalaryStatisticsPushController { @Produces(MediaType.APPLICATION_JSON) public String push(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsPushParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getSalaryStatisticsPushService(user)::push, param); + return new ResponseResult(user).run(getSalaryStatisticsPushService(user)::push, param); } /** diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 500ffabb9..c13b0fe59 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -34,6 +34,7 @@ import com.google.common.collect.Maps; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.general.PageIdConst; import weaver.hrm.User; @@ -254,15 +255,6 @@ public class SalaryStatisticsReportWrapper extends Service { * @return */ public Map getData(SalaryStatisticsReportDataQueryParam param) { - if (param.getShare()) { - // 是被分享的报表 - Long uid = Long.valueOf(user.getUID()); - // 校验查看权限,获取有效的分享记录 - List pushList = getSalaryStatisticsPushService(user).shareReportValid(param.getId()); - List batchIds = pushList.stream().map(SalaryStatisticsPushPO::getId).collect(Collectors.toList()); - getSalaryStatisticsPushService(user).updateReportViewStatus(batchIds, uid); -// salaryStatisticsPushService.sendViewedMsg(param.getBatchId(), param.getId(), employeeId, tenantKey); - } Long id = param.getId(); if (id == null || param.getDimensionId() == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); @@ -271,13 +263,32 @@ public class SalaryStatisticsReportWrapper extends Service { if (dimension == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在")); } - // weaTable对象 - Map weaTable = new HashMap<>(); // 查询报表配置 SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(id); if (po == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); } + if (1+1==2 || param.getShare()) { + // 是被分享的报表 + Long uid = Long.valueOf(user.getUID()); + // 校验查看权限,获取有效的分享记录 + List pushList = getSalaryStatisticsPushService(user).shareReportValid(param.getId(), uid); + List batchIds = pushList.stream().map(SalaryStatisticsPushPO::getId).collect(Collectors.toList()); + getSalaryStatisticsPushService(user).updateReportViewStatus(batchIds, uid); +// salaryStatisticsPushService.sendViewedMsg(param.getBatchId(), param.getId(), employeeId, tenantKey); + // 如果是被分享的报表,校验分享权限,通过后将user赋值为报表创建人 + User creator = new User(); + creator.setUid(po.getCreator().intValue()); + user = creator; + } else { + // 判断报表是否是登陆人创建的 + if (NumberUtils.compare(po.getCreator().intValue(), user.getUID()) == 0) { + throw new SalaryRunTimeException("无权限查看该报表!"); + } + } + + // weaTable对象 + Map weaTable = new HashMap<>(); // 查询自定义统计项目 List salaryStatisticsItemList = this.getSalaryStatisticsItemService(user).listByStatisticsReportId(po.getId()); @@ -343,7 +354,7 @@ public class SalaryStatisticsReportWrapper extends Service { if (dimension == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在")); } - + sharedReportCheck(true, po); // 参数转换 SalaryStatisticsReportBO.poToQueryParam(param, po); @@ -419,6 +430,8 @@ public class SalaryStatisticsReportWrapper extends Service { if (dimension == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在")); } + // 校验报表权限,如果是被分享报表修改User + sharedReportCheck(true, po); // 查询自定义统计项目中所有薪资项目id List salaryStatisticsItemPOS = getSalaryStatisticsItemService(user).listByStatisticsReportId(param.getId()); List salaryItemIds = salaryStatisticsItemPOS.stream().filter(item -> StringUtils.isNotBlank(item.getItemValue())).map(p -> p.getItemValue().split(",")) @@ -450,6 +463,29 @@ public class SalaryStatisticsReportWrapper extends Service { return resultMap; } + /** + * 权限校验 + * @param isShared 是否是被分享的报表 + * @param po 报表po + */ + private void sharedReportCheck(boolean isShared, SalaryStatisticsReportPO po) { + if (isShared) { + // 是被分享的报表 + Long uid = Long.valueOf(user.getUID()); + // 校验分享查看权限 + getSalaryStatisticsPushService(user).shareReportValid(po.getId(), uid); + // 如果是被分享的报表,校验分享权限,通过后将user赋值为报表创建人 + User creator = new User(); + creator.setUid(po.getCreator().intValue()); + user = creator; + } else { + // 判断报表是否是登陆人创建的 + if (NumberUtils.compare(po.getCreator().intValue(), user.getUID()) == 0) { + throw new SalaryRunTimeException("无权限查看该报表!"); + } + } + } + private List buildDataPerspectiveTableColumns(List salaryItems) { // 表格表头 List columns = new ArrayList<>(); From c7713353ddacfc44735d4bc2a764b86e694faea3 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 19 Sep 2023 13:34:51 +0800 Subject: [PATCH 21/37] =?UTF-8?q?=E6=8A=A5=E8=A1=A8fixbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/mapper/report/SalaryStatisticsPushMapper.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.xml b/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.xml index 38d77783e..3288080c1 100644 --- a/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.xml +++ b/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.xml @@ -129,7 +129,6 @@ FROM hrsa_report_push t WHERE delete_type = 0 - AND report_ids AND t.report_ids like CONCAT('%',#{reportId},'%') @@ -146,7 +145,6 @@ FROM hrsa_report_push t WHERE delete_type = 0 - AND report_ids AND t.report_ids like '%'||#{reportId}||'%' @@ -163,7 +161,6 @@ FROM hrsa_report_push t WHERE delete_type = 0 - AND report_ids AND t.report_ids like '%'+#{reportId}+'%' From 897a7731bf75f36ec1e8b03393b1785763a2eb7d Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 19 Sep 2023 13:59:08 +0800 Subject: [PATCH 22/37] =?UTF-8?q?=E6=8A=A5=E8=A1=A8fixbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/mapper/report/SalaryStatisticsPushMapper.java | 2 +- .../salary/mapper/report/SalaryStatisticsPushMapper.xml | 6 +++--- .../service/impl/SalaryStatisticsPushServiceImpl.java | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.java b/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.java index bb158b987..bd982759e 100644 --- a/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.java +++ b/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.java @@ -79,5 +79,5 @@ public interface SalaryStatisticsPushMapper { * @param reportId * @return */ - List listListReportIdAndIds(@Param("reportId") Long reportId, @Param("ids") List ids); + List listByReportIdAndIds(@Param("reportId") Long reportId, @Param("ids") List ids); } diff --git a/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.xml b/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.xml index 3288080c1..faebe7b3d 100644 --- a/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.xml +++ b/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.xml @@ -124,7 +124,7 @@ ORDER BY create_time DESC - SELECT FROM hrsa_report_push t @@ -140,7 +140,7 @@ - SELECT FROM hrsa_report_push t @@ -156,7 +156,7 @@ - SELECT FROM hrsa_report_push t diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java index cf75ed363..101c2ca42 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java @@ -83,9 +83,9 @@ public class SalaryStatisticsPushServiceImpl extends Service implements SalarySt data.put("pushTitle", pushPO.getPushTitle()); data.put("mark", pushPO.getMark()); if (pushPO.getRemind() == null) { - data.put("remind", 1); + data.put("remind", "1"); } else { - data.put("remind", pushPO.getRemind()); + data.put("remind", pushPO.getRemind().toString()); } return data; } @@ -107,7 +107,7 @@ public class SalaryStatisticsPushServiceImpl extends Service implements SalarySt po.getCreator().compareTo(employeeId) == 0 ).forEach( po -> { Map option = new HashMap<>(); - option.put("id", po.getId()); + option.put("id", po.getId().toString()); option.put("reportName", po.getReportName()); reportIdsOptions.add(option); }); @@ -718,7 +718,7 @@ public class SalaryStatisticsPushServiceImpl extends Service implements SalarySt @Override public List getPushListByReportIdAndIds(Long reportId, List ids) { - List pushList = getSalaryStatisticsPushMapper().listListReportIdAndIds(reportId, ids); + List pushList = getSalaryStatisticsPushMapper().listByReportIdAndIds(reportId, ids); pushList = pushList.stream().filter( push -> { return Arrays.asList(push.getReportIds().split(",")).contains(reportId.toString()); }).collect(Collectors.toList()); From bf6918264f3f7dfb6292d84ac9f1e09620c854b6 Mon Sep 17 00:00:00 2001 From: sy Date: Tue, 19 Sep 2023 15:24:44 +0800 Subject: [PATCH 23/37] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=96=B9=E6=A1=88=EF=BC=8C=E7=A6=8F=E5=88=A9?= =?UTF-8?q?=E6=96=B9=E6=A1=88=E4=BF=AE=E6=94=B9action?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../action/UpdateSISchemeDetailAction.java | 250 ++++++++++++++++++ .../sischeme/InsuranceSchemeDetailMapper.xml | 6 + 2 files changed, 256 insertions(+) create mode 100644 src/com/engine/salary/action/UpdateSISchemeDetailAction.java diff --git a/src/com/engine/salary/action/UpdateSISchemeDetailAction.java b/src/com/engine/salary/action/UpdateSISchemeDetailAction.java new file mode 100644 index 000000000..2ceef43d0 --- /dev/null +++ b/src/com/engine/salary/action/UpdateSISchemeDetailAction.java @@ -0,0 +1,250 @@ +package com.engine.salary.action; + +import com.engine.salary.encrypt.EncryptUtil; +import com.engine.salary.entity.sicategory.po.ICategoryPO; +import com.engine.salary.entity.sischeme.po.InsuranceSchemeDetailPO; +import com.engine.salary.entity.sischeme.po.InsuranceSchemePO; +import com.engine.salary.enums.sicategory.IsUseEnum; +import com.engine.salary.mapper.sicategory.ICategoryMapper; +import com.engine.salary.mapper.sischeme.InsuranceSchemeDetailMapper; +import com.engine.salary.mapper.sischeme.InsuranceSchemeMapper; +import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.db.MapperProxyFactory; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.*; +import weaver.workflow.request.RequestManager; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author: sy + * @Description: 更新福利方案明细信息action + * @Date: 2023/9/18 + **/ +@Slf4j +public class UpdateSISchemeDetailAction implements Action { + + private EncryptUtil encryptUtil = new EncryptUtil(); + + private InsuranceSchemeMapper getInsuranceSchemeMapper() { + return MapperProxyFactory.getProxy(InsuranceSchemeMapper.class); + } + + private InsuranceSchemeDetailMapper getInsuranceSchemeDetailMapper() { + return MapperProxyFactory.getProxy(InsuranceSchemeDetailMapper.class); + } + + private ICategoryMapper getICategoryMapper() { + return MapperProxyFactory.getProxy(ICategoryMapper.class); + } + + private String tableName; + + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + @Override + public String execute(RequestInfo requestInfo) { + try { + RequestManager requestManager = requestInfo.getRequestManager(); + User user = requestManager.getUser(); + + DetailTable[] detailTables = requestInfo.getDetailTableInfo().getDetailTable(); + List> detailList = new ArrayList<>(); + if (detailTables.length > 0) { + for(DetailTable dt : detailTables) { + Row[] s = dt.getRow(); + for (Row r : s) { + Cell[] c = r.getCell(); + Map detailMap = Arrays.stream(c).collect(Collectors.toMap(Cell::getName, + property -> Util.null2String(property.getValue()))); + detailList.add(detailMap); + } + + } + } + RecordSet rs = new RecordSet(); + + String queryImageId = "select salaryname,processfield from " + tableName + " where workflowid = ?"; + rs.executeQuery(queryImageId, requestInfo.getWorkflowid()); + + //遍历取出明细表中对应数据 + int detailNo = 0; + List listAll = getICategoryMapper().listAll().stream().filter(f -> f.getIsUse().equals(IsUseEnum.START.getValue())).collect(Collectors.toList()); + List schemeList = getInsuranceSchemeMapper().listAll(); + List updateSchemeDetails = new ArrayList<>(); + for (Map map : detailList) { + detailNo++; + List list = new ArrayList<>(); + while (rs.next()) { + String processField = rs.getString("processfield"); + String salaryName = rs.getString("salaryname"); + String value = map.get(processField); + list.add(new UpdateSISchemeDetailAction.SalaryField(processField, salaryName, value)); + } + rs.beforFirst(); + // 流程数据 + Map importDataMap = SalaryEntityUtil.convert2Map(list, UpdateSISchemeDetailAction.SalaryField::getSalaryName, UpdateSISchemeDetailAction.SalaryField::getValue); + //设置更新对象元素 + String schemeId = importDataMap.getOrDefault("福利方案id", "").toString(); + String schemeName = importDataMap.getOrDefault("福利方案名称", "").toString(); + //查询福利方案 + InsuranceSchemePO targetSchemePO = new InsuranceSchemePO(); + if (StringUtils.isNotBlank(schemeId)) { + targetSchemePO = schemeList.stream().filter(f -> f.getId().equals(Long.valueOf(schemeId))).findFirst().orElse(null); + } else if (StringUtils.isNotBlank(schemeName)) { + targetSchemePO = schemeList.stream().filter(f -> f.getSchemeName().equals(schemeName)).findFirst().orElse(null); + } else { + requestInfo.getRequestManager().setMessage("错误行" + detailNo + ":" + "福利方案id和福利方案名称至少填写一个!"); + return FAILURE_AND_CONTINUE; + } + + if (targetSchemePO == null) { + requestInfo.getRequestManager().setMessage("错误行" + detailNo + ":" + "福利方案id和福利方案名称信息有误,无法匹配到已有福利方案!"); + return FAILURE_AND_CONTINUE; + } + //查询福利方案下的福利项明细 + List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().queryListBySchemeId(targetSchemePO.getId()); + if (insuranceSchemeDetailPOS.size() > 0) { + encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); + } else { + requestInfo.getRequestManager().setMessage("错误行" + detailNo + ":" + "该福利方案不存在福利项明细,无法进行修改!"); + return FAILURE_AND_CONTINUE; + } + + String paymentScope = importDataMap.getOrDefault("缴纳对象", "").toString(); + if (StringUtils.isBlank(paymentScope)) { + requestInfo.getRequestManager().setMessage("错误行" + detailNo + ":" + "缴纳对象必填!"); + return FAILURE_AND_CONTINUE; + } + + String insuranceId = importDataMap.getOrDefault("福利项id", "").toString(); + String insuranceName = importDataMap.getOrDefault("福利项名称", "").toString(); + + InsuranceSchemeDetailPO targetSchemeDetailPO = new InsuranceSchemeDetailPO(); + if (StringUtils.isNotBlank(insuranceId)) { + targetSchemeDetailPO = insuranceSchemeDetailPOS.stream() + .filter(f -> f.getInsuranceId().equals(Long.valueOf(insuranceId)) && f.getPaymentScope().equals(Integer.valueOf(paymentScope))) + .findFirst().orElse(null); + } else if (StringUtils.isNotBlank(insuranceName)) { + List targetCategoryPOs = listAll.stream().filter(f -> f.getInsuranceName().equals(insuranceName)).collect(Collectors.toList()); + if (targetCategoryPOs .size() == 1) { + targetSchemeDetailPO = insuranceSchemeDetailPOS.stream() + .filter(f -> f.getInsuranceId().equals(targetCategoryPOs.get(0).getId()) && f.getPaymentScope().equals(Integer.valueOf(paymentScope))) + .findFirst().orElse(null); + } else if (targetCategoryPOs.size() > 1) { + requestInfo.getRequestManager().setMessage("错误行" + detailNo + ":" + "福利项名称匹配到多个福利项!"); + return FAILURE_AND_CONTINUE; + } + + } else { + requestInfo.getRequestManager().setMessage("错误行" + detailNo + ":" + "福利项id和福利项名称至少填写一个!"); + return FAILURE_AND_CONTINUE; + } + + if (targetSchemeDetailPO == null) { + requestInfo.getRequestManager().setMessage("错误行" + detailNo + ":" + "福利项id和福利项名称信息有误,无法匹配到方案已有福利项!"); + return FAILURE_AND_CONTINUE; + } + + String isPayment = importDataMap.getOrDefault("是否缴费", "").toString(); + if (StringUtils.isNotBlank(isPayment)) { + targetSchemeDetailPO.setIsPayment(Integer.valueOf(isPayment)); + } + + String upperLimit = importDataMap.getOrDefault("基数上限", "").toString(); + if (StringUtils.isNotBlank(upperLimit)) { + targetSchemeDetailPO.setUpperLimit(upperLimit); + } + String lowerLimit = importDataMap.getOrDefault("基数下限", "").toString(); + if (StringUtils.isNotBlank(lowerLimit)) { + targetSchemeDetailPO.setLowerLimit(lowerLimit); + } + String paymentProportion = importDataMap.getOrDefault("缴纳比例", "").toString(); + if (StringUtils.isNotBlank(paymentProportion)) { + targetSchemeDetailPO.setPaymentProportion(paymentProportion); + } + String fixedCost = importDataMap.getOrDefault("固定费用", "").toString(); + if (StringUtils.isNotBlank(fixedCost)) { + targetSchemeDetailPO.setFixedCost(fixedCost); + } + String validNum = importDataMap.getOrDefault("有效小数位", "").toString(); + if (StringUtils.isNotBlank(validNum)) { + targetSchemeDetailPO.setValidNum(Integer.valueOf(validNum)); + } + String rententionRule = importDataMap.getOrDefault("进位规则", "").toString(); + if (StringUtils.isNotBlank(rententionRule)) { + targetSchemeDetailPO.setRententionRule(Integer.valueOf(rententionRule)); + } + targetSchemeDetailPO.setUpdateTime(new Date()); + + updateSchemeDetails.add(targetSchemeDetailPO); + + } + //更新方案明细 + if (updateSchemeDetails.size() > 0) { + encryptUtil.encryptList(updateSchemeDetails, InsuranceSchemeDetailPO.class); + updateSchemeDetails.forEach(getInsuranceSchemeDetailMapper()::updateAll); + } + + + } catch (Exception e) { + log.error("福利方案更新异常", e); + requestInfo.getRequestManager().setMessage(e.getMessage()); + return FAILURE_AND_CONTINUE; + } + return SUCCESS; + } + + + class SalaryField { + + private String processField; + + private String salaryName; + + private String value; + + public String getProcessField() { + return processField; + } + + public void setProcessField(String processField) { + this.processField = processField; + } + + public String getSalaryName() { + return salaryName; + } + + public void setSalaryName(String salaryName) { + this.salaryName = salaryName; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public SalaryField(String processField, String salaryName, String value) { + this.processField = processField; + this.salaryName = salaryName; + this.value = value; + } + } +} diff --git a/src/com/engine/salary/mapper/sischeme/InsuranceSchemeDetailMapper.xml b/src/com/engine/salary/mapper/sischeme/InsuranceSchemeDetailMapper.xml index 132fd1c49..dba56d9b9 100644 --- a/src/com/engine/salary/mapper/sischeme/InsuranceSchemeDetailMapper.xml +++ b/src/com/engine/salary/mapper/sischeme/InsuranceSchemeDetailMapper.xml @@ -336,6 +336,12 @@ fixed_cost=#{fixedCost}, + + valid_num=#{validNum}, + + + rentention_rule=#{rententionRule}, + WHERE id = #{id} AND delete_type = 0 From 5bd66b626f32644fdba1d1c806e859c4674caf48 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 19 Sep 2023 16:21:23 +0800 Subject: [PATCH 24/37] =?UTF-8?q?=E6=9F=A5=E7=9C=8B=E5=B7=A5=E8=B5=84?= =?UTF-8?q?=E5=8D=95=E5=90=8E=E8=83=BD=E5=A4=9F=E7=BB=A7=E7=BB=AD=E5=8F=8D?= =?UTF-8?q?=E9=A6=88=E3=80=81=E7=A1=AE=E8=AE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/salaryBill/po/SalarySendInfoPO.java | 4 +++- .../engine/salary/service/impl/SalarySendServiceImpl.java | 8 +++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/entity/salaryBill/po/SalarySendInfoPO.java b/src/com/engine/salary/entity/salaryBill/po/SalarySendInfoPO.java index 3a0822673..48f8833b1 100644 --- a/src/com/engine/salary/entity/salaryBill/po/SalarySendInfoPO.java +++ b/src/com/engine/salary/entity/salaryBill/po/SalarySendInfoPO.java @@ -1,6 +1,7 @@ package com.engine.salary.entity.salaryBill.po; import com.engine.salary.enums.datacollection.DataCollectionEmployeeTypeEnum; +import com.engine.salary.enums.salarybill.BillConfimStatusEnum; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -66,7 +67,8 @@ public class SalarySendInfoPO { private Integer billReadStatus; /** - * 确认状态 0:未确认、1:已确认 + * 确认状态 0:未确认、1:已确认、2:已反馈 + * @see BillConfimStatusEnum */ private Integer billConfirmStatus; diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 94658397e..f1efc0554 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -613,7 +613,13 @@ public class SalarySendServiceImpl extends Service implements SalarySendService map.put("salaryAcctResult", salaryAcctResultS); // 工资单发送人、是否已确认 if (NumberUtils.compare(salaryTemplate.getAckFeedbackStatus(),1) == 0) { - map.put("confirmStatus", salarySendInfo.getBillConfirmStatus() == null ? "0" : salarySendInfo.getBillConfirmStatus().toString()); + // 反馈后还可以确认或反馈按钮,确认后2个按钮消失 + Integer confirmStatus = salarySendInfo.getBillConfirmStatus(); + if (confirmStatus == null || confirmStatus != BillConfimStatusEnum.CONFIRMED.getValue()) { + map.put("confirmStatus", "0"); + } else { + map.put("confirmStatus", "1"); + } map.put("sendEmployeeId", salarySendInfo.getSendEmployeeId()); }else{ map.put("confirmStatus", "1"); From 0eafc0ce94ecd88f0315a7c356867cf9c7a8e6e3 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 20 Sep 2023 09:10:47 +0800 Subject: [PATCH 25/37] =?UTF-8?q?=E6=8A=A5=E8=A1=A8temp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...SalaryStatisticsDataPerspectiveQueryParam.java | 4 ++++ .../SalaryStatisticsReportDataQueryParam.java | 2 +- .../SalaryStatisticsPushDetailServiceImpl.java | 2 +- .../impl/SalaryStatisticsPushServiceImpl.java | 4 ++-- .../wrapper/SalaryStatisticsReportWrapper.java | 15 +++++++++------ 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsDataPerspectiveQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsDataPerspectiveQueryParam.java index a66763b27..d0afd0c00 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsDataPerspectiveQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsDataPerspectiveQueryParam.java @@ -80,4 +80,8 @@ public class SalaryStatisticsDataPerspectiveQueryParam extends BaseQueryParam { @JsonIgnore // 离职日期 private List leavedate; + + + // 是否是分享报表 + private boolean isShare; } \ No newline at end of file diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java index 18d08a36e..62db15b0d 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java @@ -81,7 +81,7 @@ public class SalaryStatisticsReportDataQueryParam extends BaseQueryParam { private Integer unitType; // 是否是分享报表 - private Boolean share; + private boolean isShare; @ApiModelProperty("分享批次id") private Long batchId; diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsPushDetailServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsPushDetailServiceImpl.java index 64bc53c82..4c9b1d084 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsPushDetailServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsPushDetailServiceImpl.java @@ -97,7 +97,7 @@ public class SalaryStatisticsPushDetailServiceImpl extends Service implements Sa public List getSuccessPushDetailListByReceiver(Long uid) { List detailList = listSome(SalaryStatisticsPushDetailPO.builder() - .creator(uid) + .employeeId(uid) .pushStatus("true") .deleteType(NumberUtils.INTEGER_ZERO) .build()); diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java index 101c2ca42..1b75b1bea 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java @@ -642,9 +642,9 @@ public class SalaryStatisticsPushServiceImpl extends Service implements SalarySt PageInfo dtoPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), SalaryStatisticsPushTableDTO.class); if (CollectionUtils.isNotEmpty(salaryStatisticsPushPOS)) { // 获取报表名称 key:报表id; value:报表名称 - List recordIds = salaryStatisticsPushPOS.stream().map(po -> Arrays.asList(StringUtils.split(po.getReportIds(), ","))) + List reportIds = salaryStatisticsPushPOS.stream().map(po -> Arrays.asList(StringUtils.split(po.getReportIds(), ","))) .flatMap(Collection::stream).distinct().map(Long::valueOf).collect(Collectors.toList()); - Map statisticsNameMap = SalaryEntityUtil.convert2Map(getSalaryStatisticsReportService(user).getByIds(recordIds), SalaryStatisticsReportPO::getId, SalaryStatisticsReportPO::getReportName); + Map statisticsNameMap = SalaryEntityUtil.convert2Map(getSalaryStatisticsReportService(user).getByIds(reportIds), SalaryStatisticsReportPO::getId, SalaryStatisticsReportPO::getReportName); // 获取报表分享明细 key:批次id; value:分享明细列表 List batchIds = salaryStatisticsPushPOS.stream().map(po -> Long.valueOf(po.getId())).collect(Collectors.toList()); diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index c13b0fe59..d176e23df 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -15,7 +15,10 @@ import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.report.common.constant.SalaryConstant; import com.engine.salary.report.entity.bo.SalaryStatisticsReportBO; import com.engine.salary.report.entity.param.*; -import com.engine.salary.report.entity.po.*; +import com.engine.salary.report.entity.po.SalaryStatisticsDimensionPO; +import com.engine.salary.report.entity.po.SalaryStatisticsItemPO; +import com.engine.salary.report.entity.po.SalaryStatisticsPushPO; +import com.engine.salary.report.entity.po.SalaryStatisticsReportPO; import com.engine.salary.report.service.*; import com.engine.salary.report.service.impl.*; import com.engine.salary.service.SalaryAcctEmployeeService; @@ -268,7 +271,7 @@ public class SalaryStatisticsReportWrapper extends Service { if (po == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); } - if (1+1==2 || param.getShare()) { + if (param.isShare()) { // 是被分享的报表 Long uid = Long.valueOf(user.getUID()); // 校验查看权限,获取有效的分享记录 @@ -282,7 +285,7 @@ public class SalaryStatisticsReportWrapper extends Service { user = creator; } else { // 判断报表是否是登陆人创建的 - if (NumberUtils.compare(po.getCreator().intValue(), user.getUID()) == 0) { + if (NumberUtils.compare(po.getCreator().intValue(), user.getUID()) != 0) { throw new SalaryRunTimeException("无权限查看该报表!"); } } @@ -354,7 +357,7 @@ public class SalaryStatisticsReportWrapper extends Service { if (dimension == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在")); } - sharedReportCheck(true, po); + sharedReportCheck(param.isShare(), po); // 参数转换 SalaryStatisticsReportBO.poToQueryParam(param, po); @@ -431,7 +434,7 @@ public class SalaryStatisticsReportWrapper extends Service { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在")); } // 校验报表权限,如果是被分享报表修改User - sharedReportCheck(true, po); + sharedReportCheck(param.isShare(), po); // 查询自定义统计项目中所有薪资项目id List salaryStatisticsItemPOS = getSalaryStatisticsItemService(user).listByStatisticsReportId(param.getId()); List salaryItemIds = salaryStatisticsItemPOS.stream().filter(item -> StringUtils.isNotBlank(item.getItemValue())).map(p -> p.getItemValue().split(",")) @@ -480,7 +483,7 @@ public class SalaryStatisticsReportWrapper extends Service { user = creator; } else { // 判断报表是否是登陆人创建的 - if (NumberUtils.compare(po.getCreator().intValue(), user.getUID()) == 0) { + if (NumberUtils.compare(po.getCreator().intValue(), user.getUID()) != 0) { throw new SalaryRunTimeException("无权限查看该报表!"); } } From dc93a96c8d703184de527e94d3c68277fb269225 Mon Sep 17 00:00:00 2001 From: sy Date: Wed, 20 Sep 2023 14:13:00 +0800 Subject: [PATCH 26/37] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97=EF=BC=8C=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=A0=B8=E7=AE=97=E6=95=B0=E6=8D=AE=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SIAccountServiceImpl.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 95042d4c6..28284861f 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -955,32 +955,32 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { InsuranceAccountDetailPO repairSiAcct = siAcctResultWithEmpAndPayStatus.get(item.getEmployeeId() + "_" + PaymentStatusEnum.REPAIR.getValue()); InsuranceAccountDetailPO balanceSiAcct = siAcctResultWithEmpAndPayStatus.get(item.getEmployeeId() + "_" + PaymentStatusEnum.BALANCE.getValue()); //取正常缴纳的福利基数信息 - if (StringUtils.isNotEmpty(commonSiAcct.getSocialPaymentBaseString())) { + if (commonSiAcct != null && StringUtils.isNotEmpty(commonSiAcct.getSocialPaymentBaseString())) { Map socialBaseJson = JSON.parseObject(commonSiAcct.getSocialPaymentBaseString(), new HashMap().getClass()); socialBaseJson.forEach((k, v) -> { record.put(k + "socialBase", v); }); } - if (StringUtils.isNotEmpty(commonSiAcct.getFundPaymentBaseString())) { + if (commonSiAcct != null && StringUtils.isNotEmpty(commonSiAcct.getFundPaymentBaseString())) { Map fundBaseJson = JSON.parseObject(commonSiAcct.getFundPaymentBaseString(), new HashMap().getClass()); fundBaseJson.forEach((k, v) -> { record.put(k + "fundBase", v); }); } - if (StringUtils.isNotEmpty(commonSiAcct.getOtherPaymentBaseString())) { + if (commonSiAcct != null && StringUtils.isNotEmpty(commonSiAcct.getOtherPaymentBaseString())) { Map otherBaseJson = JSON.parseObject(commonSiAcct.getOtherPaymentBaseString(), new HashMap().getClass()); otherBaseJson.forEach((k, v) -> { record.put(k + "otherBase", v); }); } //社保-正常缴纳 - if (StringUtils.isNotEmpty(commonSiAcct.getSocialPerJson())) { + if (commonSiAcct != null && StringUtils.isNotEmpty(commonSiAcct.getSocialPerJson())) { Map socialJson = JSON.parseObject(commonSiAcct.getSocialPerJson(), new HashMap().getClass()); socialJson.forEach((k, v) -> { record.put(k + "socialCommonPer", v); }); } - if (StringUtils.isNotEmpty(commonSiAcct.getSocialComJson())) { + if (commonSiAcct != null && StringUtils.isNotEmpty(commonSiAcct.getSocialComJson())) { Map socialJson = JSON.parseObject(commonSiAcct.getSocialComJson(), new HashMap().getClass()); socialJson.forEach((k, v) -> { record.put(k + "socialCommonCom", v); @@ -1020,13 +1020,13 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { record.put("socialComBalanceSum", balanceSiAcct != null ? balanceSiAcct.getSocialComSum() : new BigDecimal("0")); //公积金-正常缴纳 - if (StringUtils.isNotEmpty(commonSiAcct.getFundPerJson())) { + if (commonSiAcct != null && StringUtils.isNotEmpty(commonSiAcct.getFundPerJson())) { Map socialJson = JSON.parseObject(commonSiAcct.getFundPerJson(), new HashMap().getClass()); socialJson.forEach((k, v) -> { record.put(k + "fundCommonPer", v); }); } - if (StringUtils.isNotEmpty(commonSiAcct.getFundComJson())) { + if (commonSiAcct != null && StringUtils.isNotEmpty(commonSiAcct.getFundComJson())) { Map socialJson = JSON.parseObject(commonSiAcct.getFundComJson(), new HashMap().getClass()); socialJson.forEach((k, v) -> { record.put(k + "fundCommonCom", v); @@ -1066,13 +1066,13 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { record.put("fundComBalanceSum", balanceSiAcct != null ? balanceSiAcct.getFundComSum() : new BigDecimal("0")); //其他福利-正常缴纳 - if (StringUtils.isNotEmpty(commonSiAcct.getOtherPerJson())) { + if (commonSiAcct != null && StringUtils.isNotEmpty(commonSiAcct.getOtherPerJson())) { Map otherJson = JSON.parseObject(commonSiAcct.getOtherPerJson(), new HashMap().getClass()); otherJson.forEach((k, v) -> { record.put(k + "otherCommonPer", v); }); } - if (StringUtils.isNotEmpty(commonSiAcct.getOtherComJson())) { + if (commonSiAcct != null && StringUtils.isNotEmpty(commonSiAcct.getOtherComJson())) { Map otherJson = JSON.parseObject(commonSiAcct.getOtherComJson(), new HashMap().getClass()); otherJson.forEach((k, v) -> { record.put(k + "otherCommonCom", v); From 74e4d39b83853dd60bad44518e886586be100643 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 20 Sep 2023 15:02:44 +0800 Subject: [PATCH 27/37] =?UTF-8?q?=E6=8A=A5=E8=A1=A8fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryStatisticsPushDetailMapper.xml | 2 +- .../impl/SalaryStatisticsPushServiceImpl.java | 31 ++++++++++++++----- .../SalaryStatisticsReportWrapper.java | 31 ++++++++++--------- 3 files changed, 42 insertions(+), 22 deletions(-) diff --git a/src/com/engine/salary/mapper/report/salaryStatisticsPushDetailMapper.xml b/src/com/engine/salary/mapper/report/salaryStatisticsPushDetailMapper.xml index 9db97d016..03bb7321e 100644 --- a/src/com/engine/salary/mapper/report/salaryStatisticsPushDetailMapper.xml +++ b/src/com/engine/salary/mapper/report/salaryStatisticsPushDetailMapper.xml @@ -288,7 +288,7 @@ - reback_time is null, + reback_time = null, reback_time=#{rebackTime}, diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java index 1b75b1bea..0badf0fb9 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java @@ -22,7 +22,9 @@ import com.engine.salary.report.service.SalaryStatisticsPushService; import com.engine.salary.report.service.SalaryStatisticsReportService; import com.engine.salary.report.util.ReportTimeUtil; import com.engine.salary.service.SalaryEmployeeService; +import com.engine.salary.service.TaxAgentService; import com.engine.salary.service.impl.SalaryEmployeeServiceImpl; +import com.engine.salary.service.impl.TaxAgentServiceImpl; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; @@ -64,6 +66,10 @@ public class SalaryStatisticsPushServiceImpl extends Service implements SalarySt return ServiceUtil.getService(SalaryStatisticsReportServiceImpl.class, user); } + private TaxAgentService getTaxAgentService(User user) { + return (TaxAgentService) ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + @Override public Map getPushForm() { Map resultMap = new HashMap<>(); @@ -102,10 +108,12 @@ public class SalaryStatisticsPushServiceImpl extends Service implements SalarySt private List> buildReportIdsOptions(Long employeeId) { List> reportIdsOptions = new ArrayList<>(); List reportPOS = getSalaryStatisticsReportService(user).listAll(); - // 只能够分享创建人是本人的报表 - reportPOS.stream().filter(po -> - po.getCreator().compareTo(employeeId) == 0 - ).forEach( po -> { + Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); + if (needAuth) { + // 只能够分享创建人是本人的报表 + reportPOS = reportPOS.stream().filter(po -> po.getCreator().compareTo(employeeId) == 0).collect(Collectors.toList()); + } + reportPOS.forEach( po -> { Map option = new HashMap<>(); option.put("id", po.getId().toString()); option.put("reportName", po.getReportName()); @@ -121,7 +129,8 @@ public class SalaryStatisticsPushServiceImpl extends Service implements SalarySt if (Objects.isNull(salaryStatisticsPushPO)) { throw new SalaryRunTimeException("该分享记录不存在"); } - if (salaryStatisticsPushPO.getCreator().compareTo(Long.valueOf(user.getUID())) != 0) { + Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); + if (needAuth && salaryStatisticsPushPO.getCreator().compareTo(Long.valueOf(user.getUID())) != 0) { throw new SalaryRunTimeException("无权查看该分享记录"); } SalaryStatisticsPushDetail result = new SalaryStatisticsPushDetail(); @@ -268,7 +277,7 @@ public class SalaryStatisticsPushServiceImpl extends Service implements SalarySt @Override public void updateReportViewStatus(List batchId, Long uid) { List salaryStatisticsPushDetailPOS = getSalaryStatisticsPushDetailService(user).queryPushDetailPOByBatchIds(batchId); - salaryStatisticsPushDetailPOS.stream().filter(po -> Objects.equals(po.getPushStatus(), "true") && po.getRebackStatus() == null && Objects.equals(uid, po.getEmployeeId())) + salaryStatisticsPushDetailPOS.stream().filter(po -> Objects.equals(po.getPushStatus(), "true") && !(Objects.equals(po.getRebackStatus(), "true")) && Objects.equals(uid, po.getEmployeeId())) .collect(Collectors.toList()).forEach(e -> { e.setViewStatus("true"); e.setUpdateTime(new Date()); @@ -378,6 +387,7 @@ public class SalaryStatisticsPushServiceImpl extends Service implements SalarySt PO.setPushStatus("true"); PO.setRebackStatus(""); PO.setRebackTime(""); + PO.setViewStatus("false"); // PO.setMsgId(result.getData()); PO.setPushTime(ReportTimeUtil.getFormatLocalDateTime(LocalDateTime.now())); PO.setUpdateTime(now); @@ -637,7 +647,14 @@ public class SalaryStatisticsPushServiceImpl extends Service implements SalarySt @Override public PageInfo getPushTable(BaseQueryParam param) { - List salaryStatisticsPushPOS = getSalaryStatisticsPushMapper().listSome(SalaryStatisticsPushPO.builder().creator(Long.valueOf(user.getUID())).build()); + Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); + List salaryStatisticsPushPOS; + if (needAuth) { + salaryStatisticsPushPOS = getSalaryStatisticsPushMapper().listSome(SalaryStatisticsPushPO.builder().creator(Long.valueOf(user.getUID())).build()); + } else { + salaryStatisticsPushPOS = getSalaryStatisticsPushMapper().listSome(SalaryStatisticsPushPO.builder().build()); + } + salaryStatisticsPushPOS = SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), salaryStatisticsPushPOS); PageInfo dtoPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), SalaryStatisticsPushTableDTO.class); if (CollectionUtils.isNotEmpty(salaryStatisticsPushPOS)) { diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index d176e23df..5ee853229 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -21,14 +21,8 @@ import com.engine.salary.report.entity.po.SalaryStatisticsPushPO; import com.engine.salary.report.entity.po.SalaryStatisticsReportPO; import com.engine.salary.report.service.*; import com.engine.salary.report.service.impl.*; -import com.engine.salary.service.SalaryAcctEmployeeService; -import com.engine.salary.service.SalaryAcctResultService; -import com.engine.salary.service.SalaryCacheService; -import com.engine.salary.service.SalaryItemService; -import com.engine.salary.service.impl.SalaryAcctEmployeeServiceImpl; -import com.engine.salary.service.impl.SalaryAcctResultServiceImpl; -import com.engine.salary.service.impl.SalaryCacheServiceImpl; -import com.engine.salary.service.impl.SalaryItemServiceImpl; +import com.engine.salary.service.*; +import com.engine.salary.service.impl.*; import com.engine.salary.util.*; import com.engine.salary.util.excel.ExcelUtilPlus; import com.engine.salary.util.page.PageInfo; @@ -99,6 +93,10 @@ public class SalaryStatisticsReportWrapper extends Service { return ServiceUtil.getService(SalaryStatisticsPushDetailServiceImpl.class, user); } + private TaxAgentService getTaxAgentService(User user) { + return ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + /** * 报表列表 @@ -111,12 +109,14 @@ public class SalaryStatisticsReportWrapper extends Service { // 初始化 getSalaryStatisticsDimensionService(user).init(uid); - // 所有人能够看到自己创建的报表 + // 所有人能够看到自己创建的报表,薪酬总管理员能够查看所有报表 List reportList = getSalaryStatisticsReportService(user).listByCreator(uid); + List reportIds = reportList.stream().map(SalaryStatisticsReportPO::getId).collect(Collectors.toList()); // 获取所有没有撤回没有过期的报表ID(不包含过期失效的) List pushList = getSalaryStatisticsPushService(user).getSuccessPushListByReceiver(uid); List sharedReportIds = pushList.stream().map(po -> Arrays.asList(StringUtils.split(po.getReportIds(), ","))) .flatMap(Collection::stream).distinct().map(Long::valueOf).collect(Collectors.toList()); + sharedReportIds = sharedReportIds.stream().filter(id -> !reportIds.contains(id)).collect(Collectors.toList()); reportList.addAll(getSalaryStatisticsReportService(user).getByIds(sharedReportIds)); if (StringUtils.isNotEmpty(queryParam.getReportName())) { @@ -125,6 +125,7 @@ public class SalaryStatisticsReportWrapper extends Service { List salaryStatisticsDimensionList = this.getSalaryStatisticsDimensionService(user).listAll(); Map salaryStatisticsDimensionMap = SalaryEntityUtil.convert2Map(salaryStatisticsDimensionList, k -> k.getId().toString(), SalaryStatisticsDimensionPO::getDimName); List> result = new ArrayList<>(); + List finalSharedReportIds = sharedReportIds; reportList.forEach(po -> { Map temp = new HashMap<>(); temp.put("id", po.getId().toString()); @@ -133,7 +134,7 @@ public class SalaryStatisticsReportWrapper extends Service { List dimNames = Arrays.stream(po.getDimension().split(",")).map(dim -> Optional.ofNullable(salaryStatisticsDimensionMap.get(dim)).orElse("")).collect(Collectors.toList()); temp.put("dimension", StringUtils.join(dimNames, ",")); temp.put("dimensionId", po.getDimension()); - temp.put("isShare", sharedReportIds.contains(po.getId())); + temp.put("isShare", finalSharedReportIds.contains(po.getId())); result.add(temp); }); return result; @@ -284,8 +285,9 @@ public class SalaryStatisticsReportWrapper extends Service { creator.setUid(po.getCreator().intValue()); user = creator; } else { - // 判断报表是否是登陆人创建的 - if (NumberUtils.compare(po.getCreator().intValue(), user.getUID()) != 0) { + // 判断报表是否是登陆人创建的,或薪酬总管理员 + Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); + if (needAuth && NumberUtils.compare(po.getCreator().intValue(), user.getUID()) != 0) { throw new SalaryRunTimeException("无权限查看该报表!"); } } @@ -482,8 +484,9 @@ public class SalaryStatisticsReportWrapper extends Service { creator.setUid(po.getCreator().intValue()); user = creator; } else { - // 判断报表是否是登陆人创建的 - if (NumberUtils.compare(po.getCreator().intValue(), user.getUID()) != 0) { + // 判断报表是否是登陆人创建的,或薪酬总管理员 + Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); + if (needAuth && NumberUtils.compare(po.getCreator().intValue(), user.getUID()) != 0) { throw new SalaryRunTimeException("无权限查看该报表!"); } } From c40c31845c65bbae2043a85c0729fc6985520064 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 20 Sep 2023 15:26:18 +0800 Subject: [PATCH 28/37] =?UTF-8?q?=E8=B4=A6=E5=A5=97=E4=B8=AD=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=85=AC=E5=BC=8F=E4=B8=BA=E8=BE=93=E5=85=A5=EF=BC=8C?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=E7=9A=84=E5=85=AC=E5=BC=8F=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E4=B8=BA=E7=A9=BA=E5=AD=97=E7=AC=A6=E4=B8=B2?= =?UTF-8?q?=E4=B8=8D=E6=98=AF=E2=80=9D=E8=BE=93=E5=85=A5=E2=80=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 73558cd0b..d811aee21 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -493,7 +493,7 @@ public class SalaryAcctResultBO { Map resultValueMap, Map formulaContentMap) { - SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByValue(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getValueType).orElse(0)); + SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByValue(Optional.ofNullable(salarySobItemPO).map(SalarySobItemPO::getValueType).orElse(0)); String itemFormulaContent; if(Objects.equals(salaryValueTypeEnum.getValue(),SalaryValueTypeEnum.FORMULA.getValue())){ itemFormulaContent = Optional.ofNullable(formulaContentMap.get(salarySobItemPO.getSalaryItemId().toString())).map(SalaryAcctResultListColumnDTO::getFormulaContent).orElse(""); From 05507180eb2ee1f08ee3a38e55ef7c35c434a7e8 Mon Sep 17 00:00:00 2001 From: sy Date: Wed, 20 Sep 2023 15:40:31 +0800 Subject: [PATCH 29/37] =?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=E8=B0=83=E5=B7=AE?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E6=97=B6=E5=88=A4=E6=96=AD=E8=B0=83=E5=B7=AE?= =?UTF-8?q?=E5=88=B0=E5=AF=B9=E8=B1=A1=E6=98=AF=E5=90=A6=E4=B8=BA=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E8=8C=83=E5=9B=B4=E5=86=85=E7=A6=8F=E5=88=A9=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SICompensationServiceImpl.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/com/engine/salary/service/impl/SICompensationServiceImpl.java b/src/com/engine/salary/service/impl/SICompensationServiceImpl.java index 59a5b00c9..8d0e1f579 100644 --- a/src/com/engine/salary/service/impl/SICompensationServiceImpl.java +++ b/src/com/engine/salary/service/impl/SICompensationServiceImpl.java @@ -345,6 +345,11 @@ public class SICompensationServiceImpl extends Service implements SICompensation continue; } + if (!param.getCategoryType().contains(param.getAdjustTo().toString())) { + errorList.add(usernameMap.get(param.getEmployeeId()) + "-调差失败:调差到的福利未正确设置!"); + continue; + } + //判断是否已有调差数据(个税扣缴义务人+账单月份+人员id) // InsuranceCompensationPO nowCompensation = getInsuranceCompensationMapper().getOneByBillMonthPayOrgEmpId(InsuranceCompensationPO.builder() // .billMonth(insuranceAccountDetailPO.getBillMonth()) From 3167aaab63de99c4f202b1c2f7beec55b1ecdc20 Mon Sep 17 00:00:00 2001 From: sy Date: Wed, 20 Sep 2023 17:29:44 +0800 Subject: [PATCH 30/37] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=96=B9=E6=A1=88=EF=BC=8C=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/sischeme/param/InsuranceSchemeParam.java | 6 ++++++ src/com/engine/salary/service/impl/SISchemeServiceImpl.java | 3 +++ 2 files changed, 9 insertions(+) diff --git a/src/com/engine/salary/entity/sischeme/param/InsuranceSchemeParam.java b/src/com/engine/salary/entity/sischeme/param/InsuranceSchemeParam.java index fd7deadb1..cdc4b29f4 100644 --- a/src/com/engine/salary/entity/sischeme/param/InsuranceSchemeParam.java +++ b/src/com/engine/salary/entity/sischeme/param/InsuranceSchemeParam.java @@ -1,6 +1,7 @@ package com.engine.salary.entity.sischeme.param; import com.engine.salary.common.BaseQueryParam; +import com.engine.salary.enums.sicategory.PaymentTypeEnum; import com.engine.salary.enums.sicategory.WelfareTypeEnum; import lombok.AllArgsConstructor; import lombok.Builder; @@ -24,6 +25,11 @@ public class InsuranceSchemeParam extends BaseQueryParam { private WelfareTypeEnum welfareTypeEnum; + /** + * 缴纳类型 + */ + private PaymentTypeEnum paymentTypeEnum; + /** * 方案名称 */ diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index 44400f3c4..b4766b277 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -195,6 +195,9 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { public PageInfo list(InsuranceSchemeParam queryParam) { SalaryAssert.notNull(queryParam.getWelfareTypeEnum(), SalaryI18nUtil.getI18nLabel(84026, "参数错误")); queryParam.setWelfareType(queryParam.getWelfareTypeEnum().getValue()); + if (queryParam.getPaymentTypeEnum() != null) { + queryParam.setPaymentType(queryParam.getPaymentTypeEnum().getValue()); + } Long currentEmployeeId = (long) user.getUID(); List insuranceSchemePOS; Boolean needAuth = getTaxAgentService().isNeedAuth(currentEmployeeId); From dfc8a1c57888b1f974e7143a1da731fc673a547b Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 21 Sep 2023 09:38:38 +0800 Subject: [PATCH 31/37] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=85=B1=E4=BA=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/report/web/SalaryStatisticsReportController.java | 3 ++- src/com/engine/salary/service/TaxAgentService.java | 2 +- src/com/engine/salary/service/impl/TaxAgentServiceImpl.java | 6 ++++-- src/com/engine/salary/web/TaxAgentController.java | 4 +++- src/com/engine/salary/wrapper/TaxAgentWrapper.java | 4 ++-- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java index 4b89b6bf0..010547fab 100644 --- a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java +++ b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java @@ -6,6 +6,7 @@ import com.engine.salary.report.wrapper.SalaryStatisticsReportWrapper; import com.engine.salary.util.ResponseResult; import io.swagger.v3.oas.annotations.parameters.RequestBody; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; @@ -150,9 +151,9 @@ public class SalaryStatisticsReportController { SalaryStatisticsReportDataQueryParam param = SalaryStatisticsReportDataQueryParam.builder() .id(Long.parseLong(request.getParameter("id"))) .dimensionId(Long.parseLong(request.getParameter("dimensionId"))) + .isShare(StringUtils.equals(request.getParameter("isShare"), "true")) .build(); try { - User user = HrmUserVarify.getUser(request, response); Map map = getSalaryStatisticsReportWrapper(user).exportData(param); XSSFWorkbook workbook = (XSSFWorkbook) map.get("workbook"); diff --git a/src/com/engine/salary/service/TaxAgentService.java b/src/com/engine/salary/service/TaxAgentService.java index 2890f94b8..1f11c8844 100644 --- a/src/com/engine/salary/service/TaxAgentService.java +++ b/src/com/engine/salary/service/TaxAgentService.java @@ -174,7 +174,7 @@ public interface TaxAgentService { * * @return */ - List> selectList(); + List> selectList(boolean needAuth); /** * 获取作为管理员的个税扣缴义务人的下拉列表 diff --git a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java index d3cbc3999..e2e01023f 100644 --- a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java @@ -551,9 +551,11 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { } @Override - public List> selectList() { + public List> selectList(boolean needAuth) { List taxAgents = getTaxAgentMapper().listAll(); - taxAgents = handleForDevolution(taxAgents, (long) user.getUID(), true); + if (needAuth) { + taxAgents = handleForDevolution(taxAgents, (long) user.getUID(), true); + } return taxAgents.stream().map(m -> { Map map = new HashMap<>(2); map.put("id", String.valueOf(m.getId())); diff --git a/src/com/engine/salary/web/TaxAgentController.java b/src/com/engine/salary/web/TaxAgentController.java index aad5e89e3..7aee3ea8b 100644 --- a/src/com/engine/salary/web/TaxAgentController.java +++ b/src/com/engine/salary/web/TaxAgentController.java @@ -15,6 +15,7 @@ import com.engine.salary.wrapper.TaxAgentBaseWrapper; import com.engine.salary.wrapper.TaxAgentSubAdminWrapper; import com.engine.salary.wrapper.TaxAgentWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.apache.commons.lang3.StringUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; @@ -362,7 +363,8 @@ public class TaxAgentController { @Produces(MediaType.APPLICATION_JSON) public String selectList(@Context HttpServletRequest request, @Context HttpServletResponse response) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult, List>>(user).run(getTaxAgentWrapper(user)::selectList); + boolean needAuth = !StringUtils.equals("true", request.getParameter("isShare")); + return new ResponseResult>>(user).run(getTaxAgentWrapper(user)::selectList, needAuth); } @GET diff --git a/src/com/engine/salary/wrapper/TaxAgentWrapper.java b/src/com/engine/salary/wrapper/TaxAgentWrapper.java index a9ff0a88c..027df9952 100644 --- a/src/com/engine/salary/wrapper/TaxAgentWrapper.java +++ b/src/com/engine/salary/wrapper/TaxAgentWrapper.java @@ -293,8 +293,8 @@ public class TaxAgentWrapper extends Service { * * @return */ - public List> selectList() { - return getTaxAgentService(user).selectList(); + public List> selectList(boolean needAuth) { + return getTaxAgentService(user).selectList(needAuth); } public List> selectListAsAdmin() { From 97b451e2030168e240001eaa9c1675b45458f5dd Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 21 Sep 2023 10:05:32 +0800 Subject: [PATCH 32/37] sql --- resource/sqlupgrade/DM/sql202309210203.sql | 40 ++++++++++++++++++ resource/sqlupgrade/GS/sql202309210203.sql | 40 ++++++++++++++++++ resource/sqlupgrade/JC/sql202309210203.sql | 40 ++++++++++++++++++ resource/sqlupgrade/Mysql/sql202309210203.sql | 41 +++++++++++++++++++ .../sqlupgrade/Oracle/sql202309210203.sql | 40 ++++++++++++++++++ resource/sqlupgrade/PG/sql202309210203.sql | 40 ++++++++++++++++++ .../sqlupgrade/SQLServer/sql202309210203.sql | 40 ++++++++++++++++++ resource/sqlupgrade/ST/sql202309210203.sql | 40 ++++++++++++++++++ 8 files changed, 321 insertions(+) create mode 100644 resource/sqlupgrade/DM/sql202309210203.sql create mode 100644 resource/sqlupgrade/GS/sql202309210203.sql create mode 100644 resource/sqlupgrade/JC/sql202309210203.sql create mode 100644 resource/sqlupgrade/Mysql/sql202309210203.sql create mode 100644 resource/sqlupgrade/Oracle/sql202309210203.sql create mode 100644 resource/sqlupgrade/PG/sql202309210203.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202309210203.sql create mode 100644 resource/sqlupgrade/ST/sql202309210203.sql diff --git a/resource/sqlupgrade/DM/sql202309210203.sql b/resource/sqlupgrade/DM/sql202309210203.sql new file mode 100644 index 000000000..e29314273 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202309210203.sql @@ -0,0 +1,40 @@ +create table hrsa_report_push +( + id NUMBER(38,0) primary key , + create_time DATE default sysdate, + update_time DATE default sysdate, + creator NUMBER(38,0), + delete_type number default 0, + tenant_key varchar2(10), + msg_id NUMBER(38,0), + report_ids varchar2(500), + start_time varchar2(30), + end_time varchar2(30), + push_channel varchar2(30), + email_account varchar2(30), + mark varchar2(100), + push_title varchar2(30), + email_account_id number, + remind NUMBER +); +/ + +create table hrsa_report_push_detail +( + id NUMBER(38,0) primary key , + create_time DATE default sysdate, + update_time DATE default sysdate, + creator NUMBER(38,0), + delete_type int default 0, + tenant_key varchar2(10), + msg_id NUMBER(38,0), + employee_id NUMBER(38,0), + push_time varchar2(30), + push_status varchar2(5), + reback_time varchar2(30), + reback_status varchar2(5), + batch_id NUMBER(38,0), + view_status varchar2(10) +); +/ + diff --git a/resource/sqlupgrade/GS/sql202309210203.sql b/resource/sqlupgrade/GS/sql202309210203.sql new file mode 100644 index 000000000..e29314273 --- /dev/null +++ b/resource/sqlupgrade/GS/sql202309210203.sql @@ -0,0 +1,40 @@ +create table hrsa_report_push +( + id NUMBER(38,0) primary key , + create_time DATE default sysdate, + update_time DATE default sysdate, + creator NUMBER(38,0), + delete_type number default 0, + tenant_key varchar2(10), + msg_id NUMBER(38,0), + report_ids varchar2(500), + start_time varchar2(30), + end_time varchar2(30), + push_channel varchar2(30), + email_account varchar2(30), + mark varchar2(100), + push_title varchar2(30), + email_account_id number, + remind NUMBER +); +/ + +create table hrsa_report_push_detail +( + id NUMBER(38,0) primary key , + create_time DATE default sysdate, + update_time DATE default sysdate, + creator NUMBER(38,0), + delete_type int default 0, + tenant_key varchar2(10), + msg_id NUMBER(38,0), + employee_id NUMBER(38,0), + push_time varchar2(30), + push_status varchar2(5), + reback_time varchar2(30), + reback_status varchar2(5), + batch_id NUMBER(38,0), + view_status varchar2(10) +); +/ + diff --git a/resource/sqlupgrade/JC/sql202309210203.sql b/resource/sqlupgrade/JC/sql202309210203.sql new file mode 100644 index 000000000..e29314273 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202309210203.sql @@ -0,0 +1,40 @@ +create table hrsa_report_push +( + id NUMBER(38,0) primary key , + create_time DATE default sysdate, + update_time DATE default sysdate, + creator NUMBER(38,0), + delete_type number default 0, + tenant_key varchar2(10), + msg_id NUMBER(38,0), + report_ids varchar2(500), + start_time varchar2(30), + end_time varchar2(30), + push_channel varchar2(30), + email_account varchar2(30), + mark varchar2(100), + push_title varchar2(30), + email_account_id number, + remind NUMBER +); +/ + +create table hrsa_report_push_detail +( + id NUMBER(38,0) primary key , + create_time DATE default sysdate, + update_time DATE default sysdate, + creator NUMBER(38,0), + delete_type int default 0, + tenant_key varchar2(10), + msg_id NUMBER(38,0), + employee_id NUMBER(38,0), + push_time varchar2(30), + push_status varchar2(5), + reback_time varchar2(30), + reback_status varchar2(5), + batch_id NUMBER(38,0), + view_status varchar2(10) +); +/ + diff --git a/resource/sqlupgrade/Mysql/sql202309210203.sql b/resource/sqlupgrade/Mysql/sql202309210203.sql new file mode 100644 index 000000000..7e893a48d --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202309210203.sql @@ -0,0 +1,41 @@ +create table hrsa_report_push +( + id bigint primary key comment 'ID' , + create_time datetime default now() comment 'ʱ' , + update_time datetime default now() comment '޸ʱ' , + creator bigint comment 'id' , + delete_type int default 0 comment 'Ƿɾ' , + tenant_key varchar(10) comment '⻧KEY' , + msg_id bigint comment 'Ϣid' , + report_ids varchar(500) comment 'id' , + start_time varchar(30) comment 'Чʼʱ' , + end_time varchar(30) comment 'Чʱ' , + push_channel varchar(30) comment '' , + email_account varchar(30) comment 'ʼ˺' , + mark varchar(100) comment '˵' , + push_title varchar(30) comment 'ͱ' , + email_account_id bigint, + remind int +) +; + + +create table hrsa_report_push_detail +( + id bigint primary key comment 'ID' , + create_time datetime default now() comment 'ʱ' , + update_time datetime default now() comment '޸ʱ' , + creator bigint comment 'id' , + delete_type int default 0 comment 'Ƿɾ' , + tenant_key varchar(10) comment '⻧KEY' , + msg_id bigint comment 'Ϣid' , + employee_id bigint comment 'Աid' , + push_time varchar(30) comment 'ʱ' , + push_status varchar(5) comment '״̬' , + reback_time varchar(30) comment 'ʱ' , + reback_status varchar(5) comment '״̬' , + batch_id bigint comment 'id', + view_status varchar(10) +) +; + diff --git a/resource/sqlupgrade/Oracle/sql202309210203.sql b/resource/sqlupgrade/Oracle/sql202309210203.sql new file mode 100644 index 000000000..9eea96c9a --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202309210203.sql @@ -0,0 +1,40 @@ +create table hrsa_report_push +( + id NUMBER(38,0) primary key , + create_time DATE default sysdate, + update_time DATE default sysdate, + creator NUMBER(38,0), + delete_type number default 0, + tenant_key varchar2(10), + msg_id NUMBER(38,0), + report_ids varchar2(500), + start_time varchar2(30), + end_time varchar2(30), + push_channel varchar2(30), + email_account varchar2(30), + mark varchar2(100), + push_title varchar2(30), + email_account_id number, + remind NUMBER +) +/ + + +create table hrsa_report_push_detail +( + id NUMBER(38,0) primary key , + create_time DATE default sysdate, + update_time DATE default sysdate, + creator NUMBER(38,0), + delete_type int default 0, + tenant_key varchar2(10), + msg_id NUMBER(38,0), + employee_id NUMBER(38,0), + push_time varchar2(30), + push_status varchar2(5), + reback_time varchar2(30), + reback_status varchar2(5), + batch_id NUMBER(38,0), + view_status varchar2(10) +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202309210203.sql b/resource/sqlupgrade/PG/sql202309210203.sql new file mode 100644 index 000000000..90c83c99c --- /dev/null +++ b/resource/sqlupgrade/PG/sql202309210203.sql @@ -0,0 +1,40 @@ +create table hrsa_report_push +( + id bigint primary key , + create_time timestamp default now(), + update_time timestamp default now(), + creator bigint, + delete_type int default 0, + tenant_key varchar(10), + msg_id bigint, + report_ids varchar(500), + start_time varchar(30), + end_time varchar(30), + push_channel varchar(30), + email_account varchar(30), + mark varchar(100) , + push_title varchar(30), + email_account_id bigint, + remind int +) +; + + +create table hrsa_report_push_detail +( + id bigint primary key, + create_time timestamp default now(), + update_time timestamp default now() , + creator bigint, + delete_type int default 0 , + tenant_key varchar(10), + msg_id bigint , + employee_id bigint, + push_time varchar(30) , + push_status varchar(5) , + reback_time varchar(30) , + reback_status varchar(5) , + batch_id bigint, + view_status varchar(10) +) +; \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202309210203.sql b/resource/sqlupgrade/SQLServer/sql202309210203.sql new file mode 100644 index 000000000..96c3450e2 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202309210203.sql @@ -0,0 +1,40 @@ +create table hrsa_report_push +( + id bigint primary key, + create_time datetime default getdate(), + update_time datetime default getdate(), + creator bigint, + delete_type int default 0, + tenant_key VARCHAR(255), + msg_id bigint, + report_ids VARCHAR(255), + start_time VARCHAR(255), + end_time VARCHAR(255), + push_channel VARCHAR(255), + email_account VARCHAR(255), + email_account_id bigint, + mark VARCHAR(255), + push_title VARCHAR(255), + remind int +) +GO + + +create table hrsa_report_push_detail +( + id bigint primary key , + create_time datetime default getdate(), + update_time datetime default getdate(), + creator bigint, + delete_type int default 0, + tenant_key VARCHAR(255), + msg_id bigint, + employee_id bigint, + push_time VARCHAR(255), + push_status VARCHAR(255), + reback_time VARCHAR(255), + reback_status VARCHAR(255), + batch_id bigint, + view_status VARCHAR(255) +) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202309210203.sql b/resource/sqlupgrade/ST/sql202309210203.sql new file mode 100644 index 000000000..e29314273 --- /dev/null +++ b/resource/sqlupgrade/ST/sql202309210203.sql @@ -0,0 +1,40 @@ +create table hrsa_report_push +( + id NUMBER(38,0) primary key , + create_time DATE default sysdate, + update_time DATE default sysdate, + creator NUMBER(38,0), + delete_type number default 0, + tenant_key varchar2(10), + msg_id NUMBER(38,0), + report_ids varchar2(500), + start_time varchar2(30), + end_time varchar2(30), + push_channel varchar2(30), + email_account varchar2(30), + mark varchar2(100), + push_title varchar2(30), + email_account_id number, + remind NUMBER +); +/ + +create table hrsa_report_push_detail +( + id NUMBER(38,0) primary key , + create_time DATE default sysdate, + update_time DATE default sysdate, + creator NUMBER(38,0), + delete_type int default 0, + tenant_key varchar2(10), + msg_id NUMBER(38,0), + employee_id NUMBER(38,0), + push_time varchar2(30), + push_status varchar2(5), + reback_time varchar2(30), + reback_status varchar2(5), + batch_id NUMBER(38,0), + view_status varchar2(10) +); +/ + From 3609045de2ff1c226faf6d16a9157f6730306da5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 21 Sep 2023 10:58:19 +0800 Subject: [PATCH 33/37] =?UTF-8?q?=E6=B5=81=E7=A8=8B=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=A1=A3=E6=A1=88=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryArchive/SalaryArchiveActionAPI.java | 13 ++++-- .../SalaryArchiveProcessQueryParam.java | 44 +++++++++++++++++++ .../salary/wrapper/SalaryArchiveWrapper.java | 15 ++++--- 3 files changed, 63 insertions(+), 9 deletions(-) create mode 100644 src/com/engine/salary/process/salaryArchive/SalaryArchiveProcessQueryParam.java diff --git a/src/com/engine/salary/process/salaryArchive/SalaryArchiveActionAPI.java b/src/com/engine/salary/process/salaryArchive/SalaryArchiveActionAPI.java index 1bc669356..0d3d946da 100644 --- a/src/com/engine/salary/process/salaryArchive/SalaryArchiveActionAPI.java +++ b/src/com/engine/salary/process/salaryArchive/SalaryArchiveActionAPI.java @@ -2,8 +2,6 @@ package com.engine.salary.process.salaryArchive; import com.engine.common.util.ServiceUtil; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam; -import com.engine.salary.entity.salaryarchive.param.SalaryArchiveQueryParam; -import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; import com.engine.salary.util.ResponseResult; import com.engine.salary.wrapper.SalaryArchiveWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; @@ -86,12 +84,19 @@ public class SalaryArchiveActionAPI { return new ResponseResult>(user).run(getSalaryArchiveWrapper(user)::adjustmentSalaryArchive, importData); } + /** + * 获取档案信息,默认需要传人员和扣缴义务人id,若只传人员id,发现多个发薪档案会抛出异常提示 + * @param request + * @param response + * @param param + * @return + */ @POST @Path("/salaryArchiveInfo") @Produces(MediaType.APPLICATION_JSON) - public String adjustmentSalaryArchive(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryArchiveQueryParam param) { + public String adjustmentSalaryArchive(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryArchiveProcessQueryParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getSalaryArchiveWrapper(user)::getSalaryArchiveInfo, param); + return new ResponseResult(user).run(getSalaryArchiveWrapper(user)::getSalaryArchiveInfo, param); } diff --git a/src/com/engine/salary/process/salaryArchive/SalaryArchiveProcessQueryParam.java b/src/com/engine/salary/process/salaryArchive/SalaryArchiveProcessQueryParam.java new file mode 100644 index 000000000..04bbeef2d --- /dev/null +++ b/src/com/engine/salary/process/salaryArchive/SalaryArchiveProcessQueryParam.java @@ -0,0 +1,44 @@ +package com.engine.salary.process.salaryArchive; + +import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collection; +import java.util.List; + +/** + * 薪资档案 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//薪资档案查询参数 +public class SalaryArchiveProcessQueryParam { + + private Collection ids; + + /** + * 员工id + */ + private Long employeeId; + + /** + * 扣缴义务人id + */ + private Long taxAgentId; + + /** + * 档案状态 + * @see SalaryArchiveStatusEnum + */ + private List runStatusList; +} diff --git a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java index ff9147988..3e3488f7b 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java @@ -20,6 +20,7 @@ import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.salaryarchive.*; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.process.salaryArchive.SalaryArchiveProcessQueryParam; import com.engine.salary.service.*; import com.engine.salary.service.impl.*; import com.engine.salary.util.SalaryI18nUtil; @@ -53,7 +54,6 @@ public class SalaryArchiveWrapper extends Service { } - private TaxAgentService getTaxAgentService(User user) { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } @@ -442,7 +442,7 @@ public class SalaryArchiveWrapper extends Service { * @return */ public XSSFWorkbook downloadTemplate(SalaryArchiveQueryParam queryParam) { - if(!queryParam.isExtSalaryArchiveList()){ + if (!queryParam.isExtSalaryArchiveList()) { if (queryParam.getListType() == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(109712, "列表类型必传")); } else { @@ -567,20 +567,24 @@ public class SalaryArchiveWrapper extends Service { return getSalaryArchiveService(user).handleRepeatData(); } - public SalaryArchivePO getSalaryArchiveInfo(SalaryArchiveQueryParam param) { - SalaryArchivePO po = SalaryArchivePO.builder().employeeId(param.getEmployeeId()).build(); + public Object getSalaryArchiveInfo(SalaryArchiveProcessQueryParam param) { if (param.getEmployeeId() == null) { throw new SalaryRunTimeException("人员id为空!"); } + SalaryArchivePO po = SalaryArchivePO.builder().employeeId(param.getEmployeeId()).build(); if (param.getTaxAgentId() != null) { po.setTaxAgentId(param.getTaxAgentId()); } + if (CollectionUtils.isNotEmpty(param.getRunStatusList())) { + po.setRunStatusList(param.getRunStatusList()); + } + List list = getSalaryArchiveService(user).listSome(po); if (CollectionUtils.isEmpty(list)) { throw new SalaryRunTimeException("薪资档案不存在!"); } if (list.size() > 1) { - throw new SalaryRunTimeException("存在多个薪资档案!"); + return list; } return list.get(0); } @@ -588,6 +592,7 @@ public class SalaryArchiveWrapper extends Service { /** * 删除薪资档案 + * * @param salaryArchiveIds */ public void deleteSalaryArchive(Collection salaryArchiveIds) { From 9e95e3402bdd8d28e4c94083d3d00ebc4690f8c0 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 21 Sep 2023 11:02:48 +0800 Subject: [PATCH 34/37] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/param/SalaryStatisticsReportDataQueryParam.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java index 62db15b0d..fa1d32dd1 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java @@ -2,7 +2,6 @@ package com.engine.salary.report.entity.param; import com.engine.salary.common.BaseQueryParam; import com.fasterxml.jackson.annotation.JsonIgnore; -import io.swagger.annotations.ApiModelProperty; import lombok.*; import java.util.Date; @@ -83,6 +82,6 @@ public class SalaryStatisticsReportDataQueryParam extends BaseQueryParam { // 是否是分享报表 private boolean isShare; - @ApiModelProperty("分享批次id") + // "分享批次id private Long batchId; } From c86151225dc41cf04c91b684d0d863d099b2477c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 21 Sep 2023 11:43:41 +0800 Subject: [PATCH 35/37] =?UTF-8?q?=E6=B5=81=E7=A8=8B=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=A1=A3=E6=A1=88=E4=BF=A1=E6=81=AFv2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryArchive/SalaryArchiveActionAPI.java | 28 +++++++++++- .../salaryArchive/SalaryArchiveInfo.java | 44 +++++++++++++++++++ .../salary/wrapper/SalaryArchiveWrapper.java | 25 ++++++++++- 3 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 src/com/engine/salary/process/salaryArchive/SalaryArchiveInfo.java diff --git a/src/com/engine/salary/process/salaryArchive/SalaryArchiveActionAPI.java b/src/com/engine/salary/process/salaryArchive/SalaryArchiveActionAPI.java index 0d3d946da..2fa4e2126 100644 --- a/src/com/engine/salary/process/salaryArchive/SalaryArchiveActionAPI.java +++ b/src/com/engine/salary/process/salaryArchive/SalaryArchiveActionAPI.java @@ -1,7 +1,9 @@ package com.engine.salary.process.salaryArchive; import com.engine.common.util.ServiceUtil; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveFormDTO; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam; +import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; import com.engine.salary.util.ResponseResult; import com.engine.salary.wrapper.SalaryArchiveWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; @@ -16,6 +18,7 @@ import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; +import java.util.List; import java.util.Map; @@ -86,18 +89,39 @@ public class SalaryArchiveActionAPI { /** * 获取档案信息,默认需要传人员和扣缴义务人id,若只传人员id,发现多个发薪档案会抛出异常提示 + * + * 废弃,该接口仅返回基础信息。前端调用较为复杂,以后才有获取生效数据接口 * @param request * @param response * @param param - * @return + * @return 档案基础信息 */ @POST @Path("/salaryArchiveInfo") @Produces(MediaType.APPLICATION_JSON) + @Deprecated public String adjustmentSalaryArchive(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryArchiveProcessQueryParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getSalaryArchiveWrapper(user)::getSalaryArchiveInfo, param); + return new ResponseResult(user).run(getSalaryArchiveWrapper(user)::getSalaryArchiveInfo, param); + } + + /** + * 获取档案信息,默认需要传人员和扣缴义务人id,若只传人员id,发现多个发薪档案会抛出异常提示 + * + * 废弃,该接口仅返回基础信息。前端调用较为复杂,以后才有获取生效数据接口 + * @param request + * @param response + * @param param + * @return 档案基础信息 + */ + @POST + @Path("/v2/salaryArchiveInfo") + @Produces(MediaType.APPLICATION_JSON) + public String salaryArchiveInfo(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryArchiveProcessQueryParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryArchiveWrapper(user)::getSalaryArchiveInfoV2, param); } + } diff --git a/src/com/engine/salary/process/salaryArchive/SalaryArchiveInfo.java b/src/com/engine/salary/process/salaryArchive/SalaryArchiveInfo.java new file mode 100644 index 000000000..f244624a3 --- /dev/null +++ b/src/com/engine/salary/process/salaryArchive/SalaryArchiveInfo.java @@ -0,0 +1,44 @@ +package com.engine.salary.process.salaryArchive; + +import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collection; +import java.util.List; + +/** + * 薪资档案 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//薪资档案查询参数 +public class SalaryArchiveInfo { + + private Collection ids; + + /** + * 员工id + */ + private Long employeeId; + + /** + * 扣缴义务人id + */ + private Long taxAgentId; + + /** + * 档案状态 + * @see SalaryArchiveStatusEnum + */ + private List runStatusList; +} diff --git a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java index 3e3488f7b..9ddc60326 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java @@ -567,7 +567,8 @@ public class SalaryArchiveWrapper extends Service { return getSalaryArchiveService(user).handleRepeatData(); } - public Object getSalaryArchiveInfo(SalaryArchiveProcessQueryParam param) { + @Deprecated + public SalaryArchivePO getSalaryArchiveInfo(SalaryArchiveProcessQueryParam param) { if (param.getEmployeeId() == null) { throw new SalaryRunTimeException("人员id为空!"); } @@ -584,11 +585,31 @@ public class SalaryArchiveWrapper extends Service { throw new SalaryRunTimeException("薪资档案不存在!"); } if (list.size() > 1) { - return list; + throw new SalaryRunTimeException("存在多个薪资档案!"); } return list.get(0); } + public List getSalaryArchiveInfoV2(SalaryArchiveProcessQueryParam param) { + if (param.getEmployeeId() == null) { + throw new SalaryRunTimeException("人员id为空!"); + } + SalaryArchivePO po = SalaryArchivePO.builder().employeeId(param.getEmployeeId()).build(); + if (param.getTaxAgentId() != null) { + po.setTaxAgentId(param.getTaxAgentId()); + } + if (CollectionUtils.isNotEmpty(param.getRunStatusList())) { + po.setRunStatusList(param.getRunStatusList()); + } + + List list = getSalaryArchiveService(user).listSome(po); + if (CollectionUtils.isEmpty(list)) { + throw new SalaryRunTimeException("薪资档案不存在!"); + } + + return list.stream().map(a->getFrom(a.getId())).collect(Collectors.toList()); + } + /** * 删除薪资档案 From efa818f8b9a228eea53d062fbe8bca7de2e3f4b4 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 21 Sep 2023 13:36:23 +0800 Subject: [PATCH 36/37] =?UTF-8?q?=E6=A0=B8=E7=AE=97=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=95=B0=E5=80=BC=E9=A1=B9excel=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E4=B8=BA=E6=95=B0=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/component/WeaTableColumnGroup.java | 15 ++ .../salaryacct/bo/SalaryAcctResultBO.java | 12 +- .../impl/SalaryAcctExcelServiceImpl.java | 18 +- .../salary/util/excel/ExcelUtilPlus.java | 198 +++++++++++++++++- 4 files changed, 234 insertions(+), 9 deletions(-) diff --git a/src/com/engine/salary/component/WeaTableColumnGroup.java b/src/com/engine/salary/component/WeaTableColumnGroup.java index 5edef0ba2..dac9a3569 100644 --- a/src/com/engine/salary/component/WeaTableColumnGroup.java +++ b/src/com/engine/salary/component/WeaTableColumnGroup.java @@ -13,6 +13,11 @@ public class WeaTableColumnGroup extends WeaTableColumn { */ private String lockStatus; + /** + * 保留小数位数 + */ + private Integer pattern; + private List children; public WeaTableColumnGroup() { @@ -20,22 +25,32 @@ public class WeaTableColumnGroup extends WeaTableColumn { public WeaTableColumnGroup(String width, String text, String column) { super(width, text, column); + this.pattern = 0; } public WeaTableColumnGroup(String width, String text, String column, String lockStatus) { super(width, text, column); this.lockStatus = lockStatus; + this.pattern = 0; + } + + public WeaTableColumnGroup(String width, String text, String column, String lockStatus, Integer pattern) { + super(width, text, column); + this.lockStatus = lockStatus; + this.pattern = pattern; } public WeaTableColumnGroup(String width, String text, String column, List children) { super(width, text, column); this.children = children; + this.pattern = 0; } public WeaTableColumnGroup(String width, String text, String column, List children, String lockStatus) { super(width, text, column); this.children = children; this.lockStatus = lockStatus; + this.pattern = 0; } } diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 73558cd0b..2497011c1 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -140,9 +140,9 @@ public class SalaryAcctResultBO { List childrenColumns = Lists.newArrayList(); for (SalarySobItemDTO salarySobItemDTO : salarySobItemGroupDTO.getItems()) { if (lockSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) { - childrenColumns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.LOCK.getValue())); + childrenColumns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.LOCK.getValue(), salarySobItemDTO.getPattern())); } else { - childrenColumns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.UNLOCK.getValue())); + childrenColumns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.UNLOCK.getValue(), salarySobItemDTO.getPattern())); } } WeaTableColumnGroup weaTableColumnWapper = new WeaTableColumnGroup("150", salarySobItemGroupDTO.getName(), String.valueOf(salarySobItemGroupDTO.getId()), childrenColumns); @@ -151,18 +151,18 @@ public class SalaryAcctResultBO { // 没有分类的薪资项目 for (SalarySobItemDTO salarySobItemDTO : salarySobItemAggregateDTO.getItems()) { if (lockSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) { - columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.LOCK.getValue())); + columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.LOCK.getValue(), salarySobItemDTO.getPattern())); } else { - columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.UNLOCK.getValue())); + columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.UNLOCK.getValue(), salarySobItemDTO.getPattern())); } } // 回算的薪资项目 for (SalarySobItemDTO salarySobItemDTO : salarySobItemAggregateDTO.getBackCalcItems()) { if (lockSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) { - columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.LOCK.getValue())); + columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.LOCK.getValue(), salarySobItemDTO.getPattern())); } else { - columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.UNLOCK.getValue())); + columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.UNLOCK.getValue(), salarySobItemDTO.getPattern())); } } diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 7dad4d050..35f02da4a 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -54,6 +54,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -61,6 +62,7 @@ import weaver.file.ImageFileManager; import weaver.hrm.User; import java.io.InputStream; +import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -330,6 +332,11 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc if (openSum != null && StringUtils.isNotBlank(openSum.getConfValue()) && OpenEnum.parseByValue(openSum.getConfValue()) == OpenEnum.OPEN) { total = true; Map sumRow = getSalaryAcctResultService(user).sumRow(queryParam); + sumRow.forEach((k,v) -> { + if (NumberUtils.isCreatable(v.toString())) { + sumRow.put(k,new BigDecimal(v.toString())); + } + }); if(sumRow !=null){ sumRow.put("taxAgentName", "总计"); resultMapList.add(sumRow); @@ -337,19 +344,26 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } // excel导出的数据 + String DATA_TYPE_SUFFIX = "_type"; List> rows = new ArrayList<>(); rows.add(headerList); for (Map map : resultMapList) { List row = Lists.newArrayListWithExpectedSize(headerColumnGroup.size()); for (WeaTableColumnGroup weaTableColumn : headerColumnGroup) { - row.add(map.getOrDefault(weaTableColumn.getColumn(), StringUtils.EMPTY)); + String fieldType = (String) map.getOrDefault(weaTableColumn.getColumn().toString() + DATA_TYPE_SUFFIX, StringUtils.EMPTY); + if (StringUtils.equals("number", fieldType)) { + row.add(new BigDecimal(StringUtils.isBlank(map.get(weaTableColumn.getColumn()).toString()) ? "0" :map.get(weaTableColumn.getColumn()).toString())); + } else { + row.add(map.getOrDefault(weaTableColumn.getColumn(), StringUtils.EMPTY)); + } + } rows.add(row); } String sheetName = "薪资核算结果"; // return ExcelUtil.genWorkbookV2(rows, sheetName, total); - return ExcelUtilPlus.genWorkbookWithChildTitleColumn(rows, sheetName, total); + return ExcelUtilPlus.genWorkbookWithChildTitleColumnWithExcelFormat(rows, sheetName, total); } diff --git a/src/com/engine/salary/util/excel/ExcelUtilPlus.java b/src/com/engine/salary/util/excel/ExcelUtilPlus.java index f8cb09c79..d54b875ab 100644 --- a/src/com/engine/salary/util/excel/ExcelUtilPlus.java +++ b/src/com/engine/salary/util/excel/ExcelUtilPlus.java @@ -6,10 +6,16 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.*; +import org.springframework.beans.BeanUtils; import java.awt.Color; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class ExcelUtilPlus { /** @@ -342,7 +348,8 @@ public class ExcelUtilPlus { return workbook; } - public static XSSFWorkbook genWorkbookWithChildTitleColumn(List> rowList, String sheetName, boolean lastRowRed) { + // 数值项目修改excel单元格格式为数值 + public static XSSFWorkbook genWorkbookWithChildTitleColumnWithExcelFormat(List> rowList, String sheetName, boolean lastRowRed) { XSSFWorkbook workbook = new XSSFWorkbook(); // 设置title样式 @@ -413,6 +420,195 @@ public class ExcelUtilPlus { XSSFRow row0 = sheet.createRow(0); XSSFRow row1 = sheet.createRow(1); + // 保留小数位数 + List patternList = new ArrayList<>(); + List header = rowList.get(0); + int startIndex = 0; + for (int i = 0; i < header.size(); i++) { + WeaTableColumnGroup columnGroupItem = (WeaTableColumnGroup) header.get(i); + if (columnGroupItem.getChildren() == null) { + sheet.addMergedRegion(new CellRangeAddress(0, 1, startIndex, startIndex)); + + XSSFCell rowZeroCell = row0.createCell(startIndex, CellType.STRING); + rowZeroCell.setCellValue(columnGroupItem.getText().toString()); + rowZeroCell.setCellStyle(titleCellStyle); + XSSFCell rowOneCell = row1.createCell(startIndex, CellType.STRING); + rowOneCell.setCellValue(columnGroupItem.getText().toString()); + rowOneCell.setCellStyle(titleCellStyle); + //设置列宽 + sheet.setColumnWidth(startIndex,Math.max(12, columnGroupItem.getText().length()*4)*256); + startIndex++; + patternList.add(columnGroupItem.getPattern()); + } else { + List childrenList = columnGroupItem.getChildren(); + int endIndex = startIndex + childrenList.size() - 1; + + if (endIndex > startIndex) { + sheet.addMergedRegion(new CellRangeAddress(0, 0, startIndex, endIndex)); + } + + XSSFCell cell = row0.createCell(startIndex, CellType.STRING); + cell.setCellValue(columnGroupItem.getText().toString()); + cell.setCellStyle(childTitleCellStyle); + + for (int j = 0; j < childrenList.size(); j++) { + WeaTableColumnGroup childrenItem = (WeaTableColumnGroup) childrenList.get(j); + + XSSFCell subHeader = row1.createCell(startIndex + j, CellType.STRING); + subHeader.setCellValue(childrenItem.getText().toString()); + subHeader.setCellStyle(titleCellStyle); + //设置列宽 + sheet.setColumnWidth(startIndex + j,Math.max(12, childrenItem.getText().length()*4)*256); + patternList.add(childrenItem.getPattern()); + } + + startIndex += childrenList.size(); + + } + + } + + HashMap numberCellStyleMap = new HashMap(); + HashMap numberRedCellStyleMap = new HashMap(); + XSSFDataFormat df = workbook.createDataFormat(); + patternList.stream().distinct().forEach(p -> { + String start = "0."; + if (p==0) { + start ="0"; + } + XSSFCellStyle numberRedCellStyle = workbook.createCellStyle(); + BeanUtils.copyProperties(redCellStyle, numberRedCellStyle); + numberRedCellStyle.setFont(redFont); + short format = df.getFormat(start + Stream.generate(() -> "0").limit(p).collect(Collectors.joining()) + "_ "); + numberRedCellStyle.setDataFormat(format); + // 最后一行红色 + numberRedCellStyleMap.put(p, numberRedCellStyle); + XSSFCellStyle numberCellStyle = workbook.createCellStyle(); + BeanUtils.copyProperties(cellStyle, numberCellStyle); + numberCellStyle.setDataFormat(format); + numberCellStyleMap.put(p, numberCellStyle); + }); + + for (int rowIndex = 1; rowIndex < rowList.size(); rowIndex++) { + List infoList = rowList.get(rowIndex); + XSSFRow row = sheet.createRow(rowIndex + 1); + float height = 18; + float finalHeight = 18; + + for (int cellIndex = 0; cellIndex < infoList.size(); cellIndex++) { + XSSFCell cell = row.createCell(cellIndex); + + if (rowIndex == 0) { + cell.setCellStyle(titleCellStyle); + } else { + if (lastRowRed && rowIndex == rowList.size() - 1) { + cell.setCellStyle(redCellStyle); + } else { + cell.setCellStyle(cellStyle); + } + } + Object o = infoList.get(cellIndex); + if (o instanceof String) { + cell.setCellType(CellType.STRING); + cell.setCellValue(String.valueOf(o)); + } else if (o instanceof BigDecimal) { + cell.setCellType(CellType.NUMERIC); + cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue()); + if (lastRowRed && rowIndex == rowList.size() - 1) { + cell.setCellStyle(numberRedCellStyleMap.get(patternList.get(cellIndex))); + } else { + cell.setCellStyle(numberCellStyleMap.get(patternList.get(cellIndex))); + } + } else if (o instanceof Boolean) { + cell.setCellType(CellType.BOOLEAN); + cell.setCellValue(String.valueOf(o)); + } else if (o instanceof Date) { + cell.setCellType(CellType.STRING); + cell.setCellValue(SalaryDateUtil.getFormatLocalDate((Date) o)); + } else { + cell.setCellType(CellType.STRING); + cell.setCellValue(o == null ? "" : o.toString()); + } + + //判断是否要调整高度 + int width = sheet.getColumnWidth(cellIndex) / 256; + finalHeight = getFinalHeight(o, width, finalHeight, height); + } + row.setHeightInPoints(finalHeight); + } + return workbook; + } + + public static XSSFWorkbook genWorkbookWithChildTitleColumn(List> rowList, String sheetName, boolean lastRowRed) { + XSSFWorkbook workbook = new XSSFWorkbook(); + + // 设置title样式 + XSSFCellStyle titleCellStyle = workbook.createCellStyle(); + XSSFFont titleFont = workbook.createFont(); + titleFont.setBold(true); + titleFont.setFontName("仿宋"); + titleFont.setFontHeightInPoints((short) 15); + titleCellStyle.setFont(titleFont); + titleCellStyle.setAlignment(HorizontalAlignment.CENTER); + titleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景色 + titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + titleCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + titleCellStyle.setBorderLeft(BorderStyle.THIN); + titleCellStyle.setBorderRight(BorderStyle.THIN); + titleCellStyle.setBorderTop(BorderStyle.THIN); + titleCellStyle.setBorderBottom(BorderStyle.THIN); + + XSSFCellStyle childTitleCellStyle = workbook.createCellStyle(); + childTitleCellStyle.setFont(titleFont); + childTitleCellStyle.setAlignment(HorizontalAlignment.LEFT); + childTitleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景色 + childTitleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + childTitleCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + childTitleCellStyle.setBorderLeft(BorderStyle.THIN); + childTitleCellStyle.setBorderRight(BorderStyle.THIN); + childTitleCellStyle.setBorderTop(BorderStyle.THIN); + childTitleCellStyle.setBorderBottom(BorderStyle.THIN); + + + + // 设置主体样式 + XSSFCellStyle cellStyle = workbook.createCellStyle(); + XSSFFont font = workbook.createFont(); + font.setFontName("宋体"); + font.setFontHeightInPoints((short) 10);// 设置字体大小 + cellStyle.setFont(font);// 选择需要用到的字体格式 + cellStyle.setWrapText(true); + + cellStyle.setBorderLeft(BorderStyle.THIN); + cellStyle.setBorderRight(BorderStyle.THIN); + cellStyle.setBorderTop(BorderStyle.THIN); + cellStyle.setBorderBottom(BorderStyle.THIN); + + XSSFCellStyle redCellStyle = workbook.createCellStyle(); + XSSFFont redFont = workbook.createFont(); + redFont.setFontName("宋体"); + redFont.setFontHeightInPoints((short) 10);// 设置字体大小 + redFont.setColor(new XSSFColor(new Color(0xFF3333), null)); + redFont.setBold(true); + redCellStyle.setWrapText(true); + redCellStyle.setFont(redFont);// 选择需要用到的字体格式 + + redCellStyle.setBorderLeft(BorderStyle.THIN); + redCellStyle.setBorderRight(BorderStyle.THIN); + redCellStyle.setBorderTop(BorderStyle.THIN); + redCellStyle.setBorderBottom(BorderStyle.THIN); + + XSSFSheet sheet = workbook.createSheet(sheetName); + //自适应宽度 + sheet.autoSizeColumn(0, true); + //默认列宽 + sheet.setDefaultColumnWidth(20); + //默认行高 + sheet.setDefaultRowHeightInPoints(18); + + //处理合并单元格 + XSSFRow row0 = sheet.createRow(0); + XSSFRow row1 = sheet.createRow(1); List header = rowList.get(0); int startIndex = 0; for (int i = 0; i < header.size(); i++) { From 7a57849a2595000cfff557f3bafc7afd52ed29d3 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 21 Sep 2023 15:05:39 +0800 Subject: [PATCH 37/37] =?UTF-8?q?=E6=8A=A5=E8=A1=A8fixbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/mapper/report/SalaryStatisticsPushMapper.java | 2 +- .../report/service/impl/SalaryStatisticsPushServiceImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.java b/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.java index bd982759e..bc49e30f6 100644 --- a/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.java +++ b/src/com/engine/salary/mapper/report/SalaryStatisticsPushMapper.java @@ -79,5 +79,5 @@ public interface SalaryStatisticsPushMapper { * @param reportId * @return */ - List listByReportIdAndIds(@Param("reportId") Long reportId, @Param("ids") List ids); + List listByReportIdAndIds(@Param("reportId") String reportId, @Param("ids") List ids); } diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java index 0badf0fb9..97b67c878 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java @@ -735,7 +735,7 @@ public class SalaryStatisticsPushServiceImpl extends Service implements SalarySt @Override public List getPushListByReportIdAndIds(Long reportId, List ids) { - List pushList = getSalaryStatisticsPushMapper().listByReportIdAndIds(reportId, ids); + List pushList = getSalaryStatisticsPushMapper().listByReportIdAndIds(reportId.toString(), ids); pushList = pushList.stream().filter( push -> { return Arrays.asList(push.getReportIds().split(",")).contains(reportId.toString()); }).collect(Collectors.toList());